Glassfish 3.1 - UserTransaction

Eu estava usando Netbeans 6.9 e GlassFish 3.0.1 e ao gerar os JPAControler vinha no modelo

public ModuloJpaController(EntityManagerFactory emf) { this.emf = emf; }

Agora em outro PC, usando Netbeans 7.0.1 e GlassFish 3.1 é

public ModuloJpaController(UserTransaction utx, EntityManagerFactory emf) { this.utx = utx; this.emf = emf; }

Procurei a respeito e dizem que não é necessário UserTransaction a não ser que eu queira controlar manualmente, que não é o caso.

O que devo alterar então para gerar os JPAController no modo “antigo” ? Pode ser algo com a versão do EE ?

Meu persistence.xml

<persistence-unit name="nomePU" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <non-jta-data-source>nome</non-jta-data-source> <exclude-unlisted-classes>false</exclude-unlisted-classes> <properties> <property name="hibernate.hbm2ddl.auto" value="update"/> </properties> </persistence-unit>

Estou com o mesmo problema como resolve isso ?

[code]Na parte

public ModuloJpaController(UserTransaction utx, EntityManagerFactory emf) { this.utx = utx; this.emf = emf; }

troque “UserTransaction utx” por “EntityTransaction etx” (altere as referências abaixo tipo “utx.commit()” para “etx.commit()”, use a refatoração do Netbeans)

Crie um DAO assim:

[code]
/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package Model.DAO;

import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;

public class DAO {
private static String NOME_PU = “NomeDaSuaPU”;
EntityTransaction etx;
EntityManagerFactory emf;

public DAO() {
    emf = Persistence.createEntityManagerFactory(NOME_PU);
    etx = emf.createEntityManager().getTransaction();
}

public EntityManagerFactory getEmf() {
    return emf;
}

public void setEmf(EntityManagerFactory emf) {
    this.emf = emf;
}

public EntityTransaction getEtx() {
    return etx;
}

public void setEtx(EntityTransaction etx) {
    this.etx = etx;
}

}[/code]

Digamos que a classe SeuObjeto foi criada a partir do banco de dados, então você consulta assim:


DAO dao = new DAO();
List<SeuObjeto> listaSeuObjeto;
SeuObjetoJpaController seuObjetoCTRL = new SeuObjetoJpaController(dao.getEtx(), dao.getEmf());

listaSeuObjeto = seuObjetoCTRL.findSeuObjetoEntities();

for (SeuObjeto so : listaSeuObjeto) {

            System.out.print(so.getAtributo1());
            System.out.print(" - ");
            System.out.print(so.getAtributo2());
            System.out.print(" - ");
            System.out.print(so.getAtributo3());
            System.out.println(" --------------------------------------------- ");

        }

E para inserir uma nova tupla


DAO dao = new DAO();
SeuObjeto listaSeuObjeto = new SeuObjeto();
SeuObjetoJpaController seuObjetoCTRL = new SeuObjetoJpaController(dao.getEtx(), dao.getEmf());

seuObjeto.setAtributo1("valor1");
seuObjeto.setAtributo2("valor2");
seuObjeto.setAtributo3("valor3");

seuObjetoCTRL.create(seuObjeto);