DataSource e Seam Framework

2 respostas
jayro

Membros,

Alguém já conseguiu definir dois DataSource em um projeto Seam ? Como é feito o mapeamento das entidade para cada DataSource ?

Grato a todos pela oportunidade.
:slight_smile:

2 Respostas

jayro

Para mitigar mais ainda o problema, como é definido no aquivo de configuração JPA (persistence.xml) quais classe/entidades pertencem a Persistence-Unit ?

Grato.

rafael.espiritosanto

Olá! para reforçar o tópico, estou com o mesmo problema.

Pesquisei na base de conhecimento do Seam e encontrei este post.
[url]http://www.seamframework.org/Documentation/HowDoIUseMultipleDynamicEntityManagersInSeam[/url]

Segui o conteúdo do post e consegui utilizar mais de um datasource. No entanto, uma mesma entidade é criada em cada um dos bancos. Então, reforçando a pergunta: Como posso definir as entidades as quais um persistence-unit é responsável.

Segue como ficou o arquivo persistence.xml, ds.xml e components.xml
<?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="SeamJbpm">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <jta-data-source>java:/SeamJbpmDatasource</jta-data-source>
      <!-- The <jar-file> element is necessary if you put the persistence.xml in the WAR and the classes in the JAR -->
      <!--
      <jar-file>../../vehicles.jar</jar-file>
      -->
      <properties>
         <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
         <property name="hibernate.hbm2ddl.auto" value="update"/>
         <property name="hibernate.show_sql" value="true"/>
         <property name="hibernate.format_sql" value="true"/>
         <property name="jboss.entity.manager.factory.jndi.name" value="java:/SeamJbpmEntityManagerFactory"/>
      </properties>
   </persistence-unit>
    
    <persistence-unit name="SeamJbpm2">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <jta-data-source>java:/SeamJbpmDatasource2</jta-data-source>
      <!-- The <jar-file> element is necessary if you put the persistence.xml in the WAR and the classes in the JAR -->
      <!--
      <jar-file>../../vehicles.jar</jar-file>
      -->
      <properties>
         <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
         <property name="hibernate.hbm2ddl.auto" value="update"/>
         <property name="hibernate.show_sql" value="true"/>
         <property name="hibernate.format_sql" value="true"/>
         <property name="jboss.entity.manager.factory.jndi.name" value="java:/SeamJbpmEntityManagerFactory2"/>
      </properties>
   </persistence-unit>
    
</persistence>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE datasources
    PUBLIC "-//JBoss//DTD JBOSS JCA Config 1.5//EN"
    "http://www.jboss.org/j2ee/dtd/jboss-ds_1_5.dtd">
<datasources>
   <xa-datasource>
   	  	<jndi-name>SeamJbpmDatasource</jndi-name>
   	  	<track-connection-by-tx />
   	  	<xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
      	<xa-datasource-property name="ServerName">localhost</xa-datasource-property>
      	<xa-datasource-property name="PortNumber">3306</xa-datasource-property>
    	<xa-datasource-property name="DatabaseName">seam</xa-datasource-property>
	    <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
    	<user-name>root</user-name>
    	<password>abc123</password>
	    <no-tx-separate-pools />
	    <valid-connection-checker-class-name>com.mysql.jdbc.integration.jboss.MysqlValidConnectionChecker</valid-connection-checker-class-name>
	    <exception-sorter-class-name>com.mysql.jdbc.integration.jboss.ExtendedMysqlExceptionSorter</exception-sorter-class-name>
	    <metadata>
      		<type-mapping>mySQL</type-mapping>
    	</metadata>
   </xa-datasource>
   
   <xa-datasource>
   	  	<jndi-name>SeamJbpmDatasource2</jndi-name>
   	  	<track-connection-by-tx />
   	  	<xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
      	<xa-datasource-property name="ServerName">localhost</xa-datasource-property>
      	<xa-datasource-property name="PortNumber">3306</xa-datasource-property>
    	<xa-datasource-property name="DatabaseName">seamjbpm</xa-datasource-property>
	    <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
    	<user-name>root</user-name>
    	<password>abc123</password>
	    <no-tx-separate-pools />
	    <valid-connection-checker-class-name>com.mysql.jdbc.integration.jboss.MysqlValidConnectionChecker</valid-connection-checker-class-name>
	    <exception-sorter-class-name>com.mysql.jdbc.integration.jboss.ExtendedMysqlExceptionSorter</exception-sorter-class-name>
	    <metadata>
      		<type-mapping>mySQL</type-mapping>
    	</metadata>
   </xa-datasource>
    
</datasources>
<persistence:managed-persistence-context name="entityManager1" auto-create="true"
                      persistence-unit-jndi-name="java:/SeamJbpmEntityManagerFactory"/>

	<persistence:managed-persistence-context name="entityManager2" auto-create="true"
                      persistence-unit-jndi-name="java:/SeamJbpmEntityManagerFactory2"/>
Pra fazer a persistência, o código abaixo...
@In(value="#{entityManager1}")
	private EntityManager entityManager1;

abraço!

Criado 24 de maio de 2010
Ultima resposta 21 de jul. de 2010
Respostas 2
Participantes 2