Glassfish 3.1 - UserTransaction

2 respostas
E

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>

2 Respostas

Resplandes

Estou com o mesmo problema como resolve isso ?

K
Na parte

[code]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:

/*
 * 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;
    }
    
}

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);
Criado 23 de agosto de 2011
Ultima resposta 18 de abr. de 2012
Respostas 2
Participantes 3