You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cayenne.apache.org by Rick Bonnett <rb...@mesca.com> on 2013/08/20 19:58:45 UTC

Config files in jar file?

This is all related to a RESTful service running under Glassfish and developed in Eclipse.

In my current project, I have all my Cayenne model classes, and a corresponding manager class contained in a separate namespace, say EventModel. I export a jar file for this namespace and use Maven to then include it as a dependency for a separate project, EventService.

The problem I am running into is getting the Cayenne XML files accessible at runtime when I call the service on Glassfish. They are being included in the jar file for EventModel, which is being deployed when I publish to Glassfish in Eclipse. However, they are not sitting separately outside of the jar file for EvenrtModel. 

Is it possible to specify the path to the config files based on the jar file? If so how would I go about doing so? Everything related to Cayenne is contained within the same EventModel.jar file.

Thanks
Rick

Re: Config files in jar file?

Posted by Andrus Adamchik <an...@objectstyle.org>.
> I had expected that since my model classes are located in the jar file, that the ClassLoader would also find my config files there as well.

cayenne-server.jar should be loaded by the same ClassLoader as your model classes.

Andrus

On Aug 28, 2013, at 4:02 PM, Rick Bonnett <rb...@mesca.com> wrote:

> Had to put this one aside for a while, but picking it back up now.
> 
> Yes, this is under 31B2. Here's the exception/stack trace I am receiving. I had expected that since my model classes are located in the jar file, that the ClassLoader would also find my config files there as well.
> 
> I'd like to do this without having to write a custom resource locator, so I'll be trying what I can. Any insights would be helpful..
> Thanks
> 
> org.apache.cayenne.configuration.server.DataDomainLoadException: [v.3.1B2 Feb 05 2013 20:48:18] Configuration resource "cayenne-mesca_events.xml" is not found.
> at org.apache.cayenne.configuration.server.DataDomainProvider.createAndInitDataDomain(DataDomainProvider.java:143)
> at org.apache.cayenne.configuration.server.DataDomainProvider.get(DataDomainProvider.java:106)
> at org.apache.cayenne.configuration.server.DataDomainProvider.get(DataDomainProvider.java:60)
> at org.apache.cayenne.di.spi.CustomProvidersProvider.get(CustomProvidersProvider.java:38)
> at org.apache.cayenne.di.spi.FieldInjectingProvider.get(FieldInjectingProvider.java:42)
> at org.apache.cayenne.di.spi.DefaultScopeProvider.get(DefaultScopeProvider.java:49)
> at org.apache.cayenne.di.spi.DefaultInjector.getInstance(DefaultInjector.java:107)
> at org.apache.cayenne.di.spi.FieldInjectingProvider.injectMember(FieldInjectingProvider.java:93)
> at org.apache.cayenne.di.spi.FieldInjectingProvider.injectMembers(FieldInjectingProvider.java:58)
> at org.apache.cayenne.di.spi.FieldInjectingProvider.get(FieldInjectingProvider.java:43)
> at org.apache.cayenne.di.spi.DefaultScopeProvider.get(DefaultScopeProvider.java:49)
> at org.apache.cayenne.di.spi.DefaultInjector.getInstance(DefaultInjector.java:103)
> at org.apache.cayenne.configuration.CayenneRuntime.getContext(CayenneRuntime.java:180)
> at com.mesca.events.manager.EventManager.InitializeCayenne(EventManager.java:25)
> 
> 
> On Aug 21, 2013, at 3:23 AM, Andrus Adamchik <an...@objectstyle.org>> wrote:
> 
> I don't have first-hand experience with JEE6 namespaces, but default Cayenne config loading is based on ClassLoader URLs. You didn't mention what version of Cayenne you are using, but assuming 3.1, ClassLoaderResourceLocator.class is responsible for XML file location. It does the following to find the right ClassLoader:
> 
> protected ClassLoader getClassLoader() {
>       ClassLoader loader = Thread.currentThread().getContextClassLoader();
> 
>       if (loader == null) {
>           loader = getClass().getClassLoader();
>       }
> 
>       if (loader == null) {
>           loader = ClassLoader.getSystemClassLoader();
>       }
> 
>       if (loader == null) {
>           throw new IllegalStateException(
>                   "Can't detect ClassLoader to use for resouyrce location");
>       }
> 
>       return loader;
> }
> 
> What this means is that XML files must be accessible from the ClassLoader that loads Cayenne's own classes. BTW, you didn't post the error you are getting either. Maybe there are some clues. And finally - if the standard ResourceLocator above doesn't work, you can define your own.
> 
> Sorry if this answer is too abstract. I guess I'll need to experiment with namespaces to better understand class loading patterns involved.
> 
> Andrus
> 
> 
> 
> On Aug 20, 2013, at 8:58 PM, Rick Bonnett <rb...@mesca.com>> wrote:
> This is all related to a RESTful service running under Glassfish and developed in Eclipse.
> 
> In my current project, I have all my Cayenne model classes, and a corresponding manager class contained in a separate namespace, say EventModel. I export a jar file for this namespace and use Maven to then include it as a dependency for a separate project, EventService.
> 
> The problem I am running into is getting the Cayenne XML files accessible at runtime when I call the service on Glassfish. They are being included in the jar file for EventModel, which is being deployed when I publish to Glassfish in Eclipse. However, they are not sitting separately outside of the jar file for EvenrtModel.
> 
> Is it possible to specify the path to the config files based on the jar file? If so how would I go about doing so? Everything related to Cayenne is contained within the same EventModel.jar file.
> 
> Thanks
> Rick
> 
> 


Re: Config files in jar file?

Posted by Rick Bonnett <rb...@mesca.com>.
Had to put this one aside for a while, but picking it back up now.

Yes, this is under 31B2. Here's the exception/stack trace I am receiving. I had expected that since my model classes are located in the jar file, that the ClassLoader would also find my config files there as well.

I'd like to do this without having to write a custom resource locator, so I'll be trying what I can. Any insights would be helpful..
Thanks

org.apache.cayenne.configuration.server.DataDomainLoadException: [v.3.1B2 Feb 05 2013 20:48:18] Configuration resource "cayenne-mesca_events.xml" is not found.
at org.apache.cayenne.configuration.server.DataDomainProvider.createAndInitDataDomain(DataDomainProvider.java:143)
at org.apache.cayenne.configuration.server.DataDomainProvider.get(DataDomainProvider.java:106)
at org.apache.cayenne.configuration.server.DataDomainProvider.get(DataDomainProvider.java:60)
at org.apache.cayenne.di.spi.CustomProvidersProvider.get(CustomProvidersProvider.java:38)
at org.apache.cayenne.di.spi.FieldInjectingProvider.get(FieldInjectingProvider.java:42)
at org.apache.cayenne.di.spi.DefaultScopeProvider.get(DefaultScopeProvider.java:49)
at org.apache.cayenne.di.spi.DefaultInjector.getInstance(DefaultInjector.java:107)
at org.apache.cayenne.di.spi.FieldInjectingProvider.injectMember(FieldInjectingProvider.java:93)
at org.apache.cayenne.di.spi.FieldInjectingProvider.injectMembers(FieldInjectingProvider.java:58)
at org.apache.cayenne.di.spi.FieldInjectingProvider.get(FieldInjectingProvider.java:43)
at org.apache.cayenne.di.spi.DefaultScopeProvider.get(DefaultScopeProvider.java:49)
at org.apache.cayenne.di.spi.DefaultInjector.getInstance(DefaultInjector.java:103)
at org.apache.cayenne.configuration.CayenneRuntime.getContext(CayenneRuntime.java:180)
at com.mesca.events.manager.EventManager.InitializeCayenne(EventManager.java:25)


On Aug 21, 2013, at 3:23 AM, Andrus Adamchik <an...@objectstyle.org>> wrote:

I don't have first-hand experience with JEE6 namespaces, but default Cayenne config loading is based on ClassLoader URLs. You didn't mention what version of Cayenne you are using, but assuming 3.1, ClassLoaderResourceLocator.class is responsible for XML file location. It does the following to find the right ClassLoader:

protected ClassLoader getClassLoader() {
       ClassLoader loader = Thread.currentThread().getContextClassLoader();

       if (loader == null) {
           loader = getClass().getClassLoader();
       }

       if (loader == null) {
           loader = ClassLoader.getSystemClassLoader();
       }

       if (loader == null) {
           throw new IllegalStateException(
                   "Can't detect ClassLoader to use for resouyrce location");
       }

       return loader;
}

What this means is that XML files must be accessible from the ClassLoader that loads Cayenne's own classes. BTW, you didn't post the error you are getting either. Maybe there are some clues. And finally - if the standard ResourceLocator above doesn't work, you can define your own.

Sorry if this answer is too abstract. I guess I'll need to experiment with namespaces to better understand class loading patterns involved.

Andrus



On Aug 20, 2013, at 8:58 PM, Rick Bonnett <rb...@mesca.com>> wrote:
This is all related to a RESTful service running under Glassfish and developed in Eclipse.

In my current project, I have all my Cayenne model classes, and a corresponding manager class contained in a separate namespace, say EventModel. I export a jar file for this namespace and use Maven to then include it as a dependency for a separate project, EventService.

The problem I am running into is getting the Cayenne XML files accessible at runtime when I call the service on Glassfish. They are being included in the jar file for EventModel, which is being deployed when I publish to Glassfish in Eclipse. However, they are not sitting separately outside of the jar file for EvenrtModel.

Is it possible to specify the path to the config files based on the jar file? If so how would I go about doing so? Everything related to Cayenne is contained within the same EventModel.jar file.

Thanks
Rick



Re: Config files in jar file?

Posted by Andrus Adamchik <an...@objectstyle.org>.
I don't have first-hand experience with JEE6 namespaces, but default Cayenne config loading is based on ClassLoader URLs. You didn't mention what version of Cayenne you are using, but assuming 3.1, ClassLoaderResourceLocator.class is responsible for XML file location. It does the following to find the right ClassLoader:

protected ClassLoader getClassLoader() {
        ClassLoader loader = Thread.currentThread().getContextClassLoader();

        if (loader == null) {
            loader = getClass().getClassLoader();
        }

        if (loader == null) {
            loader = ClassLoader.getSystemClassLoader();
        }

        if (loader == null) {
            throw new IllegalStateException(
                    "Can't detect ClassLoader to use for resouyrce location");
        }

        return loader;
}

What this means is that XML files must be accessible from the ClassLoader that loads Cayenne's own classes. BTW, you didn't post the error you are getting either. Maybe there are some clues. And finally - if the standard ResourceLocator above doesn't work, you can define your own.

Sorry if this answer is too abstract. I guess I'll need to experiment with namespaces to better understand class loading patterns involved.

Andrus



On Aug 20, 2013, at 8:58 PM, Rick Bonnett <rb...@mesca.com> wrote:
> This is all related to a RESTful service running under Glassfish and developed in Eclipse.
> 
> In my current project, I have all my Cayenne model classes, and a corresponding manager class contained in a separate namespace, say EventModel. I export a jar file for this namespace and use Maven to then include it as a dependency for a separate project, EventService.
> 
> The problem I am running into is getting the Cayenne XML files accessible at runtime when I call the service on Glassfish. They are being included in the jar file for EventModel, which is being deployed when I publish to Glassfish in Eclipse. However, they are not sitting separately outside of the jar file for EvenrtModel. 
> 
> Is it possible to specify the path to the config files based on the jar file? If so how would I go about doing so? Everything related to Cayenne is contained within the same EventModel.jar file.
> 
> Thanks
> Rick