Fórum como ligar postgresql com sqlserver utilizando JPA em um projeto JSF #9471
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.
Posts
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...
22/09/2009
Euclides Filizola
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 ?
22/09/2009
Euclides Filizola
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.
23/09/2009
Euclides Filizola
.... ? e ae , nada ?
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 :)
23/09/2009
Euclides Filizola
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 :(
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 ?
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 ?
24/09/2009
Euclides Filizola
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.
Não estou entendendo...
Voce esta recuperando o Usuario (que esta em SQLServer) tambem via JPA ?
Não estou entendendo...
Voce esta recuperando o Usuario (que esta em SQLServer) tambem via JPA ?
Não estou entendendo...
Voce esta recuperando o Usuario (que esta em SQLServer) tambem via JPA ?
Não estou entendendo...
Voce esta recuperando o Usuario (que esta em SQLServer) tambem via JPA ?
28/09/2009
Euclides Filizola
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.
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 ?