Thanks Martin for the long and detailed reply! This seems to be exactly
what I need. I was actually thinking of something similar last night as I
lay in the sack. I'll try it and let you know.
Michael
----- Original Message -----
From: "Martin Kal�n" <[EMAIL PROTECTED]>
To: "OJB Users List" <[EMAIL PROTECTED]>
Sent: Tuesday, December 09, 2003 2:27 AM
Subject: Re: ojb mixing up jdbc-connection-descriptors
> Michael Mogley wrote:
>
> > OK, I've got two Tomcat webapps. Each with it's own OJB.properties and
repository xml files defining two different mappings and two different
connection descriptors.
> >
> > Ojb libraries are in common/lib to allow sharing among webapps.
>
> What you can do is use different "OJB profiles" for each webapp and let
> the shared (static/global) instance of OJB contain only the OJB-internal
> repository mappings.
>
> If you let "OJB.properties" and "repository.xml" reside in the shared
> instance, cut down the repository to a bare minimum:
>
> <?xml version="1.0" encoding="ISO-8859-1"?>
> <!DOCTYPE descriptor-repository SYSTEM "repository.dtd" [
> <!ENTITY internal SYSTEM "repository_internal.xml">
> ]>
> <descriptor-repository version="1.0">
> &internal;
> </descriptor-repository>
>
>
> The "OJB profiles" I am talking about are defined by the
> org.apache.ojb.broker.metadata.MetadataManager class and the methods:
> addProfile()
> loadProfile()
>
> If you want to be able to use different OJB profiles for different
> threads you need to activate per-thread-repository handling with:
> MetadataManager.getInstance().setEnablePerThreadChanges(true);
>
>
>
> What I do is have a static initializer in one of my main persistence
> classes in one webapp set up an OJB profile like this:
>
> (Java-indenting is pretty poor to make lines short...)
>
> public static String profileKey = "APP_1";
>
> static {
> try {
> MetadataManager mm = MetadataManager.getInstance();
> mm.setEnablePerThreadChanges(true);
>
> // Merge in JDBC connection-pools for application 1
> // (I do this globally and not per-thread)
>
> final ConnectionRepository connections;
> connections = mm.readConnectionRepository(
> "repository_database_app1.xml");
> mm.mergeConnectionRepository(connections);
>
> // Merge in class-descriptors for application 1
> // Made on a copy of the global repository, this is my "profile"
> DescriptorRepository repository = mm.copyOfGlobalRepository();
> final DescriptorRepository descriptors;
> descriptors = mm.readDescriptorRepository(
> "repository_user_app1.xml");
> mm.mergeDescriptorRepository(repository, descriptors, false);
>
> mm.addProfile(profileKey, repository);
> } catch (Throwable t) {
>
> // Just an example...
> throw new RuntimeException(t);
> }
> }
>
> Example "repository_database_app1.xml":
> <?xml version="1.0" encoding="ISO-8859-1"?>
> <!DOCTYPE database-repository SYSTEM "repository.dtd">
> <database-repository>
> <jdbc-connection-descriptor jcd-alias="APP1_ALIAS1" ...>
> <connection-pool .../>
> <sequence-manager .../>
> ....
> </jdbc-connection-descriptor>
> </database-repository>
>
> Example "repository_user_app1.xml":
> <?xml version="1.0" encoding="ISO-8859-1"?>
> <!DOCTYPE descriptor-repository SYSTEM "repository.dtd">
> <descriptor-repository version="1.0">
> <class-descriptor class="com.app1.FirstClass" .../>
> ...
> </descriptor-repository>
>
> Both these XML-files would reside in webapps/APP1/WEB-INF/classes or a
> JAR in webapps/APP1/WEB-INF/lib. (Mine are in a JAR which works fine.)
>
> With per-thread support enabled and the static initializer done, I can
> then request the OJB-profile at runtime using my profileKey:
>
> public void initialize() throws Exception {
> MetadataManager mm = MetadataManager.getInstance();
> mm.loadProfile(profileKey);
> }
>
>
> Note that the profile key is an arbitrary Object-key for a Map so you
> don't have to use String like I do; you could e.g. use Class-objects for
> dynamically looking up an OJB-profile for a given class from a central
> "profile repository".
>
> HTH,
> Martin
>
>
> P.S. The above snippets are from my first shot at OJB profiles, so I
> would appreciate if others who might have used it commented on my
> pattern. Thanks!
>
> --
> Martin Kal�n
> Curalia AB Web: http://www.curalia.se
> Orrspelsv�gen 2B Mail: [EMAIL PROTECTED]
> SE-182 79 Stocksund Tel: +46-8-410 064 40
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]