Como utilizar o JBoss 6 com vários bancos na mesma aplicação?

Boa Tarde pessoal!

Tenho uma aplicação que utiliza EJB 3 onde preciso que ela acesse 3 bases de dados diferentes para fazer cadastros e algumas alterações. Neste sistema, era utilizado apenas uma base de dados, e tudo funciona perfeitamente, mas hoje surgiu a necessidade de integrá-lo com outras 2 bases de outros sistemas e não sei como fazer a configuração do JBoss 6 para este novo requisito.

Poderiam me dar algum auxílio?

Desde já agradeço.

Olá

Inicialmente você vai precisar criar mais 2 datasources no JBoss apontando para essas bases de dados…

Veja abaixo um exemplo:

E depois voce vai ter que fazer lookup nesses datasources para conseguir acessar os bancos…

Algo parecido com…

Context ic = new InitialContext(); Connection con = null; dataSource = (DataSource) ic.lookup(?java:jdbc/MySQLDS?);

Se eu nao respondi o que voce perguntou diz ai… :slight_smile:

Espero que tenha ajudado…

Abraços

[quote=jmag]Olá

Inicialmente você vai precisar criar mais 2 datasources no JBoss apontando para essas bases de dados…

Veja abaixo um exemplo:

E depois voce vai ter que fazer lookup nesses datasources para conseguir acessar os bancos…

Algo parecido com…

Context ic = new InitialContext(); Connection con = null; dataSource = (DataSource) ic.lookup(?java:jdbc/MySQLDS?);

Se eu nao respondi o que voce perguntou diz ai… :slight_smile:

Espero que tenha ajudado…

Abraços[/quote]
Obrigado pelas dicas amigo. me diga uma coisa, e terei que criar as classes de modelo para todas as tabelas dos outros bancos, ou posso criar apenas para aquelas que eu irei utilizar?

PS: Já acompanho o seu blog a algum tempo e é excelente. Aprendi muita coisa por lá.

Olá Hugo,

Obrigado por acompanhar o Blog, fico feliz que tenha ajudado em alguma coisas hehehe

Então Man, Eu vou ser sincero eu sou especialista em Security and Clustering… não sou o cara mais indicado para te dar as boas práticas sobre isso mas acredito que voce precise criar apenas ás que vc irá utilizar…

Abraços :slight_smile:

Bom é isso :slight_smile:

Qualquer coisa vai postando ai que tento ajudar… :smiley:

[]s

Você está utilizando JPA nessa aplicação?

Estou sim.

Desculpe a demora em responder. Neste caso, você precisa também adicionar mais dois Persistence Units a manipulá-los de acordo.

Ricardo,

Vlw Pelas dicas :slight_smile:

[]s

E como ficaria essa configuração do persistence.xml ? Este é o meu persistence.xml atual:

<?xml version="1.0" encoding="UTF-8"?> <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="protocolo" transaction-type="JTA"> <jta-data-source>java:/ProtocoloDS</jta-data-source> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/> <property name="hibernate.hbm2ddl.auto" value="none"/> <property name="hibernate.show_sql" value="false"/> <property name="hibernate.format_sql" value="false"/> </properties> </persistence-unit> </persistence>

Tenho que criar outro apontando para os novos datasources?

Exatamente, algo desse tipo:

<?xml version="1.0" encoding="UTF-8"?>
<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="protocolo1" transaction-type="JTA">
      <jta-data-source>java:/Protocolo1DS</jta-data-source>
      <properties>
         <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
         <property name="hibernate.hbm2ddl.auto" value="none"/>
         <property name="hibernate.show_sql" value="false"/>
         <property name="hibernate.format_sql" value="false"/>
      </properties>
   </persistence-unit>
   <persistence-unit name="protocolo2" transaction-type="JTA">
      <jta-data-source>java:/Protocolo2DS</jta-data-source>
      <properties>
         <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
         <property name="hibernate.hbm2ddl.auto" value="none"/>
         <property name="hibernate.show_sql" value="false"/>
         <property name="hibernate.format_sql" value="false"/>
      </properties>
   </persistence-unit>
   <persistence-unit name="protocolo3" transaction-type="JTA">
      <jta-data-source>java:/Protocolo3DS</jta-data-source>
      <properties>
         <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
         <property name="hibernate.hbm2ddl.auto" value="none"/>
         <property name="hibernate.show_sql" value="false"/>
         <property name="hibernate.format_sql" value="false"/>
      </properties>
   </persistence-unit>
</persistence>

Entendi amigo. Nesse caso, na hora de injetar o EntityManager eu sempre vou ter que especificar em qual datasource ele vai buscar os dados, já que existe mais de uma unidade de persistência? Como seria isso?