Estou efetuando a migração do JBoss-4.0.5 para o JBoss-4.2.2.
Tudo funcionava perfeitamente na versão antiga, porém na versão 4.2.2 a aplicação só está realizando consultas,
nenhum tipo de transação (incluir, alterar e excluir).
A mensagem é:
“javax.ejb.EJBException: java.lang.IllegalStateException: JTA EntityManager cannot access a transactions”.
O erro ocorre nessa linha:
transaction = manager.getTransaction();
Alguém está familiarizado com esse erro, pode ser alguma biblioteca ou configuração q está faltando?
Segue arquivos abaixo:
persistence.xml
<?xml version="1.0" encoding="UTF-8"?><persistence-unit name="UnicampMateriais">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>
java:/UnicampMateriaisDatasource
</jta-data-source>
<class>src...</class>
<class>src...</class>
<property name="hibernate.dialect" value="org.hibernate.dialect.DB2Dialect" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.cache.provider_class"
value="org.hibernate.cache.HashtableCacheProvider" />
<property name="hibernate.transaction.manager_lookup_class"
value="org.hibernate.transaction.JBossTransactionManagerLookup" />
<property name="hibernate.transaction.factory_class"
value="org.hibernate.transaction.JTATransactionFactory" />
</properties>
</persistence-unit>
ManagerFactory.java
public class ManagerFactory {
private static EntityManagerFactory factory;
static {
try {
factory = Persistence
.createEntityManagerFactory("UnicampMateriais");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static EntityManager getEntityManagerInstance() {
if (factory == null) {
factory = Persistence
.createEntityManagerFactory("UnicampMateriais");
EntityManager em = factory.createEntityManager();
em.joinTransaction();
return em;
} else {
EntityManager em = factory.createEntityManager();
em.joinTransaction();
return em;
}
}
}
ClasseBean
public @Stateless
class EnderecoBean implements EnderecoBeanRemote {
public static final String RemoteJNDIName = EnderecoBean.class
.getSimpleName()
+ "/remote";
public static final String LocalJNDIName = EnderecoBean.class
.getSimpleName()
+ "/local";
private EntityManager manager;
private EntityTransaction transaction;
public void alterarEndereco(EnderecoVO vo, SessionVO sessionVO) throws EnderecoException{
try{
manager = ManagerFactory.getEntityManagerInstance();
transaction = manager.getTransaction();
transaction.begin();
...
transaction.commit();
} catch (EnderecoException ex) {
if(transaction != null && transaction.isActive()) transaction.rollback();
throw ex;
} catch (Exception e) {
if(transaction != null && transaction.isActive()) transaction.rollback();
throw new EnderecoException(e);
}
finally
{
manager = null;
}
}
Grato;
Diogo Alló