JPA com 2 bancos de dados

6 respostas
brccosta

Pessoal,

Tenho 2 bases de dados (Sql Server e MySql). Os persistence-unit’s respectivos:

<persistence xmlns="http://java.sun.com/xml/ns/persistence"	version="1.0">

	<persistence-unit name="Persistence_MySql">
		<jta-data-source>java:/MySqlDS</jta-data-source>	
		<mapping-file>META-INF/orm_MySql.xml</mapping-file>
	
		<properties>
			<property name="hibernate.hbm2ddl.auto" value="create-drop" />
		</properties>
		    	
	</persistence-unit>


	<persistence-unit name="Persistence_SqlServer">
		<jta-data-source>java:/MSSQLDS</jta-data-source>	
		<mapping-file>META-INF/orm_SqlServer.xml</mapping-file>
	
		<properties>
			<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
			<property name="hibernate.hbm2ddl.auto" value="create-drop" />
		</properties>
			
	</persistence-unit>
	
</persistence>

Em minha classe, tentei fazer como o código abaixo:

@PersistenceContext(unitName = "Persistence_MySql")
EntityManager em_MySql;
	
@PersistenceContext(unitName = "Persistence_SqlServer")
EntityManager em_SqlServer;	

...
@TransactionAttribute(TransactionAttributeType.REQUIRED)
private void method_test(){
...
em_MySql.persist(obj);
em_SqlServer.persist(obj);

}

Porém ocorrem erros. Alguém sabe como fazer para persistir quando tenho 2 ou mais persistence-unit’s?

6 Respostas

Hebert_Coelho

Qual erro acontece?

Imagino que você fez do modo correto.

brccosta

WARN [com.arjuna.ats.arjuna] ARJUNA-12140 Adding multiple last resources is disallowed. Current resource is com.arjuna.ats.internal.arjuna.abstractrecords.LastResourceRecord@bc64ad
WARN [org.hibernate.util.JDBCExceptionReporter] SQL Error: 0, SQLState: null
ERROR [org.hibernate.util.JDBCExceptionReporter] Could not enlist in transaction on entering meta-aware object!; - nested throwable: (javax.transaction.SystemException: java.lang.Throwable: Unabled to enlist resource, see the previous warnings. tx=TransactionImple < ac, BasicAction: 0:ffffc0a80065:126a:4ed8ff2b:2b status: ActionStatus.ABORT_ONLY >); - nested throwable: (org.jboss.resource.JBossResourceException: Could not enlist in transaction on entering meta-aware object!; - nested throwable: (javax.transaction.SystemException: java.lang.Throwable: Unabled to enlist resource, see the previous warnings. tx=TransactionImple < ac, BasicAction: 0:ffffc0a80065:126a:4ed8ff2b:2b status: ActionStatus.ABORT_ONLY >))
ERROR [STDERR] javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Cannot open connection

Hebert_Coelho

O que ele disse foi Cannot open connection.

Pq vc não faz um teste? Testa apenas com o DB e depois com o outro separadamente para ver se funciona.

brccosta

Pus o StackTrace para melhor verificar. Separadamente funciona normal.

Tenho vasculhado na internet e nenhum fórum trás alguma resposta válida ao problema… Parece bem recorrente.


http://www.coderanch.com/t/483679/EJB-JEE/java/Two-persistance-unit-at-persistence

P

Estou com o mesmo problema, conseguiu resolver?

brccosta

Olá,

Sim resolvi. O problema estava no SQL Server, eram necessárias configurações nos conectores. Siga o passo a passo abaixo:

1- Utilizando o Microsoft SQL Server Management Studio, crie um novo usuário com direitos de sysadmin;

2- Crie um banco de dados denominado ?StoreDB_Test?

3- Baixe o Driver JDBC para SQL Server, disponível em: <a href="http://msdn.microsoft.com/en-us/sqlserver/aa937724">msdn.microsoft.com/en-us/sqlserver/aa937724</a>, ponha a pasta Microsoft SQL Server JDBC Driver 3.0, extraída no passo acima, na pasta Arquivos de Programas (C:\Program Files\Microsoft SQL Server JDBC Driver 3.0) os arquivos do passo-a-passo a seguir estão na pasta sqljdbc_3.0\enu\xa;

4- Siga exatamente o passo-a-passo para a configuração do SQL Server para transações distribuídas disponível em: <a href="http://msdn.microsoft.com/pt-br/library/aa342335.aspx">msdn.microsoft.com/pt-br/library/aa342335.aspx</a>, item “Instruções de configuração”;

5- Na pasta datasources_JBoss do projeto deste tutorial, abra o arquivo mssql-xa-ds.xml, e altere o usuário e senha conforme o usuário que criou no passo 1;

6- (Com o JBoss fechado, não executando) Copie o arquivo mssql-xa-ds.xml para a pasta C:\jboss-6.1.0.Final\server\default\deploy

É possível também utilizar o JTDS, com ele são necessárias estas configurações. Porém, nunca o utilizei.

Criado 2 de dezembro de 2011
Ultima resposta 24 de jan. de 2012
Respostas 6
Participantes 3