Menu

Classes not found at runtime

Help Java
Anonymous
2012-11-28
2013-05-29
  • Anonymous

    Anonymous - 2012-11-28

    The Problem:
    I try to store an object and get a java.lang.ClassNotFoundException: Error while creating (reflection) class caused by ClassNotFoundException

    Situation:
    I call some basic inserts and a select all query in a testfunction. If I call this testfunction in a simple main function everything works as aspected.  If I call it in a Play! one framework controller it does not.

    My guess:
    It looks like this database cannot handle enhanced classes?

    Caused by: org.neodatis.odb.ODBRuntimeException: 
    NeoDatis has thrown an Exception, please help us filling a bug report at https://sourceforge.net/tracker/?func=add&group_id=179124&atid=887885 with the following error message
    Version=1.9.30 , Build=689, Date=10-11-2010-08-21-21, Thread=play-thread-1
    NeoDatisError:228:Error while creating (reflection) class models.Card
    StackTrace:
        at org.neodatis.odb.impl.core.layers.layer2.instance.ODBClassPool.getClass(ODBClassPool.java:82)
        at org.neodatis.odb.impl.core.layers.layer1.introspector.AbstractClassIntrospector.getSuperClasses(AbstractClassIntrospector.java:388)
        at org.neodatis.odb.impl.core.layers.layer1.introspector.AbstractClassIntrospector.getAllFields(AbstractClassIntrospector.java:447)
        at org.neodatis.odb.impl.core.layers.layer1.introspector.AbstractClassIntrospector.getClassInfo(AbstractClassIntrospector.java:348)
        at org.neodatis.odb.impl.core.layers.layer1.introspector.AbstractClassIntrospector.instrospect(AbstractClassIntrospector.java:276)
        at org.neodatis.odb.core.layers.layer3.engine.AbstractStorageEngine.init(AbstractStorageEngine.java:233)
        at org.neodatis.odb.core.layers.layer3.engine.AbstractStorageEngine.<init>(AbstractStorageEngine.java:176)
        at org.neodatis.odb.impl.core.layers.layer3.engine.LocalStorageEngine.<init>(LocalStorageEngine.java:18)
        at org.neodatis.odb.impl.DefaultCoreProvider.getClientStorageEngine(DefaultCoreProvider.java:140)
        at org.neodatis.odb.impl.main.LocalODB.<init>(LocalODB.java:49)
        at org.neodatis.odb.impl.main.LocalODB.getInstance(LocalODB.java:35)
        at org.neodatis.odb.ODBFactory.open(ODBFactory.java:72)
        at controllers.TestingClass.<clinit>(TestingClass.java:33)
        ... 7 more
    Caused by: java.lang.ClassNotFoundException: models.Card
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
        at org.neodatis.odb.impl.core.layers.layer2.instance.ODBClassPool.getClass(ODBClassPool.java:75)
        ... 19 more
    
     
  • Anonymous

    Anonymous - 2012-11-28

    Solved
    I solved I myself this way:

    The problem beginns here:

    org.neodatis.odb.impl.core.layers.layer2.instance.ODBClassPool.getClass(ODBClassPool.java:82)
    

    It tries to get the Class from the current ClassLoader

    clazz = OdbConfiguration.getClassLoader().loadClass(className);
    

    The problem here is, that the Play! one framework uses bytexode-enhancement, it replaces changed classes at runtime and has other nice toys. It uses an own ClassLoader for that.

    The line

    org.neodatis.odb.OdbConfiguration.setClassLoader(play.Play.classloader);
    

    solved my problem. I begin to like this fast database  :D

     

Log in to post a comment.