I was working on this exact problem, but due to the lack of time and some other priorities it got postponed till after 3.0. This Jira contains links to the design that I had in mind:

https://issues.apache.org/jira/browse/CAY-943

For 3.1 I actually have more radical ideas, so it may look different at the end. Anyways, all the complexity of this task is due to the need to handle a general case of merging multiple descriptors and resolve arising conflicts. If you know that your configuration does not have any such conflicts, it should be reasonably simple to merge things by hand. Here is a rough example (this is for 3.0, some things may be different in 2.0):


Configuration myConfig = new Configuration() {
   // override all abstract methods to do nothing
}

ClassLoader cl = .. // get a thread class loader

// assuming all Cayenne projects are at the root of the classpath:
Enumeration<URL> projectURLs = cl.indResources("cayenne.xml");
while(projectURLs.hasMoreElements()) {
   URL baseURL = projectURLs.nextElement();


   ResourceLocator resourceLocator = new ResourceLocator() {
        // override locator methods as appropriate... e.g.:
        public URL getResource(String name) {
          if(name.equals("cayenne.xml") {
            return baseURL;
          }

          // assuming there's no conflciting DataMap names
          return super.getResource(name);
         }

   } ;
Configuration scratchConfig = new DefaultConfiguration("cayenne.xml", resourceLocator);

   // move all DataMaps from scratchConfig to myConfig
   // move all DataNodes from scratchConfig to myConfig
}

Configuration.initializeSharedConfiguration(myConfig);


Andrus

On Oct 21, 2009, at 7:12 PM, Evgeny Ryabitskiy wrote:

Hello to everyone!

I wonder if our cayenne is able to aggregate it's configuration from
several projects?

Like in my case I have several modules, each has it's configuration
like module1-cayenne.xml
So now root project need to get aggregated configuration from all modules.

So I'm trying to use DefaultConfiguration for each module.
The problem that after initialization configuration rewrites previous
and become singleton configuration (I need them all!)

Maybe I do something wrong or there no such feature?

Evgeny Ryabitskiy.


Reply via email to