Re: Cayenne and classpath question and help
Andrew Willerding <[email protected]>
| Newsgroups | gmane.comp.java.cayenne.user |
|---|---|
| Message-ID | <[email protected]> |
I'm not a JRebel user... On 2019-10-17 7:02 a.m., Michael Gentry wrote: > 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 <[email protected]> > 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 >> >>