2015-10-19 8 views
8

Sto utilizzando Wildfly 8.1 insieme a un progetto EJB (EJB 3.2) contenente entità. Quando si cerca di iniettare il gestore di entità in uno dei miei fagioli ottengo il seguente:Perché l'unità di persistenza è denominata null quando esiste persistence.xml

JBAS011440: Can't find a persistence unit named null in deployment \"EntitiesProject.jar\""}, 
"JBAS014771: Services with missing/unavailable dependencies" => [ 
    "jboss.deployment.unit.\"EntitiesProject.jar\".weld.weldClassIntrospector is missing [jboss.deployment.unit.\"EntitiesProject.jar\".beanmanager]", 
    "jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO.HandleDelegate is missing [jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO]", 
    "jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO.InstanceName is missing [jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO]", 
    "jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO.InAppClientContainer is missing [jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO]", 
    "jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO.Validator is missing [jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO]", 
    "jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO.ORB is missing [jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO]", 
    "jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO.ValidatorFactory is missing [jboss.naming.context.java.comp.EntitiesProject.EntitiesProject.MitarbeiterDAO]" 
] 

questo è il mio SessionBean dove cerco di iniettare l'EntityManager:

@Stateless 
public class MitarbeiterDAO implements MitarbeiterDAORemote { 

    @PersistenceContext 
    private EntityManager em; 

    public int writeMitarbeiterToDB(Mitarbeiter m) 
    { 
     em.persist(m); 
     return m.getId(); 
    } 
} 

Ho specificato il persistence.xml seguente file che ho messo a "nome progetto"/ejbModule/META-INF.

<persistence-unit name="mitarbeiter"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <jta-data-source>java:jboss/datasources/MySqlDS</jta-data-source> 
    <properties> 
     <property-name="hibernate.hbm2ddl.auto" value="create-drop"/> 
    </properties> 
</persistence-unit> 

domande simili e le loro soluzioni

Update (vedi commenti):
- I hanno cercato di utilizzare @EntityManager(unitName="mitarbeiter") invece di appena @EntityManager - la Session Bean mostrata sopra è l'unico posto dove si tenta di iniettare EntityManager

Update 2 (vedi commenti di risposta):

  • persistence.xml si trova nella directory Project/ejbModule/META-INF/
  • Questa directory è incluso nel percorso di generazione
  • In qualche modo non è sempre schierato, mentre altri file nella stessa directory sono (a jar/META-INF/). Se copio & incollalo manualmente, funziona. Perché?

Qualsiasi aiuto e suggerimenti sono molto apprezzati.

+0

Hai provato specificando la proprietà 'unitName' opzionale del' @ PersistenceContext' annotazione? –

+0

sì, ho provato a usare '@PersistenceContext (unitName =" mitarbeiter ")' invece di solo '@ PersistenceContext'. – Jbartmann

+0

OK, basta controllare. Non dovrebbe essere necessario a meno che non ci sia più di un'unità di persistenza. –

risposta

6

Un paio di possibili problemi:

  • posizione non corretta del file persistence.xml. Si prega di inserirlo nella directory META-INF/ nella directory principale dell'archivio. Se si utilizza Maven sarebbe src/main/resources/META-INF/persistence.xml.
  • valido persistence.xml di file: avete persistence-unit tag chiuso in linea <persistence-unit name="mitarbeiter"/> (si prega di notare / alla fine)
  • <property-name="hibernate.hbm2ddl.auto" value="create-drop"/> non è valido. Suppongo che tu voglia: <property name="hibernate.hbm2ddl.auto" value="create-drop" />
  • anche il fornitore che stai usando è deprecato.

In generale, il corretto persistence.xml contenuti per JPA 2.1 nel tuo caso dovrebbe essere simile:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" 
    version="2.1"> 

    <persistence-unit name="mitarbeiter"> 
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 
    <jta-data-source>java:jboss/datasources/MySqlDS</jta-data-source> 

    <properties> 
     <property name="hibernate.hbm2ddl.auto" value="create-drop" /> 
    </properties> 
    </persistence-unit> 
</persistence> 
+0

Grazie a questo mi ha aiutato molto! Non vedevo più cose del genere dopo aver cercato una soluzione per ore! Mi ha avvicinato a una soluzione: 'persistence.xml' è nella directory giusta per quanto ne so:' Projektname/ejbModule/META-INF', ma non sta diventando gettato mentre altro in questa directory è. Se lo copio e lo incollo manualmente, funziona. Cosa potrebbe essere? – Jbartmann

+0

@Jbartmann probabilmente la directory non viene aggiunta come percorso di origine nel classpath di build – Atul

+0

Quello che sto facendo è: Rightclick Project -> Build Path -> Configure Build Path -> Java Build Path -> Source. C'è un oggetto 'Project/ejbModule' con' Included: All'. L'ho cambiato in 'Incluso: {selezionato tutte le cartelle, incluso META-INF}'. Ancora non distribuire il mio persistence.xml. E 'di questo che stavi parlando? Posso ancora farlo funzionare solo con copia e incolla manualmente. Appena faccio clic destro sul server -> pulisci viene eliminato. – Jbartmann

Problemi correlati