Boa tarde meus caros amigos, eu gostaria de saber como eu faço para mapear minhas entidades tendo 2 bancos em 2 servidores diferentes.
Por exemplo: Tabela Usuario, está em localhost, e a tabela Produtos, está em 172.168.0.10.
Por favor não liguem ara “usuario, produtos” e talz, é só como exemplo, gostaria de saber como faria para mapear as duas e como uma enxergaria a outra ?
Em um caso que tive uma situação semelhante, eu utilizei uma anotação no DAO.
Essa anotação só tinha o nome do DataSource e dela eu pegava a informação para utilizar na hora de abrir a conexão.
Dessa forma cada DAO podia ter um DataSource diferente e o sistema podia utilizar N bancos.
Mas como ficaria o persistence.xml, por exemplo, com duas ou mais PersistencesUnits?
E qual Annotation devo utilizar nas minhas entidades pra indicar a qual PU ela pertence? Pergunto isso pq seria essencial caso eu permitisse a geração automatica de entidades no bd ao subir minha aplicação pro servidor.
Me corrijam se eu estiver incorreto, mas farei um exemplo com o que acredito que seja.
Supondo que tenha o seguinte persistence.xml:
E supondo que eu queria um EntityManager especifico pra um Persistence Unit, deveria chama-lo assim:
@PersistenceContext(unitName="MEU_PU2")
EntityManager em;
// ou assim:
@PersistenceContext(unitName="MEU_PU1")
EntityManager em;
Isso está correto?!
Desculpem-me postar assim, mas estou sem tempo pra fazer testes hoje, assim que tiver os farei.
Ainda tenho duvida de qual anotação usar nas entidades, pra especificar pra qual PU elas pertencem.
Pelas minhas pesquisas aqui encontrei essa:
@PersistenceUnit(unitName="MEU_PU1")
Isso tudo que coloquei aqui foram suposições com base no que conheço e que encontrei com o auto-complete do netbeans.
A princípio me parecem corretas, mas sem um teste e sem uma bibliografia confiavel não sei dizer se estão corretas, alguém saberia me indicar?
Se vc olhar o meu exemplo estou usando Data Source.
Basta adicionar um xml no deploy do seu JBoss (caso seja JBoss), algo como um db-ds-xml com a seguinte estrutura:
<datasources>
<local-tx-datasource>
<jndi-name>MEU_BD1</jndi-name>
<connection-url>jdbc:postgresql://192.168.0.1:5432/cursos</connection-url> //aqui vc coloca o ip e porta do seu bd
<driver-class>org.postgresql.Driver</driver-class>
<user-name>meu_usuario</user-name> //seta seu usuario
<password>SENHA ÇECRETA!1</password> //seta sua senha
</local-tx-datasource>
<local-tx-datasource>
<jndi-name>MEU_BD2</jndi-name>
<connection-url>jdbc:postgresql://192.168.0.1:5432/cursos</connection-url> //aqui vc coloca o ip e porta do seu bd
<driver-class>org.postgresql.Driver</driver-class>
<user-name>meu_usuario</user-name> //seta seu usuario
<password>SENHA ÇECRETA!1</password> //seta sua senha
</local-tx-datasource>
</datasources>
No caso, como uso PostgreSQL tenho essas configurações, mas são perfeitamente adaptaveis.
Existe um esquema de criptografar a senha no arquivo xml, talvez uma busca no google te ajude, caso queira mais esse nível de segurança.
Espero que isso lhe ajude.