Konsumieren lokalen EJB, im gleichen Container aber verschiedene Ohren
Ich bin triying zu verbrauchen einer Lokalen EJB in der gleichen Glassfish, aber unterschiedliche Ohren. Aber Glassfish nicht gefunden, die lokale EJB-oder kann Sie nicht verbrauchen
Las ich dies:
Gemäß der Java ee tutorial, den Kunden auf eine @Local-bean "laufen müssen in der gleichen JVM wie die enterprise-bean greift Sie auf."
In das erste Ohr,
Ich habe die lokale Schnittstelle in ein Glas
@Local
public interface MyLocalBean {
int getNumber(int num3);
}
In einem anderen Glas habe ich die Umsetzung
@Stateless
@LocalBean
public class MyLocalBeanImpl implements MyLocalBean,Serializable{
public MyLocalBeanImpl() {}
public int getNumber(int num3){......
In der zweiten Ohr,
in der gleichen Glassfish
Habe ich die lokale Schnittstelle in ein Glas
@Local
public interface MyLocalBean {
int getNumber(int num3);
}
In einem anderen Glas habe ich die Verbraucher
@Stateless
@LocalBean
public class BeanConsumer{
@EJB(name="MyLocalBeanImpl")
private MyLocalBean beanlocal;
mit @EJB und (name="MyLocalBeanImpl") parameter der Fehler ist:
Cannot resolve reference Local ejb-ref name=MyLocalBeanImpl,Local 3.x
interface =my.package.MyLocalBean,ejb-link=null,lookup=,
mappedName=,jndi-name=,refType=Session|#]
mit @EJB und (name="mein.Paket.MyLocalBeanImpl") parameter der Fehler ist:
Cannot resolve reference Local ejb-ref name=my.package.MyLocalBeanImpl,
Local 3.x interface =my.package.MyLocalBean,ejb-link=null,
lookup=,mappedName=,jndi-name=,refType=Session|#]***
Versuchte ich auch mit mappedName
@Stateless(name="MyLocalBeanImpl",mappedName ="MyLocalBeanImpl")
public class MyLocalBeanImpl implements MyLocalBean{
@EJB(name="MyLocalBeanImpl",mappedName ="MyLocalBeanImpl")
private MyLocalBean beanlocal;
aber der Fehler weiterhin bestehen
Cannot resolve reference Local ejb-ref name=MyLocalBeanImpl,
Local 3.x interface =my.package.MyLocalBean,ejb-link=null,
lookup=,mappedName=MyLocalBeanImpl,jndi-name=,refType=Session
GlassFish arbeitet mit einem JNDI-wie
java:global[/<app-name>]/<module-name>/<bean-name>
Habe ich noch die annotation @LocalBean die Bohne MyLocalBeanImpl
@Stateless
@LocalBean
public class MyLocalBeanImpl implements MyLocalBean{
public MyLocalBeanImpl() {}
public int getNumber(int num3){......
und wenn ich bereitgestellt Glassfish sagen, dass die jndi-sind zwei
Portable JNDI names for EJB OtroBean
java:global/myfirstear/myejbs/MyLocalBeanImpl!my.package.MyLocalBeanImpl
and
java:global/myfirstear/myejbs/MyLocalBeanImpl!my.package.MyLocalBean
ich versuche mit
@EJB(lookup="java:global/myfirstear/myejbs/MyLocalBeanImpl!my.package.MyLocalBeanImpl")
Scheint es, dass Glassfish fand die Lokale Bean, aber... Glassfish Probleme haben casting-o so etwas wie dieses
javax.naming.NamingException
javax.ejb.EJBException: javax.ejb.CreateException: Could not create stateless EJB
at
com.sun.ejb.containers.StatelessSessionContainer
._getContext(StatelessSessionContainer.java:454)
.....
Caused by: javax.ejb.EJBException:
javax.ejb.CreateException: Could not create stateless EJB
....
Caused by: com.sun.enterprise.container.common.spi.util.InjectionException:
Exception attempting to inject Local ejb-ref name=my.package.BeanConsumer/beanlocal,
Local 3.x interface =my.package.MyLocalBean,ejb-link=null,
lookup=java:global/myfirstear/myejbs/MyLocalBeanImpl!my.package.MyLocalBeanImpl,
mappedName=,jndi-name=,refType=Session into class my.package.BeanConsumer:
Can not set my.package.MyLocalBean field my.package.BeanConsumer.beanlocal
to my.package.beans.__EJB31_Generated__MyLocalBeanImpl__Intf____Bean__
Und versucht mit
@EJB(lookup="java:global/myfirstear/myejbs/MyLocalBeanImpl")
Bekomme ich:
throws javax.naming.NamingException
javax.ejb.EJBException: javax.ejb.EJBException: javax.ejb.CreateException: Could not create stateless EJB
Caused by: com.sun.enterprise.container.common.spi.util.InjectionException:
Exception attempting to inject Local ejb-ref
name=my.package.BeanConsumer/beanlocal,
Local 3.x interface =my.package.MyLocalBean,
ejb-link=null,
lookup=java:global/myfirstear/myejbs/MyLocalBeanImpl,
mappedName=,jndi-name=,refType=Session
into class my.package.BeanConsumer:
Lookup failed for 'java:comp/env/my.package.BeanConsumer/beanlocal'
in SerialContext
[myEnv={java.naming.factory.initial=
com.sun.enterprise.naming.impl.SerialInitContextFactory,
java.naming.factory.state=
com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl,
java.naming.factory.url.pkgs=
com.sun.enterprise.naming}
- Die "Lokale" im "Local EJB" bedeutet "lokale, um Ihre Anwendung". Entweder verschmelzen die Ohren oder machen Sie es eine remote-EJB.
- In dem Buch "EJB3 Developer Guide", sagt: Beachten Sie, dass wir das Präfix der definition der Schnittstelle mit der @Remote-annotation. Dies zeigt der EJB-container die bean aufgerufen werden können von einem remote-client. Per Fernbedienung, meinen wir, dass ein client, der sich nicht in der gleichen Java Virtual Machine (JVM) wie der container. Die gute Nachricht ist, dass können wir verzichten JNDI insgesamt, wenn der client läuft aus in einem application client container (ACC).
- Aktivieren Sie eine der folgenden Methoden, um Ihr problem zu lösen: stackoverflow.com/questions/13512028/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es möglich, zu injizieren einer lokalen EJB in einer anderen EJB in der gleichen JVM aber verschiedene Ohr.
Das problem ist, dass Sie nicht verlassen sich auf den Namen der bean mehr als Sie brauchen, um zu sagen, die Verbraucher bean-die komplette JNDI-Namen. Sie finden diesen Namen in die server-logs, die bei der Bereitstellung; der Augenblick der Bohne gebunden ist, um den JNDI-Verzeichnis die server zeigt, dass es in den Protokollen.