2010-11-30 42 views
1

Je suis un débutant en Java EE. C'est le premier projet que j'essaie de faire et j'ai un problème que je ne peux pas résoudre.EntityManager vide dans Java EE EE sur JBoss 5.1

J'ai créé trois projets: slowka-beans (EJB), slowka-persistance (JPA) et slowka-web (JSF). Après leur déploiement, je ne peux pas accéder à l'unité de persistance - EntityManager est null. Tout fonctionne bien - je peux créer des beans, à l'intérieur d'eux instancier des classes d'entités et les montrer sur la page JSF. Mais comment puis-je les stocker dans la base de données? J'ai la base de données MySQL configurée sur le site JBoss.

Le code que je regarde suivantes: LanguagesManager.java (en slowka-haricots)

@Stateless 
public class LanguagesManager implements LanguagesManagerLocal { 

    @PersistenceContext(unitName="slowka-persistance") 
    private EntityManager em; 

    public LanguagesManager() { 
     System.out.println("LanguagesManagerBean constructor"); 
    } 

    public String getWorking() { 
     if(em == null) { 
      System.out.println("Not working..."); 
      return "Not working..."; 
     } else { 
      System.out.println("It's ALIVE!"); 
      return "It's ALIVE!"; 
     } 
    } 
} 

persistence.xml (slowka-persistence):

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="1.0" 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_1_0.xsd"> 
    <persistence-unit name="slowka-persistance"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <jta-data-source>java:/PraktykiDS</jta-data-source> 
     <class>pl.edu.uj.sobczak.szymon.Language</class> 
    </persistence-unit> 
</persistence> 

Déploiement sur le serveur ce doesn Ne provoque aucune exception. mais je l'ai repéré les avertissements suivants dans la sortie du serveur:

23:02:23,801 INFO [PersistenceUnitDeployment] Starting persistence unit persistence.unit:unitName=slowka.ear/slowka-persistance.jar#slowka-persistance 
23:02:23,803 INFO [Ejb3Configuration] Processing PersistenceUnitInfo [ 
    name: slowka-persistance 
    ...] 
23:02:23,804 WARN [Ejb3Configuration] Persistence provider caller does not implement the EJB3 spec correctly. PersistenceUnitInfo.getNewTempClassLoader() is null. 
(... trimmed ...) 
23:02:23,868 INFO [SessionFactoryObjectFactory] Bound factory to JNDI name: persistence.unit:unitName=slowka.ear/slowka-persistance.jar#slowka-persistance 
23:02:23,868 WARN [SessionFactoryObjectFactory] InitialContext did not implement EventContext 

Chaque fois que je suis accès à LanguagesManager::getWorking() de JSP je suis en train de « ne fonctionne pas ... » Sortie.

J'ai créé le projet dans Eclipse, JPA utilise EclipseLink. J'ai essayé les deux - EclipseLink 1.1.4 et 2.1.0 avec le même résultat.

Pouvez-vous m'aider s'il vous plaît?

+0

J'ai exactement le même problème, et j'ai passé des jours à essayer de le résoudre! Avez-vous eu de la chance à la fin? Si oui, pourriez-vous s'il vous plaît poster une copie de votre persistence.xml, et les extraits de code court relavent de votre servlet/haricot Ma question sur stackoverflow est [ici] [1] [1] : http://stackoverflow.com/questions/5373598/how-to-use-container-managed-transaction-cmt-with-jboss-as-6-hibernate-3-6-jp – willtardy

Répondre

2

N'appelez pas d'EJB à partir de JSP. Appelez-les à partir des servlets, où vous les injectez avec @EJB.

Si vous instanciez l'objet manuellement, l'injection ne se produit pas. L'objet (ejb) doit être instancié par le conteneur EJB.