Chas
unread,Aug 31, 2010, 6:42:06 PM8/31/10Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to Squeryl
Am playing around with Squeryl in Circumflex. Followed the
documentation on site (mixed with a few tricks I picked up from Greg)
and came up with the code below, which gets me the errors that follow.
Apparently, there is some problem with an abstract function, but I've
no clue what that function might be. Can anyone spot it? I've compared
this to working code and can't see any significant difference; I've
read the docs completely and perused the scaladocs; I've searched for
this error on Google. Nada.
import org.squeryl.customtypes.CustomTypesMode._
import org.squeryl.customtypes._
import org.squeryl._
import org.squeryl.dsl._
import org.squeryl.adapters.{PostgreSqlAdapter, H2Adapter}
import java.util.UUID
import java.sql.{SQLException, DatabaseMetaData, ResultSet}
object Monitor extends Schema {
val values = table[ScaleValue]("values")
// override def drop = super.drop
}
trait Domain[A] {
self: CustomType =>
def label: String
def validate(a: A): Unit
def value: A
validate(value)
}
class ValueDenomination(v: Int) extends IntField(v) with Domain[Int] {
def validate(a: Int) = assert(a > -1, "scale value must be non-
negative -- found " + a)
def label = "denomination"
}
class ValueLabel(v: String) extends StringField(v) with Domain[String]
{
def validate(s: String) = assert(s.length > 1, "scale value label
must be at least two characters -- found " + s)
def label = "label"
}
class ScaleValue(val uuid: UUID, val denomination: ValueDenomination,
val label: ValueLabel) extends KeyedEntity[UUID] {
val id: UUID = uuid
}
abstract class MonitSession() {
var _PSQLSession : Option[Session] = None
def acquirePSQLSession() = {
_PSQLSession match {
case Some( session ) => session
case None => {
Class.forName( "org.postgresql.Driver" );
// Class.forName( "org.h2.Driver" );
val session = Session.create(
// java.sql.DriverManager.getConnection( "jdbc:h2:~/monitor/
test", "sa", "" ),
java.sql.DriverManager.getConnection( "jdbc:postgresql://
localhost:5432/monitor", "admin", "" ),
new PostgreSqlAdapter
)
_PSQLSession = Some( session )
session
}
}
}
}
object MonitSession extends MonitSession() {}
object MoniTest extends MonitSession() {
import Monitor._
def initSchema = {
println("-> In MoniTest.initSchema")
// Monitor.drop
Monitor.create
}
def test {
val session: Session = acquirePSQLSession()
println("-> In MoniTest.test")
session.setLogger(println(_))
try {
println("-> Calling MoniTest.initSchema")
initSchema
println("-> Calling MoniTest.populateStore")
populateStore
println("-> Calling MoniTest.testStore")
testStore
} catch {
case e =>
println("Oh, noes! " + e.getMessage)
println("Oh, noes! " + e.getCause)
e.printStackTrace
}
}
def populateStore {
println("-> In MoniTest.populateStore")
values.insert(
List(
new ScaleValue(
UUID.randomUUID,
new ValueDenomination(1),
new ValueLabel("Needs Work")
),
new ScaleValue(
UUID.randomUUID,
new ValueDenomination(2),
new ValueLabel("Good")
),
new ScaleValue(
UUID.randomUUID,
new ValueDenomination(3),
new ValueLabel("Great!")
)
)
)
}
def testStore {
println("-> In MoniTest.testStore")
val vals = from(values)(v => select(v))
for( v <- vals ){ println( "Yo! " + v.denomination.toString + ": "
+ v.label)}
}
}
Stdout after calling MoniTest.test twice:
[INFO] Started Jetty Server
[INFO] Starting scanner at interval of 5 seconds.
-> In MoniTest.test
-> Calling MoniTest.initSchema
-> In MoniTest.initSchema
Oh, noes! scala/runtime/AbstractFunction1$mcVI$sp
Oh, noes! java.lang.ClassNotFoundException:
scala.runtime.AbstractFunction1$mcVI$sp
java.lang.NoClassDefFoundError: scala/runtime/AbstractFunction1$mcVI
$sp
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:
141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at
org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:
392)
at
org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:
363)
at
org.squeryl.internals.PosoMetaData._tryToCreateParamArray(PosoMetaData.scala:
166)
at org.squeryl.internals.PosoMetaData$$anonfun$_const
$1.apply(PosoMetaData.scala:143)
at org.squeryl.internals.PosoMetaData$$anonfun$_const
$1.apply(PosoMetaData.scala:142)
at scala.collection.IndexedSeqOptimized
$class.foreach(IndexedSeqOptimized.scala:35)
at scala.collection.mutable.ArrayOps.foreach(ArrayOps.scala:35)
at org.squeryl.internals.PosoMetaData._const(PosoMetaData.scala:142)
at org.squeryl.internals.PosoMetaData.<init>(PosoMetaData.scala:38)
at org.squeryl.View.<init>(View.scala:35)
at org.squeryl.Table.<init>(Table.scala:27)
at org.squeryl.Schema$class.table(Schema.scala:238)
at com.munat.monit.schema.Monitor$.table(Schema.scala:14)
at com.munat.monit.schema.Monitor$.<init>(Schema.scala:16)
at com.munat.monit.schema.Monitor$.<clinit>(Schema.scala)
at com.munat.monit.schema.MoniTest$.initSchema(Schema.scala:73)
at com.munat.monit.schema.MoniTest$.test(Schema.scala:83)
at com.munat.monit.rest.ValuesRouter$$anonfun
$1.apply(ValuesRouter.scala:12)
at com.munat.monit.rest.ValuesRouter$$anonfun
$1.apply(ValuesRouter.scala:11)
at ru.circumflex.core.RequestRouter$Route.dispatch(router.scala:38)
at ru.circumflex.core.RequestRouter$Route.update(router.scala:47)
at com.munat.monit.rest.ValuesRouter.<init>(ValuesRouter.scala:11)
at com.munat.monit.rest.Main.<init>(main.scala:25)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:
39)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:
27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at ru.circumflex.core.CircumflexFilter.doFilter(filter.scala:138)
at ru.circumflex.core.AbstractCircumflexFilter.doFilter(filter.scala:
72)
at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1148)
at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:
387)
at
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:
216)
at
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:
181)
at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:
765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:
417)
at
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:
230)
at
org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:
114)
at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:
534)
at org.mortbay.jetty.HttpConnection
$RequestHandler.headerComplete(HttpConnection.java:864)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:539)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:
409)
at org.mortbay.thread.QueuedThreadPool
$PoolThread.run(QueuedThreadPool.java:520)
Caused by: java.lang.ClassNotFoundException:
scala.runtime.AbstractFunction1$mcVI$sp
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at
org.codehaus.classworlds.RealmClassLoader.loadClassDirect(RealmClassLoader.java:
195)
at
org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:
255)
at
org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:
274)
at
org.codehaus.classworlds.RealmClassLoader.loadClass(RealmClassLoader.java:
214)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at
org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:
401)
at
org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:
363)
... 55 more
-> In MoniTest.test
-> Calling MoniTest.initSchema
-> In MoniTest.initSchema
Oh, noes! Could not initialize class com.munat.monit.schema.Monitor$
Oh, noes! null
java.lang.NoClassDefFoundError: Could not initialize class
com.munat.monit.schema.Monitor$
at com.munat.monit.schema.MoniTest$.initSchema(Schema.scala:73)
at com.munat.monit.schema.MoniTest$.test(Schema.scala:83)
at com.munat.monit.rest.ValuesRouter$$anonfun
$1.apply(ValuesRouter.scala:12)
at com.munat.monit.rest.ValuesRouter$$anonfun
$1.apply(ValuesRouter.scala:11)
at ru.circumflex.core.RequestRouter$Route.dispatch(router.scala:38)
at ru.circumflex.core.RequestRouter$Route.update(router.scala:47)
at com.munat.monit.rest.ValuesRouter.<init>(ValuesRouter.scala:11)
at com.munat.monit.rest.Main.<init>(main.scala:25)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:
39)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:
27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at ru.circumflex.core.CircumflexFilter.doFilter(filter.scala:138)
at ru.circumflex.core.AbstractCircumflexFilter.doFilter(filter.scala:
72)
at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1148)
at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:
387)
at
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:
216)
at
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:
181)
at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:
765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:
417)
at
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:
230)
at
org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:
114)
at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:
534)
at org.mortbay.jetty.HttpConnection
$RequestHandler.headerComplete(HttpConnection.java:864)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:539)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:
409)
at org.mortbay.thread.QueuedThreadPool
$PoolThread.run(QueuedThreadPool.java:520)
Thanks!
Chas.