How can I share Entities between JBoss AS and J2SE?
bsheward Mar 25, 2010 2:40 PMHi,
I have a package full of Entity Beans (annotated with @Entity and @Table). This package exists within a JAR which until now has been deployed as part of a EAR into JBoss AS. The persistence.xml in the JAR is:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Persistence deployment descriptor for dev profile -->
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="abc">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:abc/datastore/ABCDS</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
<property name="hibernate.hbm2ddl.auto" value="validate"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
I want to use the same set of Entity Beans in a J2SE application, but I've run into some problems. It seems that I cannot define 2 persistence units in the same JAR, so under time contraints, I copied my Entity Bean classes, used the following persistence.xml in a different JAR file:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Persistence deployment descriptor for dev profile -->
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="abc-se">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
</persistence-unit>
</persistence>
With the following code:
Map configOverrides = new HashMap();
configOverrides.put( "hibernate.dialect", "org.hibernate.dialect.SQLServerDialect" );
configOverrides.put( "hibernate.connection.driver_class", "net.sourceforge.jtds.jdbc.Driver" );
configOverrides.put( "hibernate.connection.username", user );
configOverrides.put( "hibernate.connection.password", password );
configOverrides.put( "hibernate.connection.url", url );
LOGGER.info( "Create EntityManagerFactory" );
EntityManagerFactory emf = Persistence.createEntityManagerFactory( "abc-se", configOverrides );
LOGGER.info( "Create EntityManager" );
em = emf.createEntityManager(); // Retrieve an application managed entity manager
So, my question is, how can I share a single JAR of Entities across a J2EE application? I can see a few options:
- Create a JNDI based datasource in my J2SE application, and use the "abc" persistence unit.
- Use the "abc" persistence unit in my J2SE application, but somehow remove the JNDI reference and use the configOverrides map before creating the EntityManager.
- Find some way to define 2 persistence units in the same JAR
- Something else?
Can anybody offer any advice?
Thanks and Regards,
Barry