Erro em DAO ao faze deploy  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
nilo_sj
Debugger

Membro desde: 08/02/2009 21:16:15
Mensagens: 56
Offline

Olá pessoal,

Estou tentando fazer o deploy de uma aplicação JSF+Hibernate+Srping no glassfish e a seguinte exceção é descrita no log:


[#|2009-11-17T10:03:32.250-0200|SEVERE|glassfish|javax.enterprise.system.core|_ThreadID=14;_ThreadName=Thread-4;|Exception while invoking class org.glassfish.persistence.jpa.JPADeployer prepare method
java.lang.RuntimeException: The persistence-context-ref-name [dao.ContatoDao/em] in module [agenda-war] resolves to a persistence unit called [agenda-jarPU] which is of type RESOURCE_LOCAL. Only persistence units with transaction type JTA can be used as a container managed entity manager. Please verify your application.


Segue o DAO ContatoDao:


package dao;

import dominio.Contato;
import java.util.Date;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

/**
*
* @author danilo
*/

@Repository
@Transactional
public class ContatoDao {

@PersistenceContext
private EntityManager em;

public void gravar(Contato c){
em.persist(c);
}

public void excluir(Contato c){
em.remove(carregar(c.getIdContato()));
}

public Contato carregar(Integer id){
return em.find(Contato.class, id);
}

public List obterTodos(Integer idUsuario){
return em.createQuery("SELECT c FROM Contato c WHERE c.idUsuario.idUsuario = :" +
"idUsuario").setParameter("idUsuario", idUsuario).getResultList();
}

public List obterPorNome(Integer idUsuario,String nome){
Query q = em.createQuery("SELECT c FROM Contato c WHERE c.nome LIKE :nome" +
"AND c.idUsuario.idUsuario = :idUsuario");

q.setParameter("nome", "%" + nome + "%");
q.setParameter("idUsuario", idUsuario);
return q.getResultList();

}

public List obterPorEmpresa(Integer idUsuario, String empresa){
Query q = em.createQuery("SELECT c FROM Contato c WHERE c.idUsuario.idUsuario = :" +
"idUsuario AND c.empresa LIKE :empresa");

q.setParameter("idUsuario",idUsuario);
q.setParameter("empresa","%" + empresa + "%");
return q.getResultList();
}

public List obterPorCargo(Integer idUsuario, String cargo){
Query q = em.createQuery("SELECT c FROM Contato c WHERE c.idUsuario.idUsuario = :" +
"idUsuario AND c.cargo LIKE :cargo");

q.setParameter("idUsuario",idUsuario);
q.setParameter("cargo","%" + cargo + "%");
return q.getResultList();
}

public List obterPorAniversario(Integer idUsuario, Date aniversario){
Query q = em.createQuery("SELECT c FROM Contato c WHERE c.idUsuario.idUsuario = :" +
"idUsuario AND c.dataAniversario = :aniversario");

q.setParameter("idUsuario",idUsuario);
q.setParameter("aniversario",aniversario);
return q.getResultList();
}
}


Tenho um DAO chamado UsuarioDao também utilizando essas anotações, porém este não apresenta problemas. Verifiquei o persistence.xml e realmente o tipo de transação é RESOURCE_LOCAL, porém se for este o problema, qual deve ser o tipo que terei q informar neste arquivo? Tem outra configuração que preciso alterar? Segue o persistence.xml


<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlnssi="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="agenda-jarPU" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>dominio.Contato</class>
<class>dominio.Usuarios</class>
<properties>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.connection.password" value="xxxxxx"/>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/agenda"/>
</properties>
</persistence-unit>
</persistence>

nilo_sj
Debugger

Membro desde: 08/02/2009 21:16:15
Mensagens: 56
Offline

Meus amigos, to apanhando pra fazer isso funcionar.

Agora o glassfish tá acusando o seguinte:


Caused by: org.hibernate.HibernateException: The chosen transaction strategy requires access to the JTA TransactionManager


Porém, eu já informei no persistence.xml que o tipo de transação é JTA. Ou devo também configurar isso no glassfish? Se for isso, como posso fazer?

Não sei se isso pode ajudar, mas segue o applicationContext.xml:


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

<!--
Document : applicationContext.xml
Created on : 18 de Outubro de 2009, 16:19
Author : danilo
Description:
Purpose of the document follows.
-->

<beans xmlns="http://www.springframework.org/schema/beans"
xmlnssi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">

<!-- Carrega o arquivo jdbc.properties -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:/jdbc.properties"/>
</bean>

<!-- configura informações do jdbc -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true"/>
<property name="generateDdl" value="false"/>
<property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect"/>
</bean>
</property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

<tx:annotation-driven/>

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>

<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

<bean id="usuario" class="dominio.Usuarios" scope="session"/>
<bean id="usuarioDao" class="dao.UsuarioDao"/>
<bean id="usuarioFacade" class="facade.UsuarioFacade">
<property name="usuarioDao" ref="usuarioDao"/>
</bean>

<!--<bean id="contato" class="dominio.Contato" scope="session"/>
<bean id="contatoDao" class="dao.ContatoDao"/>
<bean id="contatoFacade" class="facade.ContatoFacade">
<property name="contatoDao" ref="contatoDao"/>
</bean>-->


</beans>


O estranho é que este exemplo está no livro do Yuri Marx, e segui os passos corretamente.
Gostaria muito da atenção de vcs, pois to levando uma surra hehehe


walyson amaral
Debugger
[Avatar]

Membro desde: 19/12/2008 22:29:30
Mensagens: 54
Offline

Você pode mapear essa classe no persistence.xml



ou colocar nos parametros do glassfish, neste caso na console vá em Application Server / JVM Settings / JVM Options e adicione a classe com uma propriedade:



This message was edited 1 time. Last update was at 17/12/2009 09:53:08


walyson Trautenmüller
("O essencial é invisível aos olhos")
[MSN]
 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team