Thanks for the help, David.

I broke up the component library to make it modular, as there are presently
between 70-100 entities total.  I'm really REALLY not interested in
combining those JARs, and have been operating on a couple of assumptions
about persistence units and how they must be packaged.

I thought that each component JAR needed to include its own persistence.xmlfile.

The spec says:

> A persistence unit may be packaged within one or more jar files contained
> within a WAR
>

But also:

> Only one persistence unit of any given name may be defined
> within a single EJB-JAR file, within a single WAR file, within a single
> application client jar, or within
> an EAR (in the EAR root or lib directory).
>

Do my component JARs need to have persistence.xml files at all?  None of
them are the root of the persistence unit--that seems to be the WAR.
Shouldn't I define the persistence.xml file in the web app and reference the
JARs from there?  It would certainly simplify matters.

Also, in which file do I configure my DataSource in embedded OpenEJB?

Regards,
--
Alex





On Dec 17, 2007 2:13 AM, David Blevins <[EMAIL PROTECTED]> wrote:

> On Dec 16, 2007, at 10:32 PM, Alexander Saint Croix wrote:
>
> > I am deploying in an embedded OpenEJB environment in Tomcat.
>
>
> >    ...
> >        // inside of the doGet(...) method:
> >
> >        FirstEntity ent1 = new FirstEntity();
> >        ent1.setName("Entity name");
> >        ent1.setDescription("Entity description");
> >        ent1.setType("Entity type");
> >
> >        mgr.persist(ent1);
> >
> >        SecondEntity ent2 = new SecondEntity();
> >        ent2.setName("Entity name 2");
> >        ent2.setDescription("Entity description 2");
> >        ent2.setSecondType("Entity type 2");
> >
> >        mgr.persist(ent2);
>
>
> > @Stateless
> > public class DefaultBeanManager implements BeanManager {
> >
> >    @PersistenceUnit(unitName="corm-base")
> >    EntityManagerFactory emf;
> >
> >    @PersistenceUnit(unitName="corm-party")
> >    EntityManagerFactory emf2;
> >
> >    public void persist(FirstEntity a) {
> >
> >        System.setProperty("openjpa.ConnectionDriverName", "
> > com.mysql.jdbc.Driver");
> >        System.setProperty("openjpa.ConnectionURL",
> > "jdbc:mysql://localhost/corm");
> >        System.setProperty("openjpa.jdbc.SynchronizeMappings",
> > "buildSchema");
> >        System.setProperty("openjpa.ConnectionUserName", "root");
> >        System.setProperty("openjpa.ConnectionPassword",
> > "n00p455wyrd");
> >
> >        EntityManager em = emf.createEntityManager();
> >        em.getTransaction().begin();
> >        em.persist(a);
> >        em.getTransaction().commit();
> >        em.close();
> >
> >    }
> >
> >    public void persist(SecondEntity a) {
> >
> >        System.setProperty("openjpa.ConnectionDriverName", "
> > com.mysql.jdbc.Driver");
> >        System.setProperty("openjpa.ConnectionURL",
> > "jdbc:mysql://localhost/corm");
> >        System.setProperty("openjpa.jdbc.SynchronizeMappings",
> > "buildSchema");
> >        System.setProperty("openjpa.ConnectionUserName", "root");
> >        System.setProperty("openjpa.ConnectionPassword",
> > "n00p455wyrd");
> >
> >        EntityManager em = emf2.createEntityManager();
> >        em.getTransaction().begin();
> >        em.persist(a);
> >        em.getTransaction().commit();
> >        em.close();
> >    }
> > }
>
>
> > <persistence xmlns="http://java.sun.com/xml/ns/persistence";
> > version="1.0">
> >    <persistence-unit name="corm-party" transaction-
> > type="RESOURCE_LOCAL">
> >    </persistence-unit>
> > </persistence>
> >
> > How should I correctly configure the ConnectionDriverName property for
> > multiple persistence units so that these component jars can cooperate?
>
> Definitely do not set ConnectionDriverName at all, likewise for any of
> the OpenJPA properties that smell of "let us make the datasource for
> you".  You need to configure your datasource in Tomcat or OpenEJB
> (either is fine as we sync the environments together), then you *must*
> either a) set these two system properties:
>
>  javax.persistence.jtaDataSource=java:openejb/Resource/myDataSource
>  javax.persistence.nonJtaDataSource=java:openejb/Resource/
> myNonJtaDataSource
>
> or b) set them in each persistence.xml via:
>    <persistence-unit name="corm-party">
>      <jta-data-source>java:openejb/Resource/myDataSource</jta-data-
> source>
>      <non-jta-data-source>=java:openejb/Resource/myNonJtaDataSource</
> non-jta-data-source>
>    </persistence-unit>
>
> The second and more important.  Why do you want to split these Entity
> beans up into so many persitence-units.  Is this a packaging concern
> or is it really your intent to have several completely separate
> caches, each with it's own connection to the database, and each
> managing it's own transaction with no cooperation and visibility to
> the other?  I suspect the answer is no as you have attempted to point
> them all at the same database.  If you start sharing data between them
> you could wind up with some serious data integrity issues.
>
> I can recommend a better approach once I better understand your
> motivation.
>
> -David
>
>

Reply via email to