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/...
InformationsquelleAutor Kaltresian | 2011-11-20
Schreibe einen Kommentar