Ne pouvez pas obtenir la persistance au travail dans JBoss as 7 (“impossible de trouver une unité de déploiement nommé à la sous-déploiement”)
J'essaie de mettre en œuvre une démonstration qui utilise JBoss as 7 avec défaut d'hibernate et de la Base de données par défaut livré avec JBoss as. Mon application est similaire à la "connexion" exemple de JBoss (j'ai quelques projets supplémentaires pour mettre en œuvre un service web et de déploiement de l'OREILLE) et je ne peux pas rattraper la différence. De toute façon je ne cesse de recevoir Exécution des Exceptions comme
Caused by: java.lang.RuntimeException: Can't find a deployment unit named at subdeployment "myproject.persistence.war" of deployment "myproject.ear"
at org.jboss.as.weld.services.bootstrap.WeldJpaInjectionServices.getScopedPUName(WeldJpaInjectionServices.java:94) [jboss-as-weld-7.0.2.Final.jar:7.0.2.Final]
at org.jboss.as.weld.services.bootstrap.WeldJpaInjectionServices.resolvePersistenceContext(WeldJpaInjectionServices.java:59) [jboss-as-weld-7.0.2.Final.jar:7.0.2.Final]
at org.jboss.weld.util.Beans.injectEEFields(Beans.java:784) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
Mon MANIFESTE.MF
Manifest-Version: 1.0
Dependencies: org.hibernate
Mon beans.xml est vide. Dans mon dossier lib j'ai l'hibernation des pots d'avoir accès natif hibernate fonctionnalités.
Mon persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="accessControlDatabase">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
</properties>
</persistence-unit>
</persistence>
Et mes deux classes:
import javax.enterprise.inject.Produces;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
public class Resources {
@SuppressWarnings("unused")
@Produces
@PersistenceContext(name = "accessControlDatabase")
private EntityManager em;
}
import java.util.List;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;
import javax.persistence.EntityManager;
import myproject.model.Session;
import myproject.model.User;
@Named("accessControlRepository")
@RequestScoped
public class AccessControlRepository {
@Inject
private EntityManager em;
@SuppressWarnings("unchecked")
public List<Session> getAllSessions() {
return em.createQuery("from Session").getResultList();
}
}
Ce qui peut provoquer l'exception? Que dois-je chercher pour résoudre le problème?
OriginalL'auteur Arne Deutsch | 2011-11-18
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé une solution. Je dois mettre le persistence.xml dans le META-INF dossier de la OREILLE projet. Si je le fais, je peux utiliser les
@PersistenceContext
annotation pour obtenir à laEntityManager
. Je pense que cela devrait fonctionner dans l'autre sens, trop. Cela semble être une solution de contournement, pas une vraie solution.persistence.xml
avant? Dans le fichier ejb-jar du répertoire META-INF dans l'OREILLE?Et pour n'importe qui à l'aide de la guerre, persistence.xml devrait être dans your_app_name\src\main\ressources\META-INF ce qui a pris mon 1 heure 🙁
Salut, plusieurs IDE (comme intellij) de créer la persistance xml dans le dossier INCORRECT, si vous êtes en utilisant .guerre . Très utile Commentaire
OriginalL'auteur Arne Deutsch
Vous devez définir une unité de persistance de référence dans votre
web.xml
fichier demyproject.persistence.war
de la façon suivanteUne erreur commune consiste à écorcher la référence de la
<persistence-unit-name>
contenu, c'est une source qui génère cette erreurOriginalL'auteur gersonZaragocin