Fórum Hibernate JPA + JBOSS + ORACLE usando um DATASOURCE usando JTA #407458
08/09/2011
0
Ah muito tempo venho batendo cabeça tentando fazer funcionar esse negocio e não consigo, cansado de tanto bater cabeça e não achar solução resolvi recorrer a vcs, mestres do conhecimento java. Minha situação é a seguinte, estou tentando implementar uma conexão atraves de um DataSource q esta configurado no JBoss e que estou tentando usar o hibernate com padrão JPA para receber a conexão e deixar o container gerenciar tudo.
Criei um arquivo Oracle-DS.xml que salvei na pasta C:\jboss-5.0.0.CR2\server\default\deploy do Jboss. O que estou usando é o Jboss 5.0.
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>OracleDS</jndi-name>
<connection-url>jdbc:oracle:thin:@localhost:1521:xe</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>welcome</user-name>
<password>welcome</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
<metadata>
<type-mapping>OracleXE</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
Na minha aplicação configurei o arquivo persistenci.xml assim:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
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">
<persistence-unit name="jpajsfteste">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/OracleDs</jta-data-source>
<class>br.fucapi.beans.Author</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
</properties>
</persistence-unit>
</persistence>
to tentando abrir uma simples conexão primeiramente então criei uma classe main que vai chamar essa configuração e na pratica era para me retornar uma conexão gerenciada pelo container Jboss:
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.transaction.NotSupportedException;
public class Test {
public static void main(String[] args) throws NotSupportedException,Exception {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpajsfteste");
EntityManager em = emf.createEntityManager();
em.close();
emf.close();
}
}
so que o mesmo esta dando um erro:
ERROR DatasourceConnectionProvider:246 - Could not find datasource: java:/OracleDs
Agradeço a todos que puderem ajudar, valeu e Obrigado!!!
Fabiano Farah
Curtir tópico
+ 0Posts
08/09/2011
Robson Teixeira
<persistence-unit name="jpajsfteste" transaction-type="JTA">
e outra coisa quando você usa um data-source o container que deve instancia e injetar o EntityManager em seu codigo java e você não deve criar o entityManager como você ta fazendo ok??
espero ter ajudado
att
robson
Gostei + 0
08/09/2011
Fabiano Farah
Gostaria de agradeçer as dicas, mas desculpe minha ignorancia mas como faço para injetar a instancia do próprio container? Eu uso o annotation @inject em cima de uma variavel EntityManager ? mais uma vez obrigado!!
Gostei + 0
09/09/2011
Robson Teixeira
exemplo
public class MyPersistence{
@Inject
private EntityManager em;
}
ou
public class MyPersistence{
@PersistenceContext
private EntityManager em;
}
espero ter ajudado
att
robson
Gostei + 0
09/09/2011
Dyego Carmo
Gostei + 0
09/09/2011
Fabiano Farah
package br.fucapi.daos;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.hibernate.HibernateException;
import br.fucapi.beans.Author;
public class TestandoAuthor {
@PersistenceContext(unitName = "jpajsfteste")
protected EntityManager entityManager;
public void createAuthor(Author aut) {
try {
entityManager.merge(aut);
} catch (HibernateException e) {
e.getStackTrace();
} finally {
entityManager.close();
}
}
public static void main(String[] args) {
TestandoAuthor teste = new TestandoAuthor();
Author author = new Author();
author.setName("Fabiano2");
author.setEmail("fabiano2@teste.br");
teste.createAuthor(author);
}
}
Esse é o erro que esta me retornando:
Exception in thread "main" java.lang.NullPointerException
at br.fucapi.daos.TestandoAuthor.createAuthor(TestandoAuthor.java:25)
at br.fucapi.daos.TestandoAuthor.main(TestandoAuthor.java:36)
So por incargo de conciencia eu fiz um teste usando a conexão e transação gerenciados pela a aplicação e funcionou normalmente, mas quando tento configurar para rodar pelo Jboss ai da o problema. Eu ja consegui implementar a conexão pelo servidor usando JDBC puro e quando implementei as classes usando EJB so que gostaria de implementar sem usar EJB ja que estou pensando em usar uma aplicação não distribuida mas que ira ter um grande volume de informações recebidas e geradas, quero controlar tudo pelo servidor.
Diego meu grande, vc é gente boa, tenho várias vídeo aulas suas sobre Hibernate e de JPA com JSF, vc é o cara!!! Oh Diego eu usei o jdbc/OracleDS mas tb continua dando o mesmo erro q o de cima, oq estou fazendo de errado?
Agradeço a todos, esse problema vem me tirando maior tempão, a semanas tento resolve-lo!!!
Gostei + 0
09/09/2011
Robson Teixeira
@PersistenceContext(unitName = "jpajsfteste")
protected EntityManager entityManager;
public void createAuthor(Author aut) {
try {
entityManager.merge(aut);
} catch (HibernateException e) {
e.getStackTrace();
} finally {
entityManager.close();
}
}
public static void main(String[] args) {
TestandoAuthor teste = (TestandoAuthor)new InitialContext().lookup("Passar o id do EJB registrado no JBOSS"); Author author = new Author();
author.setName("Fabiano2");
author.setEmail("fabiano2@teste.br");
teste.createAuthor(author);
}
}
qualquer coisa é so chamar att robson
Gostei + 0
09/09/2011
Robson Teixeira
e eu so consigo imaginar 2 soluções uma seria usar o spring framerwork para fazer o controle das transações onde o mesmo pode ler o seu arquivo DS ou invocar o metodo lookup mas para obter um objeto do tipo DataSource. São as soluções que julgo mais viaveis.
att
robson
Gostei + 0
10/09/2011
Fabiano Farah
Vou tentar fazer oq vc me disse Robson, depois postarei o resultado. Valeu!!
Gostei + 0
20/09/2011
Robson Teixeira
Gostei + 0
27/09/2011
Dyego Carmo
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)