N'a pas pu résoudre @EJB référence:
Je suis en train de mettre en œuvre des Ejb dans mon projet mais reçois le même message d'erreur lors du déploiement sur JBoss 6 (Final).
J'ai deux classes:
@Stateless
@Local(ForecastReturnService.class)
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class ForecastReturnServiceImpl implements ForecastReturnService {
private static final Logger logger = LoggerFactory
.getLogger(ForecastReturnServiceImpl.class);
@PersistenceContext
protected EntityManager em;
}
et l'autre EJB:
@Stateless
public class CacheManagementServiceImpl implements CacheManagementService {
@EJB
private ForecastReturnService forecastReturnService;
}
Le message d'erreur est en ce qui concerne 'forecastReturnService' haricot que je suis en train d'injecter de l':
DEPLOYMENTS IN ERROR:
Deployment "vfs:///C:/jboss/jboss-6.0.0.Final/server/default/deploy/webui.war" is in error due to the following reason(s): java.lang.RuntimeException: Could not resolve @EJB reference: [EJB Referenc
e: beanInterface 'com.ls.forecast.jpa.ForecastReturnService', beanName 'null', mappedName 'null', lookupName 'null', owning unit 'ComponentDeploymentContext@16939526{org.jboss.metadata.ejb.jboss.JBoss
EnterpriseBeanMetaData.CacheManagementServiceImpl}'] for environment entry: env/com.ls.forecast.webui.business.CacheManagementServiceImpl/forecastReturnService in unit ComponentDeploymentContext@16939
526{org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData.CacheManagementServiceImpl}
at org.jboss.deployers.plugins.deployers.DeployersImpl.checkComplete(DeployersImpl.java:1228) [:2.2.0.GA]
at org.jboss.deployers.plugins.main.MainDeployerImpl.checkComplete(MainDeployerImpl.java:905) [:2.2.0.GA]
at org.jboss.system.server.profileservice.deployers.MainDeployerPlugin.checkComplete(MainDeployerPlugin.java:87) [:6.0.0.Final]
at org.jboss.profileservice.deployment.ProfileDeployerPluginRegistry.checkAllComplete(ProfileDeployerPluginRegistry.java:107) [:0.2.2]
at org.jboss.system.server.profileservice.bootstrap.BasicProfileServiceBootstrap.start(BasicProfileServiceBootstrap.java:135) [:6.0.0.Final]
at org.jboss.system.server.profileservice.bootstrap.BasicProfileServiceBootstrap.start(BasicProfileServiceBootstrap.java:56) [:6.0.0.Final]
at org.jboss.bootstrap.impl.base.server.AbstractServer.startBootstraps(AbstractServer.java:827) [jboss-bootstrap-impl-base.jar:2.1.0-alpha-5]
at org.jboss.bootstrap.impl.base.server.AbstractServer$StartServerTask.run(AbstractServer.java:417) [jboss-bootstrap-impl-base.jar:2.1.0-alpha-5]
at java.lang.Thread.run(Thread.java:619) [:1.6.0_20]
J'ai remarqué que le message suivant dans la console JBoss:
13:34:27,681 WARN [MappedReferenceMetaDataResolverDeployer] Unresolved references exist in JBossMetaData:[#CacheManagementServiceImpl:AnnotatedEJBReferenceMetaData{name=com.ls.forecast.webui.business
.CacheManagementServiceImpl/forecastReturnService,ejb-ref-type=null,link=null,ignore-dependecy=false,mapped/jndi-name=null,resolved-jndi-name=null,beanInterface=interface com.ls.forecast.jpa.ForecastR
eturnService}, #EntityForecastReturnResultServiceImpl:AnnotatedEJBReferenceMetaData{name=com.ls.forecast.webui.business.EntityForecastReturnResultServiceImpl/entityForecastReturnProcessor,ejb-ref-type
Toute aide serait grandement appréciée! Me semble que je suis absent quelque chose dans la plomberie...
Je tiens à ajouter que, si j'ajoute les lignes suivantes à la @EJB annotation, il semble se débarrasser de l'erreur:
@EJB(lookup="com.ls.forecast.jpa.ForecastReturnService/local")
private ForecastReturnService forecastReturnService;
Ne sais pas pourquoi je l'aurais pour spécifier l'interface locale depuis que j'ai vu de nombreux exemples/tutoriels avec @EJB seulement. Pourquoi aurais-je besoin de spécifier l'interface locale?
Vous devez vous connecter pour publier un commentaire.
J'ai chercher haut un faible pour cette solution, finalement obtenu. Tout d'abord, nous devons être conscients de la norme EE 6 (portable JNDI) JNDIs. Documentation JBoss suce. tu dois Chasser pour votre solution.
Portable JNDI (PRÉFIXES):
java:app
Utilisable uniquement à l'intérieur d'une application (j'.e une OREILLE)
java:global
Utilisable depuis n'importe quelle application dans le conteneur (j'.e, même à l'extérieur de l'OREILLE)
java:module
Utilisable uniquement à l'intérieur d'un module (j'.e un Module EJB)
permet d'avoir un coup d'oeil à l'JBoss 6.1.0 Console JMX.
JMX Console > service=JNDIView (Sous JBoss section)
Cela vous apporte la JMX MBean Vue
Maintenant, vous pouvez voir l'arborescence JNDI en cliquant sur le bouton appeler
list
ligne (la mienne était la dernière ligne), vous pouvez également nous lelistXML
mais j'ai trouvé que de la confusion.en vertu de la
java:
section de défilement de la branche qui commence avecglobal
(parce que nous voulons utiliser les EJB à distance à l'extérieur de l'OREILLE). À en juger par le code ci-dessus, vous devriez être capable de trouver un chemin qui va quelque chose comme:global > ForecastReturnServiceEJB (nom du Projet) > ForecastReturnServiceImpl!injecter.ForecastReturnService
traduire ainsi:
java:global/ForecastReturnServiceEJB/ForecastReturnServiceImpl!inject.ForecastReturnService
C'est le JNDI nous devons utiliser pour l'accès mondial.
ou
Une chose de plus, vous ne pouvez utiliser
@EJB
sans paramètres au sein de la même OREILLE.J'ai résolu ce problème en modifiant mon projet de sorte qu'il est maintenant présenté comme une oreille au lieu d'une guerre. Je peux maintenant avoir autant de fichiers jar ejb comme souhaité, bien que j'ai décidé de profiter de cette occasion pour ré-organiser le projet et de mettre toutes les Ejb dans le même module Maven.
Est-il rien de spécifique dans les interfaces que vous mettre en œuvre?
Le plus simple de mise en œuvre déployés pour JBoss 6 fonctionne, tout simplement quand j'ai rapidement essayé en local:
L'être injecté bean:
Interface de haricot où l'injection a lieu:
Bean où l'injection a lieu:
Les entrées pertinentes dans le journal:
et
Deux petites remarques (pas directement liées à votre question), mais
@TransactionAttribute
n'est pas nécessaire ici.REQUIRED
est déjà la valeur par défaut.@Local
doit être utilisé sur l'interface, en l'utilisant sur le niveau de la classe est l'héritage d'interfaces qui ne peuvent pas être modifiées par vous.