como ligar postgresql com sqlserver utilizando JPA em um projeto JSF

22/09/2009

Boa tarde meus caros amigos, eu gostaria de saber como fazer para ligar 2 bancos diferentes em 2 servidores diferentes. Eu andei lendo algumas coisas, e vi que tinha JNDI+datasource, talvez dê para resolver, porém eu não sei como configurar e não sei por onde começar, oq eu troco no meu persistence.xml, se eu vou ter que configurar meu server.xml do tomcat, e meu web.xml. Gostaria de receber uma luz. Eu usarei JSF como framework para web. Utilizarei JPA para persistencia. Obrigado.
Euclides Filizola

Euclides Filizola

Curtidas 0

Respostas

Dyego Carmo

Dyego Carmo

22/09/2009

Boa tarde  !!!

Preciso de mais algumas informações...

Você vai acessar ENTIDADES DIFERENTES nestes dois bancos ? EX:

Pessoa - Banco1, servidor1
Cliente - Banco2, servidor2

Onde a pessoa nao tem nenhum relacionamento com o cliente...

Ou

Pedido - Banco1, servidor1
Itens do Pedido (propriedade de Pedido) - Banco2, servidor 2...


GOSTEI 0
Euclides Filizola

Euclides Filizola

22/09/2009

Boa tarde Dyego, seria mais ou menos assim. Eu vou ter uma tabela funcionario no banco SQLServer, e dentro do meu sistema, eu vou precisar obter o nome dele, a matricula dele e o setor dele. Mas temos 2 problemas. A tabela Funcionario, está num banco de dados SQLServer. As tabelas do sistema todo, estarão num banco de dados PostgreSQL. O banco SQLServer está num servidor 172.168.0.25. O banco PostgreSQL está num servidor diferente. Entende meu problema ? Gostaria de saber como vou fazer isso ? Pelo que eu andei lendo, utiliza-se datasource, jndi... etc. Poderia me ajudar ?
GOSTEI 0
Euclides Filizola

Euclides Filizola

22/09/2009

Só frizando, é a opção de número 2. onde as 2 entidades estão em bancos diferentes, em servidores diferentes, porém tem relacionamento entre elas.
GOSTEI 0
Euclides Filizola

Euclides Filizola

22/09/2009

.... ? e ae , nada ?
GOSTEI 0
Dyego Carmo

Dyego Carmo

22/09/2009

Boa Tarde !

Esta manobra que voce quer fazer nâo é possivel de forma automatica, o JPA , nao vai fazer isto para voce...

Nem JPA nem Hibernate ou algo do genero...


Voce pode fazer de DUAS FORMAS esta sua integracao manual...

1) Criar um campo TRANSIENTE na entidade com o nome "PESSOA" e adicionar um ENTITYLISTENER nesta entidade que vai CARREGAR E SETAR A PESSOA X no ato da carla da entidade (@PostLoad)

2) Controlar de forma manual a recuperacao do nome e o cadastro deste usuario...


Fora estas duas maneiras... nao tem salvacao.


Espero ter ajudado :)
GOSTEI 0
Euclides Filizola

Euclides Filizola

22/09/2009

Seguindo oq vc disse, eu já tinha tentado fazer antes. " 2) Controlar de forma manual a recuperacao do nome e o cadastro deste usuario... " . Ou seja, tentei fazer o seguinte: criei uma outra entidade, na qual ira carregar os dados do servidor 1, e dentro do DAO, da entidade original, eu copiaria os arquivos pra lá. Não sei se é a melhor forma, mas da o seguinte erro: Caused by: java.sql.SQLException: Invalid object name 'teste.tbsisc_usuario'. tentei fazer um teste: @Test public void testInserirUsuario(){ String login = System.getProperty("user.name"); UsuarioDAO usuarioDAO = new UsuarioDAO(); UsuarioLocalDAO instance = new UsuarioLocalDAO(); UsuarioLocal user = new UsuarioLocal(); Usuario usuario = new Usuario(); usuario = usuarioDAO.buscarUsuario(login); user = instance.obterUsuario(usuario); instance.inserirUsuario(user); } Mas não funcionou :(
GOSTEI 0
Dyego Carmo

Dyego Carmo

22/09/2009

java.sql.SQLException: Invalid object name 'teste.tbsisc_usuario' ?

Isso vc fez a reperacao MANUAL via SELECT ou usou o JPA para o usuario tambem ?
GOSTEI 0
Dyego Carmo

Dyego Carmo

22/09/2009

java.sql.SQLException: Invalid object name 'teste.tbsisc_usuario' ?

Isso vc fez a reperacao MANUAL via SELECT ou usou o JPA para o usuario tambem ?
GOSTEI 0
Euclides Filizola

Euclides Filizola

22/09/2009

Aqui meu persistence.xml org.hibernate.ejb.HibernatePersistence entity.Grupo entity.AndamentoSolicitacao entity.Solicitacao entity.Estado entity.Viagem entity.UsuarioLocal org.hibernate.ejb.HibernatePersistence entity.Usuario org.hibernate.ejb.HibernatePersistence entity.Setor .... e aqui está minha entidade @Entity @Table(name="teste.tbsisc_usuario") public class UsuarioLocal implements Serializable { private static final long serialVersionUID = 1L; @Id @Column(name="pktbsisc_usuario") private Integer Id; @Column(name="nm_usuario") private String nome; @Column(name="cd_setor") private Integer codigoSetor; @Column(name="tp_usuario") private Integer tipoDeUsuario; /*@ManyToMany(targetEntity=Grupo.class,mappedBy="listaUsuarios") @JoinTable(name="tbsisc_usuario_grupo") private List listGrupos = new LinkedList(); @OneToMany(mappedBy="usuario") private List listaSolicitacao = new LinkedList(); */ ... Ae da uma olhada no meu tópico do guj http://www.guj.com.br/posts/list/139170.java .. Abraços.
GOSTEI 0
Dyego Carmo

Dyego Carmo

22/09/2009

Não estou entendendo...

Voce esta recuperando o Usuario (que esta em SQLServer) tambem via JPA ?

GOSTEI 0
Dyego Carmo

Dyego Carmo

22/09/2009

Não estou entendendo...

Voce esta recuperando o Usuario (que esta em SQLServer) tambem via JPA ?

GOSTEI 0
Dyego Carmo

Dyego Carmo

22/09/2009

Não estou entendendo...

Voce esta recuperando o Usuario (que esta em SQLServer) tambem via JPA ?

GOSTEI 0
Dyego Carmo

Dyego Carmo

22/09/2009

Não estou entendendo...

Voce esta recuperando o Usuario (que esta em SQLServer) tambem via JPA ?

GOSTEI 0
Euclides Filizola

Euclides Filizola

22/09/2009

Ae não liga não Dyego. Eu errei aqui meus mapeamentos e tudo mais. Vou ter que refatorar umas coisas. Mas minha dúvida era a seguinte: eu tenho 2 bancos da dados distintos e preciso fazer relacionamento entre eles, Entendeu ? Mas o que eu quero mesmo é outra coisa, preciso pegar o usuario logado na rede, para acessar uma intranet por exemplo. Vou abrir outro chamado. Pode fechar esse. Desculpa ae. Só uma observação: ou o sistema da devmedia ta muito lento, ou eles não me enviam mais email dizendo que recebi resposta, ou ta demorando muito mesmo. Abraços.
GOSTEI 0
Dyego Carmo

Dyego Carmo

22/09/2009

OK

Mas respondendo a sua questao:

Com JPA voce nao consegue fazer isso... dentro do mesmo contexto mapear dois banco de dados diferentes (SQLServer e MySQL por exemplo)... vc conseque se os BANCOS estiverem no MESMO servidor e forem do mesmo tipo , ex: Dois bancos de dados em um MySQL estando no MESMO servidor soh que em diferentes schemas...

Quanto a lentidao eu já havia percebido...

Mas valeu pela força...

Moderação , poderia verificar o que está ocorrendo ?

GOSTEI 0
POSTAR