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
- Can't find persistence unit suggerisce di includere un persistence.xml
- Injecting entityManager in Wildfly/Jboss sottolinea che ci potrebbe essere un'altra directory dove il mio persistence.xml appartiene. Ho provato quella directory ma ho ancora lo stesso messaggio di errore.
- Cannot find persistence unit from persistence.xml Mentre questo non è esattamente la stessa domanda la soluzione era quella di aggiungere un
<provider>
al persistence.xml, ma anche questo non ha funzionato per me
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 directoryProject/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.
Hai provato specificando la proprietà 'unitName' opzionale del' @ PersistenceContext' annotazione? –
sì, ho provato a usare '@PersistenceContext (unitName =" mitarbeiter ")' invece di solo '@ PersistenceContext'. – Jbartmann
OK, basta controllare. Non dovrebbe essere necessario a meno che non ci sia più di un'unità di persistenza. –