Fala pessoal!
Tenho aqui na minha empresa um sistema simples, originalmente estrutura para EJB 3.1, JPA 2 (usando eclipselink), JSF 2 rodando sobre o glassfish e usando o postgres 9.1. Ele é basicamente um projeto utilizado a um tempo atrás como prova de conceito.
Estou fazendo a “portabilidade” dele para o JBoss AS7 e no entanto me deparei com um certo problema.
No JBoss, o sistema está conseguindo fazer todas as consultas e exibir os resultados. Mas qualquer solicitação de insert/update/delete resulta em… nada. O sistema não diz que falhou, não gera exception, aliás, passa pelo entitymanager.persist, e simplesmente não persiste nada no banco.
No glassfish tudo funciona muito bem.
Após algumas pesquisas, resolvi testar algumas soluções e a única que funcionou das que encontrei, foi explicitamente abrir a transação, e fazer o commit manualmente. Dai o sistema funciona perfeitamente e faz os inserts e updates. Mas não era pra ser assim, afinal configurei no datasource para ativar o uso de jta. Está igual a configuração do glassfish.
E o mais estranho de tudo é o fato de não gerar nenhum log informando que não existe transação ativa. Será que preciso habilitar algum nivel de log mais detalhado pra obter essas informações, ou o jboss engole mesmo tudo isso?
Enfim, acho que é inviável e uma má pratica abrir a transação e chamar o commit manualmente. Prefiro que o container se vire pra fazer isso, como funciona no Glassfish. Abaixo segue meu arquivo de configuração:
<subsystem xmlns="urn:jboss:domain:datasources:1.0">
<datasources>
<datasource jta="true" jndi-name="java:/jdbc/gsp" pool-name="GSP" enabled="true" use-java-context="true" use-ccm="true">
<connection-url>jdbc:postgresql://127.0.0.1:5432/gsp</connection-url>
<driver-class>org.postgresql.Driver</driver-class>
<driver>postgresql</driver>
<security>
<user-name>scott</user-name>
<password>tiger</password>
</security>
</datasource>
<drivers>
<driver name="postgresql" module="org.postgresql">
<xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
</driver>
<driver name="h2" module="com.h2database.h2">
<xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
</driver>
</drivers>
</datasources>
</subsystem>
E meu arquivo persistence.xml é o seguinte:
<?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="GspJPA"
transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/gsp</jta-data-source>
<class>com.gsp.modelo.entidade.Cargo</class>
<class>com.gsp.modelo.entidade.Perfil</class>
<class>com.gsp.modelo.entidade.Usuario</class>
</persistence-unit>
</persistence>
Alguém sabe se falta alguma configuração?