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
>>
>>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.