[EJB3 - JPA - Websphere] javax.ejb.EJBException
Bonjour,
Je rencontre un problème qui monopolise mon temps plus que de raison, j'essaie d'accéder à une base DB2 au travers d'une application web utilisant les EJB3 et JPA et à ma grande surprise le module EJB n'accède pas correctement à la partie JPA et m'insulte de la manière suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
javax.ejb.EJBException: The MonObjetEjb/em reference of type javax.persistence.EntityManager for the MonObjetEjb component in the projet-ejb.jar module of the appli-EAR application cannot be resolved.
com.ibm.wsspi.injectionengine.InjectionBinding.getInjectionObject(InjectionBinding.java:681)
com.ibm.wsspi.injectionengine.InjectionTargetField.inject(InjectionTargetField.java:245)
com.ibm.ws.injectionengine.InjectionEngineImpl.inject(InjectionEngineImpl.java:620)
com.ibm.ejs.container.StatelessBeanO.initialize(StatelessBeanO.java:316)
com.ibm.ejs.container.CMStatelessBeanOFactory.create(CMStatelessBeanOFactory.java:45)
com.ibm.ejs.container.EJSHome.createBeanO(EJSHome.java:1030)
com.ibm.ejs.container.EJSHome.createBeanO(EJSHome.java:1140)
com.ibm.ejs.container.activator.UncachedActivationStrategy.atActivate(UncachedActivationStrategy.java:84)
com.ibm.ejs.container.activator.Activator.activateBean(Activator.java:599)
com.ibm.ejs.container.EJSContainer.preInvokeActivate(EJSContainer.java:3964)
com.ibm.ejs.container.EJSContainer.EjbPreInvoke(EJSContainer.java:3349)
est à l'origine ma méthode appelant l'EJB... |
La déclaration de em mon EntityManager est fait comme suit, dans l'ejb MonObjetEjb :
Code:
1 2
| @PersistenceContext(type = PersistenceContextType.TRANSACTION, unitName = ProjetPerstistenceContext.UNIT_NAME)
private EntityManager em; |
Avec ProjetPersitenceContext une interface contenant un objet static de type String nommé UNIT_NAME et ayant pour valeur "projet-business-jpa".
Mon fichier persistence.xml se trouvant dans le module JPA est sensiblement le suivant :
Code:
1 2 3 4 5 6 7 8 9
| <?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="projet-business-jpa">
<jta-data-source>jdbc/projet-connection</jta-data-source>
<class>class1</class>
[...]
<class>classn</class>
</persistence-unit>
</persistence> |
Ma data source jdbc/projet-connection est définie et configurée sur mon serveur websphère, testée sous la console d'administration websphère elle répond correctement. Je suis même allé jusqu'à tester l'accès à la base en utilisant directement le module JPA qui fonctionne, le problème vient visiblement du fait qu'a l'exécution le module EJB n'a pas connaissance de la partie JPA. Un dernier élément à l'exécution, lors de l'appel d'un EJB, la console websphère indique :
Code:
1 2 3 4 5
| [16/03/10 14:18:04:046 CET] 00000047 JPAApplInfo E CWWJP0029E: CWWJP0029E: Le serveur ne parvient pas à trouver l'unité de persistance projet-business-jpa dans le module module-ejb.jar et l'application appli-EAR.
[16/03/10 14:18:04:046 CET] 00000047 InjectionBind E CWNEN0035E: Impossible de résoudre la référence MonObjetEjb/em de type javax.persistence.EntityManager pour le composant MonObjetEjb dans le module module-ejb.jar de l'application appli-EAR.
[16/03/10 14:18:04:312 CET] 00000047 FfdcProvider I com.ibm.ws.ffdc.impl.FfdcProvider logIncident FFDC1003I: Incident FFDC émis sur server1_4c7b4c7b_10.03.16_14.18.04.0463847371690004128951.txt com.ibm.ejs.container.StatelessBeanO.<init> 282
[16/03/10 14:18:04:562 CET] 00000047 FfdcProvider I com.ibm.ws.ffdc.impl.FfdcProvider logIncident FFDC1003I: Incident FFDC émis sur server1_4c7b4c7b_10.03.16_14.18.04.3284655491951234321447.txt com.ibm.ejs.container.EJSHome.createBeanO 1023
[16/03/10 14:18:04:562 CET] 00000047 BusinessExcep E CNTR0019E: L'EJB a émis une exception inattendue (non déclarée) lors de l'appel de la méthode "ma méthode applant l'EJB". Données de l'exception :javax.ejb.EJBException: The MonObjetEjb/em reference of type javax.persistence.EntityManager for the MonObjetEjb component in the module-ejb.jar module of the appli-EAR application cannot be resolved. |
Je désespère de trouver une solution à mon problème et visiblement google n'est pas mon ami sur ce coup. Une âme charitable aurait-elle un élément de piste ?
Merci d'avance.
Plus de précisions sur la réponse svp!!
Citation:
Envoyé par
nicoho
Solution trouvée, mon projet jpa avait comme dossier de sortie le répertoire src à la place du répertoire bin, conséquence de quoi le module EJB ne voyait pas les .class jpa ... encore une super erreur chronophage et energievore. En espérant que ça serve à quelqu'un.
Bonjour,
Je suis débutant et j'ai le même problème actuellement.Pouvez vous me précisez concrétement ce que vous avez fait pour régler le problème?Dans votre réponse actuelle, j'ai compris qu'il fallait renommer le dossier src en bin. Mais avant la génération du jar ou après?
Merci d'avance.