Seam mit EJB 3.0: Application mit mehreren Datenbanken

wneumu

Grünschnabel
Hallo Community.

Ich Entwickle momentan eine Applikation mit Verwendung von SEAM-Framework und EJB 3.0 die auf dem JBoss 4.2.2 laufen soll.
Diese Anwendung soll dann auf 2 unterschiedliche Datenbanken zugreifen können.

Tut sie aber nicht.
Näheres zu Anwendung:
Sie besitzt 4 Entity Beans. 2 davon (WSLOGPOS und WSLOGHEAD) sollen auf eine Datenbank (LOGON) zugreifen und die anderen 2 (ORDERROUTING und ORDERROUTINGMESSAGEBLOCKS) auf die andere (URANUSVISION).
Beim hochfahren von JBoss versucht er für jede der 4 Entity Beans zuerst mal in der LOGON-Datenbank nach Tabellen zu suchen und dann in der URANUSVISION
Nach jedem Versuch, wenn JBoss die aktuelle Tabelle nicht findet schmeißt er eine Exception. Und EntityBeans werden anschließend nicht deployed.
Wie kann ich dem JBoss mitteilen dass er die EntityBeans richtig zuordnet?

Ich werde mich über ein Lösungsvorschlag sehr freuen.

Vielen Dank.

Ausschnitt aus dem JBoss Trace (Erste Exception):
##########################################
Code:
...
15:09:40,508 INFO  [SessionFactoryObjectFactory] Factory name: persistence.units:ear=AdminTool.ear,jar=AdminTool.jar,unitName=uranusVisionDS
15:09:40,508 INFO  [NamingHelper] JNDI InitialContext properties:{java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory, java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces}
15:09:40,508 INFO  [SessionFactoryObjectFactory] Bound factory to JNDI name: persistence.units:ear=AdminTool.ear,jar=AdminTool.jar,unitName=uranusVisionDS
15:09:40,508 WARN  [SessionFactoryObjectFactory] InitialContext did not implement EventContext
15:09:40,524 INFO  [SchemaValidator] Running schema validator
15:09:40,524 INFO  [SchemaValidator] fetching database metadata
15:09:40,649 INFO  [TableMetadata] table found: URANUSVISION.ORDERROUTING
15:09:40,649 INFO  [TableMetadata] columns: [currentroutingstate, currentmsgid, originalroutingid, routingid, lastmodificationdate, entrydate, currentlabid, locked, laststepnr, portalorderid, finished, portalorderid_temp, currentwpid, currentwpiid]
15:09:40,711 INFO  [TableMetadata] table found: URANUSVISION.ORDERROUTINGMESSAGESBLOCKS
15:09:40,711 INFO  [TableMetadata] columns: [currentczvopticmessage, msgid, textblocknumber]
15:09:40,727 INFO  [DatabaseMetadata] table not found: WSLOGHEAD
15:09:40,727 WARN  [ServiceController] Problem starting service persistence.units:ear=AdminTool.ear,jar=AdminTool.jar,unitName=uranusVisionDS
javax.persistence.PersistenceException: org.hibernate.HibernateException: Missing table: WSLOGHEAD
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:720)
	at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:127)
	at org.jboss.ejb3.entity.PersistenceUnitDeployment.start(PersistenceUnitDeployment.java:246)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...

Ausschnitt aus dem JBoss Trace (Zweite Exception)
##########################################
Code:
...
15:09:40,883 INFO  [SessionFactoryObjectFactory] Factory name: persistence.units:ear=AdminTool.ear,jar=AdminTool.jar,unitName=logonDS
15:09:40,883 INFO  [NamingHelper] JNDI InitialContext properties:{java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory, java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces}
15:09:40,883 INFO  [SessionFactoryObjectFactory] Bound factory to JNDI name: persistence.units:ear=AdminTool.ear,jar=AdminTool.jar,unitName=logonDS
15:09:40,883 WARN  [SessionFactoryObjectFactory] InitialContext did not implement EventContext
15:09:40,883 INFO  [SchemaValidator] Running schema validator
15:09:40,883 INFO  [SchemaValidator] fetching database metadata
15:09:40,930 INFO  [DatabaseMetadata] table not found: ORDERROUTING
15:09:40,930 WARN  [ServiceController] Problem starting service persistence.units:ear=AdminTool.ear,jar=AdminTool.jar,unitName=logonDS
javax.persistence.PersistenceException: org.hibernate.HibernateException: Missing table: ORDERROUTING
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:720)
	at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:127)
	at org.jboss.ejb3.entity.PersistenceUnitDeployment.start(PersistenceUnitDeployment.java:246)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...


Application-ds.xml
##########################################
Code:
...
<datasources>
   <local-tx-datasource>
      <jndi-name>UranusVisionDB</jndi-name>
      <connection-url>jdbc:oracle:thin:@xxxxx:1234:yyyy</connection-url>
      <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
      <user-name>user1</user-name>
      <password>pass</password>
   </local-tx-datasource>
       
   <local-tx-datasource>
      <jndi-name>LogonDB</jndi-name>
      <connection-url>jdbc:oracle:thin:@xxxxx:1234:yyyy</connection-url>
      <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
      <user-name>user2</user-name>
      <password>pass</password>
   </local-tx-datasource>
   
</datasources>

Persistence.xml
##########################################
Code:
...
<persistence-unit name="uranusVisionDS">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <jta-data-source>java:/UranusVisionDB</jta-data-source>
      
      <class>com.zeiss.vision.b2b.logon.Wsloghead</class>
      <class>com.zeiss.vision.b2b.logon.Wslogpos</class>
      
      <properties>
         <property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect"/>
         <property name="hibernate.hbm2ddl.auto" value="validate"/>
         <property name="hibernate.show_sql" value="true"/>
         <property name="hibernate.format_sql" value="true"/>
         <property name="jboss.entity.manager.factory.jndi.name" value="java:/UranusvisionEntityManagerFactory"/>
         <property name="hibernate.default_schema" value="uranusvision"/>
         
         <!-- Echo all executed SQL to stdout --> 
  	     <property name="show_sql" value="true" />
  		 
  		 <!-- pretty print of all SQL-Statements --> 
  		 <property name="hibernate.format_sql" value="true" />
      </properties>
   </persistence-unit>
   
	<persistence-unit name="logonDS">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <jta-data-source>java:/LogonDB</jta-data-source>
      
      <class>com.zeiss.vision.b2b.uranusvision.OrderRouting</class>
      <class>com.zeiss.vision.b2b.uranusvision.OrderRoutingMessagesBlocks</class>
      
      <properties>
         <property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect"/>
         <property name="hibernate.hbm2ddl.auto" value="validate"/>
         <property name="hibernate.show_sql" value="true"/>
         <property name="hibernate.format_sql" value="true"/>
         <property name="jboss.entity.manager.factory.jndi.name" value="java:/LogonEntityManagerFactory"/>
         <property name="hibernate.default_schema" value="logon"/>
         
         <!-- Echo all executed SQL to stdout -->
  	     <property name="show_sql" value="true" />
  		 
  		 <!-- pretty print of all SQL-Statements --> 
  		 <property name="hibernate.format_sql" value="true" />
      </properties>
   </persistence-unit>
...

components.xml
##########################################
Code:
...
<persistence:managed-persistence-context 
		name="logonEntityManager"
	    auto-create="true"
	    persistence-unit-jndi-name="java:/LogonEntityManagerFactory"/>                          
	
	<persistence:managed-persistence-context 
		name="uranusVisionEntityManager"
	    auto-create="true"
	    persistence-unit-jndi-name="java:/UranusvisionEntityManagerFactory"/>  
...

EntityBean (Tabelle befindet sich im LOGON Datenbank)
##########################################
Code:
...
@Entity
@ReadOnly
@Name("Wsloghead")
@Table(name="WSLOGHEAD")
@PersistenceUnit(unitName="logonDS")
public class Wsloghead implements Serializable{
...


EntityBean (Tabelle befindet sich im URANUSVISION Datenbank)
##########################################

Code:
...
@Entity
@ReadOnly
@Name("OrderRouting")
@Table(name="ORDERROUTING")
@PersistenceUnit(unitName="uranusVisionDS")
public class OrderRouting implements Serializable {
...
 
Ich habe das Problem selber gelöst. Es genügte jeweils die Property
Code:
<property name="hibernate.hbm2ddl.auto" value="validate"/>
in jedem Persistence Unit aus der Datei persistence.xml zu entfernen. Somit wurde die Initialisierung beim Deployment von entytyBeans ausgeschaltet und sie konnten anschließend auf den JBoss installiert werden.
 

Neue Beiträge

Zurück