You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@openjpa.apache.org by Mauro Chi <ma...@gmail.com> on 2014/02/26 16:49:57 UTC

Whi if i close a EntityMaanger into a java SE app i not can get a new EntityManager fro ma apposite method?

Hi all .
It is the first time that i write on mailing list of OPEJPA .
I am movice to OpenJPA and i have a question.
I have writed a java SE app simple.
I have created a class Gestore.java .

------------------------

my DAO is :

package gestoreentita;

import eentita.Persona;
import java.util.List;
import java.util.logging.Logger;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

/**
 *
 * @author utente_javaee7
 */
public class Gestore {

    private static final Logger log =
Logger.getLogger(Gestore.class.getName());
    EntityManagerFactory emf = null;
    EntityManager em = null;

    public Gestore() {
        this.emf =
Persistence.createEntityManagerFactory("prova1openjpaallPU");

        log.info("created the EntyManagerFactory " + emf.toString());
    }

    public EntityManager getEntityManager() {

        if (this.em == null) {
            em = emf.createEntityManager();
            log.info("created the EntyManager " + em.toString());

        }
        return this.em;

    }

    public void closeEntytyManager() {
        if (em.isOpen()) {
            em.close();
            em = null;
            log.info("closed  the EntyManager " + em.toString());
        }
    }

    public void closeEntytyManagerFactory() {
        if (emf.isOpen()) {
            log.info("now i close  the EntyManagerFactory " +
emf.toString());
            emf.close();
            log.info("the EntyManagerFactory now is :" + emf.toString());
        }
    }

    public Persona savePersona(Persona newdetachedPerson) {

        try {
            em = this.getEntityManager();
            em.getTransaction().begin();

            em.persist(newdetachedPerson);
            em.getTransaction().commit();
            log.info("Persona è stata salvata in database con id =" +
newdetachedPerson.getId());
        } catch (Exception e) {
            em.getTransaction().rollback();
            log.info("error into operation of persistence... Person not
saved!!!!");

        } finally {
            this.closetransaction();

            this.closeEntytyManager();

        }
        return newdetachedPerson;
    }

    public List<Persona> getListPersona() {
        List<Persona> lista = null;
        try {
            em = this.getEntityManager();

            log.info("Creatop EntytyManager =" + em.toString());
            log.info("Tentativo di ritrovare le enttita persona nel
database:");

            lista = em.createQuery("select p from Persona
p").getResultList();

            log.info("------ritrovate :" + lista.size());

        } catch (Exception e) {
            log.info("i have a Exception :" + e.getLocalizedMessage());
        } finally {
            this.closeEntytyManager();

        }
        return lista;
    }

    public void closetransaction() {
        if (em.getTransaction().isActive()) {
            em.close();
            log.info("transaction closed!!!");
        }
    }

}
---------------------------------------------------------------

my application with class Main is:


package mauro.application;

import eentita.Persona;
import gestoreentita.Gestore;
import java.awt.HeadlessException;
import java.util.List;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
 *
 * @author utente_javaee7
 */
public class Main {

    private static final Logger LOG =
Logger.getLogger(Main.class.getName());

    public static Logger getLOG() {
        return LOG;
    }
    private Gestore gestore;

    public void closeEntityManagerFactory() {
        this.gestore.closeEntytyManagerFactory();
    }

    public Main() {
        this.gestore = new Gestore();
    }

    public static void main(String[] arg) {
        Main main = new Main();
        main.test1();

    }


    public void test1() {
        try {
            Persona p1, p2, p3, p4;
            p1 = new Persona();
            p1.setNome("pippo");

            p2 = new Persona();
            p2.setNome("pluto");
            p3 = new Persona();
            p3.setNome("paperino");
            p4 = new Persona();
            p4.setNome("archimede");

            p1 = gestore.savePersona(p1);
            JOptionPane.showMessageDialog(null, "Salvato: " + p1.getNome()
+ " con ID= : " + p1.getId());

            p2 = gestore.savePersona(p2);
            JOptionPane.showMessageDialog(null, "Salvato: " + p2.getNome()
+ " con ID= : " + p2.getId());

            p3 = gestore.savePersona(p3);
            JOptionPane.showMessageDialog(null, "Salvato: " + p3.getNome()
+ " con ID= : " + p3.getId());

            p4 = gestore.savePersona(p4);
            JOptionPane.showMessageDialog(null, "Salvato: " + p4.getNome()
+ " con ID= : " + p4.getId());

            List<Persona> listaPersone = gestore.getListPersona();
            JOptionPane.showMessageDialog(null, "into the db are present :
" + listaPersone.size() + " Persone");

        } catch (Exception e) {
            LOG.info("i have a exception: " + e.getLocalizedMessage());
        } catch (Throwable t) {
            LOG.info("i have a error: " + t.getLocalizedMessage());
        } finally {
           this.gestore.closeEntytyManagerFactory();
        }
    }

    public Gestore getGestore() {
        return gestore;
    }
}


---------------------------------------------------------------------------------------------------------------
my persitence.xml

<?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="prova1openjpaallPU"
transaction-type="RESOURCE_LOCAL">

<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
        <class>eentita.Persona</class>
        <properties>
            <property name="javax.persistence.jdbc.url"
value="jdbc:derby://localhost:1527/OneTOMAnyUnidirectionalWihJoinForeighKeyDB"/>
            <property name="javax.persistence.jdbc.password" value="app"/>
            <property name="javax.persistence.jdbc.driver"
value="org.apache.derby.jdbc.ClientDriver"/>
            <property name="javax.persistence.jdbc.user" value="app"/>
            <property name="openjpa.jdbc.SynchronizeMappings"
value="buildSchema(SchemaAction=&apos;add,deleteTableContents&apos;,ForeignKeys=true)"/>


            <property name="openjpa.Log" value="DefaultLevel=WARN,
Runtime=INFO, Tool=INFO, SQL=TRACE"/>
            <property name="openjpa.ConnectionFactoryProperties"
             value="PrettyPrint=true, PrettyPrintLineLength=80,
PrintParameters=True"/>

        </properties>
    </persistence-unit>
</persistence>

--------------------------------------------------------
the entity Persona:

package eentita;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

/**
 *
 * @author utente_javaee7
 */
@Entity
public class Persona implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }
    private String nome;

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields
are not set
        if (!(object instanceof Persona)) {
            return false;
        }
        Persona other = (Persona) object;
        if ((this.id == null && other.id != null) || (this.id != null &&
!this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "eentita.Persona[ id=" + id + " ]";
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

}
----------------------------------



from the consolle i get:

run:

1183  prova1openjpaallPU  INFO   [main] openjpa.Runtime - OpenJPA
dynamically loaded the class enhancer. Any classes that were not enhanced
at build time will be enhanced when they are loaded by the JVM.
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further
details.
1557  prova1openjpaallPU  INFO   [main] openjpa.Runtime - OpenJPA
dynamically loaded a validation provider.
feb 25, 2014 6:17:15 PM gestoreentita.Gestore <init>
INFO: created the EntyManagerFactory
org.apache.openjpa.persistence.EntityManagerFactoryImpl@106ff81
2715  prova1openjpaallPU  INFO   [main] openjpa.Runtime - Starting OpenJPA
2.2.2
4507  prova1openjpaallPU  TRACE  [main] openjpa.jdbc.SQL - <t 11800934,
conn 15888232> executing stmnt 15418919
DELETE FROM Persona
4528  prova1openjpaallPU  TRACE  [main] openjpa.jdbc.SQL - <t 11800934,
conn 15888232> [21 ms] spent
feb 25, 2014 6:17:18 PM gestoreentita.Gestore getEntityManager
INFO: created the EntyManager
org.apache.openjpa.persistence.EntityManagerImpl@15beddd
4926  prova1openjpaallPU  TRACE  [main] openjpa.jdbc.SQL - <t 11800934,
conn 1409906> executing prepstmnt 8994380
INSERT INTO Persona (nome)
    VALUES (?)
[params=(String) pippo]
4933  prova1openjpaallPU  TRACE  [main] openjpa.jdbc.SQL - <t 11800934,
conn 1409906> [7 ms] spent
4937  prova1openjpaallPU  TRACE  [main] openjpa.jdbc.SQL - <t 11800934,
conn 1409906> executing prepstmnt 6876392
VALUES(IDENTITY_VAL_LOCAL())

4947  prova1openjpaallPU  TRACE  [main] openjpa.jdbc.SQL - <t 11800934,
conn 1409906> [2 ms] spent
feb 25, 2014 6:17:18 PM gestoreentita.Gestore savePersona
INFO: Persona è stata salvata in database con id =18
feb 25, 2014 6:17:18 PM mauro.application.Main test1
INFO: i have a exception: null
feb 25, 2014 6:17:18 PM gestoreentita.Gestore closeEntytyManagerFactory
INFO: now i close  the EntyManagerFactory
org.apache.openjpa.persistence.EntityManagerFactoryImpl@106ff81
feb 25, 2014 6:17:18 PM gestoreentita.Gestore closeEntytyManagerFactory
INFO: the EntyManagerFactory now is
:org.apache.openjpa.persistence.EntityManagerFactoryImpl@106ff81
BUILD SUCCESSFUL (total time: 8 seconds)



for each methods i create a new EntityManager with the method
getEntityManager() .
It create a new EntityManager from the EMF and set into em  field of class
and retrun it .

At each method i close the em for get a new  em for  other operation on DB .

so i have created into another class named Main.java a test:
i would insert 4 instances of entity Persona into db .
But after the first insert i get a null .and a Exception.
So i ask:
whi the new  entityManager is not created ???
Where it is the error into my code?

Tank you
Mauro