domenica 22 gennaio 2012

Come ottenere un'istanza di un EntityManager

L'interfaccia javax.persistence.EntityManager, che consente di operare modifiche sul database ed è definito sul testo "EJB in ACTION" "the bridge between the OO and relational word", può essere ottenuta in due modi:
  • Tramite l'annotation @PersistenceContext come variabile di classe, ed in tal caso si parla di "container manager EntityManager";
  • Tramite l'interfaccia javax.persistence.EntityManagerFactory, ed in questo caso si parla di "application manager EntityManager".
Nel primo caso tutto è gestito dal container. Bisogna avere l'accortezza di evitare di utilizzare questo tipo di injection direttamente come variabile di istanza di una servlet, non essendo quest'ultima thread safe per definizione (a meno di implementare l'interfaccia SingleThreadModel).

Nel secondo caso bisogna scrivere il codice per controllare ogni aspetto del ciclo di vita dell' EntityManager, inizializzandolo nel @PostConstruct e chiudendolo nel @PreDestroy, mentre per ottenere l'EntityManagerFactory si utilizza l'annotation @PersistenceUnit

Di seguito un esempio di utilizzo:

@Stateless
public class ItemManagerBean implements ItemManager {

@PersistenceUnit
private EntityManagerFactory emF;
private EntityManager entityManager;
public EntityManager(){
}
@PostConstruct
public void initialize(){
entityManager=emF.createEntityManager();
}
..... metodi di business in cui si utilizza l'EntityManager

@PreDestroy
public void cleanUp(){
if(entityManager.isOpen()){
entytyManager.close();
}
}

}

Nessun commento:

Posta un commento