Konnte nicht beheben, @EJB-Referenz:
Bin ich versucht zu implementieren EJBs in meinem Projekt aber immer der gleiche Fehler beim bereitstellen auf JBoss AS 6 (Final).
Ich habe zwei Klassen:
@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;
}
und die anderen EJB:
@Stateless
public class CacheManagementServiceImpl implements CacheManagementService {
@EJB
private ForecastReturnService forecastReturnService;
}
Die Fehlermeldung mit Bezug auf die 'forecastReturnService" - Bohne, die ich versuche zu injizieren:
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]
Bemerkte ich die folgende Meldung in der JBoss-Konsole:
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
Jede Hilfe wäre sehr geschätzt werden! Scheint, wie ich bin etwas fehlt in der Sanitär -...
Ich möchte hinzufügen, dass, wenn ich, fügen Sie den folgenden, um die @EJB-annotation, so scheint es, um loszuwerden, die Fehlermeldung:
@EJB(lookup="com.ls.forecast.jpa.ForecastReturnService/local")
private ForecastReturnService forecastReturnService;
Nicht sicher, warum, müsste ich angeben, das lokale interface, da habe ich gesehen, viele Beispiele/tutorials, die mit @EJB nur. Warum brauche ich, um geben Sie die lokale Schnittstelle?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe die Suche hoch und niedrig für diese Lösung, habe es endlich. Zunächst müssen wir uns bewusst sein von den standard-EE-6 - (portable JNDI) JNDIs. JBoss-Dokumentation saugt. du musst Jagd auf Ihre Lösung.
Portable JNDI (PRÄFIXE):
java:app
Verwendbar nur innerhalb einer Anwendung (ich.e ein OHR)
java:global
Verwendbar, aus jeder Anwendung in den container (ich.e auch außerhalb eines OHR)
java:module
Verwendbar nur innerhalb eines Moduls (ich.e-Modul - EJB)
können einen Blick auf den JBoss-6.1.0 JMX-Konsole.
Die JMX-Konsole - > service=JNDIView (Unter JBoss Abschnitt)
Dieser bringt Sie die JMX-MBean View.
Jetzt können Sie die JNDI-Struktur durch klicken auf den button invoke
list
Zeile (bei mir war die Letzte Zeile), können Sie auch uns dielistXML
aber ich fand das verwirrend.unter der
java:
Abschnitt navigieren Sie zu dem Zweig, der beginnt mitglobal
(denn wir wollen den Einsatz der EJB-Remote außerhalb des OHRES). Ausgehend von dem obigen code, sollten Sie in der Lage sein, einen Weg zu finden, dass geht so etwas wie:global > ForecastReturnServiceEJB (Projekt-name) > ForecastReturnServiceImpl!injizieren.ForecastReturnService
übersetzen:
java:global/ForecastReturnServiceEJB/ForecastReturnServiceImpl!inject.ForecastReturnService
Dies ist die JNDI-wir müssen Sie nutzen für einen globalen Zugriff.
oder
Eine weitere Sache, können Sie nur
@EJB
ohne Parameter innerhalb des gleichen OHR.Ich dieses Problem behoben, indem geändert wird, mein Projekt so, dass es jetzt so verpackt, wie ein Ohr, statt eines Krieges. Ich kann jetzt so viele ejb-jars, wie gewünscht, obwohl ich beschlossen, diese Gelegenheit zu re-organisieren das Projekt und alle EJBs in die gleiche Maven-Modul.
Ist es, etwas bestimmtes in die Schnittstellen, die Sie implementieren?
Die einfachste Implementierung bereitgestellt, um den JBoss AS 6 und nur funktioniert, wenn ich schnell versucht es lokal:
Die zu injizierende bean:
Interface der bean, wo die Injektion erfolgt:
Bean, wo die Injektion erfolgt:
Relevanten Einträge im log:
und
Zwei kleine Anmerkungen (nicht direkt bezogen auf deine Frage), aber
@TransactionAttribute
ist hier nicht erforderlich.REQUIRED
ist bereits der Standard.@Local
sollte verwendet werden, auf der Schnittstelle, die Verwendung auf Klassenebene ist für die legacy-Schnittstellen können nicht von Ihnen verändert werden.