@PersistenceUnit annotation de ne pas créer un EntityManageFactory emf=null
Je suis d'essayer d'utiliser le Sun Java PetStore Démo.
Dans le CatalogFacade classe il est l'annotation suivante:
@PersistenceUnit(unitName="myPetStorePU")
private EntityManagerFactory emf;
Dans toutes les méthodes de la CatalogFacade Soleil a:
EntityManager em = emf.createEntityManager();
Mais je suis une exception de pointeur null pour fem lors de la tentative de createEntityManager. Mais... si j'ai ajouter la ligne suivante au-dessus de cette ligne en tant que tel
EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory("myPetStorePU");
EntityManager em = emf.createEntityManager();
puis emf obtient créé avec succès et de l'unité de persistance myPetStorePU également se connecte avec succès à la base de données. De sorte qu'il ressemble persistence.xml la syntaxe et son emplacement est correct. J'aimerais comprendre pourquoi l'annotation ne fonctionne pas car je pense qu'il y avait une raison pour simplement en utilisant l'annotation, par opposition à l'ajout de la createEntityManagerFactory ligne dans chaque méthode.
Mon src/META-INF/persistence.xml fichier ressemble à ceci:
<persistence-unit name="myPetStorePU">
<description>Petstore Persistence Unit</description>
<provider>oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider</provider>
<class>com.sun.javaee.blueprints.petstore.model.Tag</class>
<class>com.sun.javaee.blueprints.petstore.model.SellerContactInfo</class>
<class>com.sun.javaee.blueprints.petstore.model.Product</class>
<class>com.sun.javaee.blueprints.petstore.model.Item</class>
<class>com.sun.javaee.blueprints.petstore.model.Category</class>
<class>com.sun.javaee.blueprints.petstore.model.Address</class>
<class>com.sun.javaee.blueprints.petstore.model.ZipLocation</class>
<properties>
<property name="toplink.jdbc.driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="toplink.jdbc.url" value="jdbc:oracle:thin:@#############"/>
<property name="toplink.jdbc.user" value="####"/>
<property name="toplink.jdbc.password" value="#####"/>
<property name="toplink.logging.level" value="INFO"/>
</properties>
</persistence-unit>
Edit:
CatalogFacade est dans le petstore.modèle de colis et met en œuvre la ServletContextListener
<listener>
<listener-class>com.sun.javaee.blueprints.petstore.model.CatalogFacade</listener-class>
</listener>
dans l'index.jsp de Sun est la suivante:
<%
CatalogFacade cf = (CatalogFacade)config.getServletContext().getAttribute("CatalogFacade");
List<Tag> tags=cf.getTagsInChunk(0, 12);
%>
public List<Tag> getTagsInChunk(int start, int chunkSize) {
//The next line is required since the @PersistenceUnit annotation at the top of this class does not work
EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory("myPetStorePU");
EntityManager em = emf.createEntityManager();
System.out.println("Entity manager " + emf);
Query query = em.createQuery("SELECT t FROM Tag t ORDER BY t.refCount DESC, t.tag");
List<Tag> tags = query.setFirstResult(start).setMaxResults(chunkSize).getResultList();
em.close();
return tags;
}
CatalogFacade
. Et qu'est-ce - un pojo, un ejb, ou?
OriginalL'auteur jeff | 2010-12-07
Vous devez vous connecter pour publier un commentaire.
Si l'objet n'est pas géré par un conteneur (printemps/CDI/conteneur d'EJB), rien n'est injecté dans.
Donc, en fonction de votre environnement, obtenir un contextuelle instance de cet objet.
Si vous n'utilisez aucune des technologies ci-dessus (printemps/CDI/EJB) - vous ne pouvez pas utiliser
@PersistenceUnit
et@PersistenceContext
. Utiliser le manuel de façon à obtenir l'unité.ensuite, vous ne pouvez pas utiliser
@PersistenceUnit
. Vous avez besoin d'un contexte qui permettra d'injecter de la dépendance.Ce n'est pas ma compréhension: je devrais être en mesure d'utiliser @PersistenceUnit pour l'application de contexte de la gestion des
oui, mais vous avez besoin d'un contexte de la gestion. que j'ai compris, son auditeur n'est pas instancié de cette façon
OriginalL'auteur Bozho
Pour quelques raisons que ce qui se passe lors de l'utilisation de ce dans vous
persistence.xml
de commutation à
résout le problème
OriginalL'auteur ACV