No Persistence provider for EntityManager named default

14 respostas
santoro

Estou com JBoss7 e ao tentar encontrar o persistence unit estou recebendo o seguinte erro:

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.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_2_0.xsd">

	    <persistence-unit name="default"  transaction-type="JTA">
	    <provider>org.hibernate.ejb.HibernatePersistence</provider>
		<jta-data-source>java:jboss/datasources/testeDatasource</jta-data-source>
		<properties>
		    <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
		    <property name="hibernate.check-valid-connection-sql" value="select 0 from dual"/>
		</properties>
	    </persistence-unit>
</persistence>

JPAUtil

public static EntityManager getEntityManager(String ue) {
  if (emf == null) {
      emf = Persistence.createEntityManagerFactory("default");
  }
  return emf.createEntityManager();
}

jars na aplicação

alguém poderia ajudar?

14 Respostas

javax.skol

Tem certeza que o persistence.xml está dentro do seu META-INF?

santoro

Primeiramente obrigado por responder, o persistence.xml está dentro da pasta META-INF dentro do src
em busca vi que um dos problemas poderia ser a falta do jar hibernate-entitymanager-3.6.7.Final.jar porém ao colocar ele em minha aplicação ocorre o seguinte erro no start do JBoss 7.0.2

javax.skol

Não a necessidade de adicionar essa ultima. Da uma olhadinha aqui, tente seguir esse exemplo
http://www.k19.com.br/artigos/configurando-hibernate-com-mysql/

Tem a propria documentação tb
http://docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html/configuration.html

santoro

Separei somente os jars conforme documentação que você me enviou, o meu persistence.xml ficou assim

<persistence-unit name="default"  transaction-type="JTA">
	    <provider>org.hibernate.ejb.HibernatePersistence</provider>
		<jta-data-source>java:jboss/datasources/testeDatasource</jta-data-source>
		<properties>
		    <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
		    <property name="hibernate.check-valid-connection-sql" value="select 0 from dual"/>
		</properties>
	    </persistence-unit>

e mesmo assim o erro continua (o mesmo)

javax.skol

Estranho. Da uma olhada no .war ou no proprio target e vê se o depoloy do persistence foi feito de maneira correta(dentro do META-INF)… Muito estranho isso. Pensei também no datasource, mas pela mensagem de erro, acho que não seria, um outro motivo seria o nome do unit sendo chamado erroneamente, mas pelo que passou está certo, mais um motivo seria versões de bibliotecas incompatíveis, mas vc afirma que colocou as libs da mesma maneira da documentação…

santoro

Realmente até tentei utilizar as dependências disponibilizadas pela Caelum, mas o erro foi o mesmo

http://blog.caelum.com.br/as-dependencias-do-hibernate-3-5/

Hebert_Coelho

santoro, coloque seu datasource mais ou menos com esse nome MeudatasourceDS (primeira letra CAPS e terminando com DS). Já tive problemas com nomeclatura de DS no JBoss.

Outra coisa é a declaração seria:

<jta-data-source>[b]java:/[/b]MeudatasourceDS </jta-data-source> no seu caso, está apenas com java: e sem o /

Você está colocando seu datasource na pasta correta? na pasta de deploy?

santoro

Alterei meu datasource no nome que vc indicou e o erro continua o mesmo, para tentar simplificar fiz assim (mas o erro persiste)

persistence.xml em src/META-INF

e um servlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		EntityManager em = Persistence.createEntityManagerFactory("default").createEntityManager();
		TypedQuery&lt;Pessoa&gt; query = em.createQuery("select p from Pessoa p",Pessoa.class);
		List&lt;Pessoa&gt; pessoas = query.getResultList();
		for (Pessoa p : pessoas){
			System.out.println(p.getNome());
		}
	}

jar’s dentro do WEB-INF/lib

Hebert_Coelho

Essa sua linha ainda continua diferente da que eu postei:

Eu postei

Coloque seu datasource dentro da pasta deploy e depois escreva igual eu coloquei aí.

santoro

jakefrog criei um novo projeto seguindo o que falou e o erro permaneceu:

src/META-INF/persistence.xml

e fiz um servlet para teste

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		EntityManager em = Persistence.createEntityManagerFactory("ConexaoJPA").createEntityManager();
		TypedQuery&lt;Pessoa&gt; query = em.createQuery("select p from Pessoa p",Pessoa.class);
		List&lt;Pessoa&gt; pessoas = query.getResultList();
		for (Pessoa p : pessoas){
			System.out.println(p.getNome());
		}
	}

minhas libs

alguma sugestão???

Hebert_Coelho

Vc criou esse arquivo como? <jta-data-source>java:/MeudatasourceDS</jta-data-source>

santoro

No arquivo standalone.xml do jboss 7.0.2 inserir o seguinte código

&lt;datasources&gt;
&lt;datasource jndi-name="java:/MeudatasourceDS" pool-name="DatasourceUC" enabled="true" jta="true" use-java-context="true" use-ccm="true"&gt;
    &lt;connection-url&gt;jdbc:oracle:thin:@localhost:1521/xe&lt;/connection-url&gt;
    &lt;driver&gt;oracle&lt;/driver&gt;
    &lt;transaction-isolation&gt;TRANSACTION_READ_COMMITTED&lt;/transaction-isolation&gt;
    &lt;pool&gt;
	&lt;min-pool-size&gt;0&lt;/min-pool-size&gt;
	&lt;max-pool-size&gt;20&lt;/max-pool-size&gt;
	&lt;prefill&gt;true&lt;/prefill&gt;
	&lt;use-strict-min&gt;false&lt;/use-strict-min&gt;
	&lt;flush-strategy&gt;FailingConnectionOnly&lt;/flush-strategy&gt;
    &lt;/pool&gt;
    &lt;security&gt;&lt;user-name&gt;teste&lt;/user-name&gt;
	&lt;password&gt;teste&lt;/password&gt;
    &lt;/security&gt;
&lt;/datasource&gt;
&lt;drivers&gt;
    &lt;driver name="oracle" module="com.oracle.ojdbc6"&gt;
	&lt;xa-datasource-class&gt;oracle.jdbc.OracleDriver&lt;/xa-datasource-class&gt;
    &lt;/driver&gt;
&lt;/drivers&gt;
&lt;/datasources&gt;

o datasource está funcionando pois rodando

public static Connection getConexao() {
		DataSource ds = null;
		Connection con = null;
		InitialContext ic;
		try {
			ic = new InitialContext();
			ds = (DataSource) ic.lookup("java:/MeudatasourceDS");
			con = ds.getConnection();
		} catch (Exception e) {
			System.out.println("Erro a pegar conexao: " + e.getMessage());
			e.printStackTrace();
		}
		return con;
	}

retorna a conexão normalmente

Hebert_Coelho

Desse modo aí eu nunca vi. Geralmente no JBoss se cria um arquivo xml com os dados dentro da pasta deploy. Nesse caso aí seria MeuDatasource-ds.xml e dentro dele seria tipo:

<?xml version="1.0" encoding="UTF-8"?>

<datasources>
	<local-tx-datasource>
		<jndi-name>MeuDataSourceDS</jndi-name>
		<connection-url>jdbc:postgresql://localhost:5432/nomadscity</connection-url>
		<driver-class>org.postgresql.Driver</driver-class>
		<user-name>postgres</user-name>
		<password>postgres</password>
		<!-- sql to call when connection is created. Can be anything, select 1 is valid for PostgreSQL <new-connection-sql>select 1</new-connection-sql> -->

		<!-- sql to call on an existing pooled connection when it is obtained from pool. Can be anything, select 1 is valid for PostgreSQL <check-valid-connection-sql>select
			1</check-valid-connection-sql> -->

		<!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
		<metadata>
			<type-mapping>PostgreSQL 7.2</type-mapping>
		</metadata>
	</local-tx-datasource>

</datasources>

Esse aí é o código da minha aplicação.

R

No meu caso tava dando problema nas bibliotecas, que tava migrando do jdk1.6 para jdk1.7 deu uns probleminhas…

Criado 1 de novembro de 2011
Ultima resposta 1 de out. de 2013
Respostas 14
Participantes 4