Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

MySql e Oracle Simultâneos

Estou tentando configurar meu standalone no wildfly para ter conexões simultâneas com um banco de dados Mysql e outro Oracle. Estou desenvolvento uma API que le um DB Oracle, captando informações e inserindo localmente eu um Mysql.... Porém sem sucesso até agora com o processo de configuração.

5 respostas

Marco,

você esta usando o Hibernate ??

Faltou este detalhe!! Sim estou usando Hibernate

Marco,

no curso de Hibernate https://cursos.alura.com.br/course/persistencia-de-objetos-com-jpa-hibernate

o professor da uma dica de como utilizar bancos de dados simultaneos. Basicamente, no seu persistence.xml, você precisa criar 2 persistence-unit. Por exemplo, 1 MySQL e outro PostgreSQL

<persistence-unit name="contas-mysql">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>br.com.caelum.financas.modelo.Conta</class>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/contas" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="" />

            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
        </properties>
    </persistence-unit>

    <persistence-unit name="contas-postgres">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>br.com.caelum.financas.modelo.Conta</class>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost/contas" />
            <property name="javax.persistence.jdbc.user" value="rafaelpbaptista" />
            <property name="javax.persistence.jdbc.password" value="" />

            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
        </properties>
    </persistence-unit>

na sua classe, você precisa criar 2 fabricas de EntityManager, um para cada persistence-unit

/**
         * Usando PostgreSQL
         */
         EntityManagerFactory emf = Persistence
                 .createEntityManagerFactory("contas-postgres");

        /**
         * Usando MySQL
         */
        EntityManagerFactory emf = Persistence
                .createEntityManagerFactory("contas-mysql");

e ai você cria os EntityManager necessários usando essas fábricas.

solução!

Olá Jefferson, obrigado pela sua resposta!

Sobre este curso, com dois DB MySql eu até consegui, porém, quando entra o Oracle na jogada é que o problema começa... Ai eu dei uma lida sobre uma questão de XA datasource...

resumindo, eu consegui da seguinte maneira... Para o Mysql eu criei um XA

<xa-datasource jndi-name="java:/MysqlXADS" pool-name="MysqlXADS" enabled="true" use-ccm="true">

Para o Oracle apenas um datasource

<datasource jta="true" jndi-name="java:jboss/datasources/pmsOracleDS" pool-name="pmsOracleDS" use-java-context="true">

Funcionou, porém, como sou novo com java fiz funcionar sem saber porque, ou seja, se outra vez tiver que fazer sozinho não saberei como!

Mesmo assim obrigado!

Beleza !!