Hi Andrew,

Are you using JRebel?  I seem to recall someone posting a solution here
about using JRebel during development and getting the Cayenne stack to
reload properly.


On Wed, Oct 16, 2019 at 11:24 PM Andrew Willerding <awillerd...@itsurcom.com>
wrote:

> Hi,
>
> I have an application that dynamically loads jar files and reloads them
> when they are changed.  Unfortunately I'm have an issue getting Cayenne
> to see the classes inside one of these dynamically loaded jar files. I
> have some test code that looks roughly like this.
>
> import com.dbclientbase.Database.Account;
> public class blah
>
>    public testMethod(){
>
>              Account ac = new Account();  // This object instantiates
> without an error so it's visible to app outside of Cayenne
>
>              ObjectContext oc = DBClientBase.getObjectContext(); // This
> method generates the ServerRuntime and fails to get an ObjectContext to
> work with (error below)
>
>   }
> }
>
> The error output below seems to suggest that Cayenne cannot access the
> Account class although I can successfully instantiate a non-Cayenne
> object.  What can I do to ensure that Cayenne also has access to the
> contents of a dynamically loaded and reloaded jar file?  I have found
> references to AdhocObjectFactory.getClassLoader()  but I can't find any
> examples on how to use it and I'm quite at a loss on how to even begin
> use it.
>
> Thanks,
>
> Andrew
>
>
> Exception==>org.apache.cayenne.configuration.server.DataDomainLoadException:
>
> [v.4.1.B2 May 04 2019 09:30:14] DataDomain startup failed: Invalid
> class: com.dbclientbase.Database$Account
>      at
>
> org.apache.cayenne.configuration.server.DataDomainProvider.get(DataDomainProvider.java:123)
>      at
>
> org.apache.cayenne.configuration.server.DataDomainProvider.get(DataDomainProvider.java:60)
>      at
>
> org.apache.cayenne.di.spi.CustomProvidersProvider.get(CustomProvidersProvider.java:39)
>      at
>
> org.apache.cayenne.di.spi.FieldInjectingProvider.get(FieldInjectingProvider.java:43)
>      at
>
> org.apache.cayenne.di.spi.DefaultScopeProvider.get(DefaultScopeProvider.java:50)
>      at
>
> org.apache.cayenne.di.spi.DefaultInjector.getInstance(DefaultInjector.java:139)
>      at
>
> org.apache.cayenne.di.spi.FieldInjectingProvider.value(FieldInjectingProvider.java:103)
>      at
>
> org.apache.cayenne.di.spi.FieldInjectingProvider.injectMember(FieldInjectingProvider.java:68)
>      at
>
> org.apache.cayenne.di.spi.FieldInjectingProvider.injectMembers(FieldInjectingProvider.java:59)
>      at
>
> org.apache.cayenne.di.spi.FieldInjectingProvider.get(FieldInjectingProvider.java:44)
>      at
>
> org.apache.cayenne.di.spi.DefaultScopeProvider.get(DefaultScopeProvider.java:50)
>      at
>
> org.apache.cayenne.di.spi.DefaultInjector.getInstance(DefaultInjector.java:134)
>      at
>
> org.apache.cayenne.configuration.CayenneRuntime.newContext(CayenneRuntime.java:124)
>      at
> com.dbclientbase.DBClientBase.getObjectContext(DBClientBase.java:100)
>      at java.base/java.lang.Thread.run(Thread.java:834)
> Caused by: org.apache.cayenne.di.DIRuntimeException: Invalid class:
> com.Database$Account
>      at
>
> org.apache.cayenne.di.spi.DefaultAdhocObjectFactory.getJavaClass(DefaultAdhocObjectFactory.java:128)
>      at org.apache.cayenne.util.Util.getJavaClass(Util.java:632)
>      at org.apache.cayenne.map.ObjEntity.getJavaClass(ObjEntity.java:265)
>      at
>
> org.apache.cayenne.map.EntityResolver.initCallbacks(EntityResolver.java:141)
>      at
>
> org.apache.cayenne.map.EntityResolver.getCallbackRegistry(EntityResolver.java:163)
>      at
> org.apache.cayenne.access.DataDomain.addListener(DataDomain.java:791)
>      at
> org.apache.cayenne.access.DataDomain.addSyncFilter(DataDomain.java:748)
>      at
>
> org.apache.cayenne.configuration.server.DataDomainProvider.createAndInitDataDomain(DataDomainProvider.java:188)
>      at
>
> org.apache.cayenne.configuration.server.DataDomainProvider.get(DataDomainProvider.java:117)
>      ... 16 more
> Caused by: java.lang.ClassNotFoundException:
> com.dbclientbase.Database.Account
>      at
>
> java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
>      at
>
> java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
>      at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
>      at java.base/java.lang.Class.forName0(Native Method)
>      at java.base/java.lang.Class.forName(Class.java:398)
>      at
>
> org.apache.cayenne.di.spi.DefaultAdhocObjectFactory.getJavaClass(DefaultAdhocObjectFactory.java:93)
>      ... 24 more
>
>

Reply via email to