In passato ho sviluppato alcuni elementi JPA che utilizzavano un'istanza di javax.persistence.EntityManager
per istanza di DAO; questo è il modo in cui sono configurati molti esempi.JPA EntityManager Statico o Istanza?
public class BaseDaoThatEveryDaoExtends {
@PersistenceContext
private EntityManager entityManager;
}
Ho appena imbattuto il codice che utilizza un staticajavax.peristence.EntityManger
iniettato da un PersistenceContext
annotazione, l'architetto mi dice ciò non causa problemi e non hanno mai avuto alcun problema anche in un'applicazione cluster con JTA ed un XA origine dati:
public class BaseDaoThatEveryDaoExtends {
@PersistenceContext
private static EntityManager entityManager;
}
Per quanto posso dire questo è un anti-modello come il EntityManager
detiene alcune informazioni di stato e rendere statica fa che tutta l'applicazione dello stato di larghezza. Inoltre, questo rende le classi molto difficili da testare.
Ci sono altri svantaggi a fare questo o si tratta di un modo standard di utilizzare uno EntityManager
?
Un NPE è anche molto buono quando si costruisce manualmente un'istanza del DAO invece di ottenerlo iniettato e invoca i metodi di istanza su di esso. In modo che non sia davvero un argomento. – BalusC
Tranne che non è necessario costruire il BaseDaoThatEveryends di tutti i tempi, è sufficiente chiamare BaseDaoThatEveryends.doSomeStaticwork() che presenta un NPE. –