Buen día! Estoy recién llegado en el JavaEE 6. Traté de crear un proyecto comenzó con el uso de la siguiente tutorial: Crear y Ejecutar una Aplicación de Cliente en el Servidor GlassFish. He creado cuatro proyectos paso a paso: JavaSE lib para almacenar un EJB Remoto Interfaz de un Módulo EJB y de otra como ther está descrito en el tutorial.

Mi plataforma:

  • De IDENTIFICACIÓN del distribuidor: Ubuntu Descripción: Ubuntu 10.10 Lanzamiento: 10.10
    Nombre en clave: maverick
  • jdk1.6.0_26
  • Netbean7.2(Build 201207171143)
  • Servidor GlassFish 3+

Mi interfaz remota

    package ejb.started;
    //   
    import javax.ejb.Remote;
    //
    @Remote
    public interface StartedSessionBeanRemote {

        String getHelloWorld();

    }

Su aplicación:

package ejb.started;
//
import javax.ejb.Stateless;
//
@Stateless(name="StartedSessionBeanRemote")
public class StartedSessionBean implements StartedSessionBeanRemote {

    @Override
    public String getHelloWorld() {
       return ("Hello world, EJB!");
    }

}

Y el código de cliente:

package startedentappclient;
//
import ejb.started.StartedSessionBeanRemote;
import javax.ejb.EJB;
//
public class AppClientMain {
    @EJB
    private static StartedSessionBeanRemote startedSessionBean;
    public static void main(String[] args) {
        System.err.println("EJB: "+startedSessionBean.getHelloWorld());
    }
}

Cuando intento ejecutar el Cliente Remoto proj, recibo el siguiente resultado:

ant -f /home/ilya/Workspace/git/workspace/StartedEntAppClient -DforceRedeploy=false run
init:
EJBRemoteInterface.init:
Deleting: /home/ilya/Workspace/git/workspace/EJBRemoteInterface/build/built-jar.properties
EJBRemoteInterface.deps-jar:
Updating property file: /home/ilya/Workspace/git/workspace/EJBRemoteInterface/build/built-jar.properties
EJBRemoteInterface.compile:
EJBRemoteInterface.jar:
deps-jar:
compile:
library-inclusion-in-archive:
dist:
pre-run-deploy:
Redeploying /home/ilya/Workspace/git/workspace/StartedEntAppClient/dist/StartedEntAppClient.jar
Initializing...
post-run-deploy:
run-deploy:
Copying 1 file to /home/ilya/Workspace/git/workspace/StartedEntAppClient/dist
Copying 2 files to /home/ilya/Workspace/git/workspace/StartedEntAppClient/dist/StartedEntAppClientClient
Warning: /home/ilya/Workspace/git/workspace/StartedEntAppClient/dist/gfdeploy/StartedEntAppClient does not exist.
com.sun.enterprise.container.common.spi.util.InjectionException: Exception attempting to inject Remote ejb-ref name=startedentappclient.AppClientMain/startedSessionBean,Remote 3.x interface =ejb.started.StartedSessionBeanRemote,ejb-link=null,lookup=,mappedName=,jndi-name=ejb.started.StartedSessionBeanRemote,refType=Session into class startedentappclient.AppClientMain: Lookup failed for 'java:comp/env/startedentappclient.AppClientMain/startedSessionBean' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl}
at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:703)
at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:470)
at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.injectClass(InjectionManagerImpl.java:213)
at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.injectClass(InjectionManagerImpl.java:205)
at org.glassfish.appclient.client.acc.AppClientContainer$ClientMainClassSetting.getClientMainClass(AppClientContainer.java:625)
at org.glassfish.appclient.client.acc.AppClientContainer.getMainMethod(AppClientContainer.java:517)
at org.glassfish.appclient.client.acc.AppClientContainer.completePreparation(AppClientContainer.java:411)
at org.glassfish.appclient.client.acc.AppClientContainer.prepare(AppClientContainer.java:319)
at org.glassfish.appclient.client.AppClientFacade.prepareACC(AppClientFacade.java:278)
at org.glassfish.appclient.client.acc.agent.AppClientContainerAgent.premain(AppClientContainerAgent.java:82)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:323)
at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:338)
Caused by: javax.naming.NamingException: Lookup failed for 'java:comp/env/startedentappclient.AppClientMain/startedSessionBean' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is javax.naming.NamingException: Exception resolving Ejb for 'Remote ejb-ref name=startedentappclient.AppClientMain/startedSessionBean,Remote 3.x interface =ejb.started.StartedSessionBeanRemote,ejb-link=null,lookup=,mappedName=,jndi-name=ejb.started.StartedSessionBeanRemote,refType=Session' .  Actual (possibly internal) Remote JNDI name used for lookup is 'ejb.started.StartedSessionBeanRemote#ejb.started.StartedSessionBeanRemote' [Root exception is javax.naming.NamingException: Lookup failed for 'ejb.started.StartedSessionBeanRemote#ejb.started.StartedSessionBeanRemote' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is javax.naming.NameNotFoundException: ejb.started.StartedSessionBeanRemote#ejb.started.StartedSessionBeanRemote not found]]]
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:518)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:599)
... 15 more
Caused by: javax.naming.NamingException: Exception resolving Ejb for 'Remote ejb-ref name=startedentappclient.AppClientMain/startedSessionBean,Remote 3.x interface =ejb.started.StartedSessionBeanRemote,ejb-link=null,lookup=,mappedName=,jndi-name=ejb.started.StartedSessionBeanRemote,refType=Session' .  Actual (possibly internal) Remote JNDI name used for lookup is 'ejb.started.StartedSessionBeanRemote#ejb.started.StartedSessionBeanRemote' [Root exception is javax.naming.NamingException: Lookup failed for 'ejb.started.StartedSessionBeanRemote#ejb.started.StartedSessionBeanRemote' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is javax.naming.NameNotFoundException: ejb.started.StartedSessionBeanRemote#ejb.started.StartedSessionBeanRemote not found]]
at com.sun.ejb.EjbNamingReferenceManagerImpl.resolveEjbReference(EjbNamingReferenceManagerImpl.java:191)
at com.sun.enterprise.container.common.impl.ComponentEnvManagerImpl$EjbReferenceProxy.create(ComponentEnvManagerImpl.java:1109)
at com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:776)
at com.sun.enterprise.naming.impl.GlassfishNamingManagerImpl.lookup(GlassfishNamingManagerImpl.java:744)
at com.sun.enterprise.naming.impl.JavaURLContext.lookup(JavaURLContext.java:169)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:498)
... 18 more
Caused by: javax.naming.NamingException: Lookup failed for 'ejb.started.StartedSessionBeanRemote#ejb.started.StartedSessionBeanRemote' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is javax.naming.NameNotFoundException: ejb.started.StartedSessionBeanRemote#ejb.started.StartedSessionBeanRemote not found]
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:518)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at com.sun.ejb.EjbNamingReferenceManagerImpl.resolveEjbReference(EjbNamingReferenceManagerImpl.java:186)
... 23 more
Caused by: javax.naming.NameNotFoundException: ejb.started.StartedSessionBeanRemote#ejb.started.StartedSessionBeanRemote not found
at com.sun.enterprise.naming.impl.TransientContext.doLookup(TransientContext.java:248)
at com.sun.enterprise.naming.impl.TransientContext.lookup(TransientContext.java:215)
at com.sun.enterprise.naming.impl.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:77)
at com.sun.enterprise.naming.impl.RemoteSerialContextProviderImpl.lookup(RemoteSerialContextProviderImpl.java:109)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie.dispatchToMethod(ReflectiveTie.java:144)
at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:174)
at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:528)
at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:199)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1624)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1486)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:990)
at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:214)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:742)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:539)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2324)
at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:497)
at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:540)
Java Result: 1
run:
BUILD SUCCESSFUL (total time: 11 seconds)

Yo no puedo asumir lo que es ese problema. He construido mismos proyectos en mi segunda PC y todo funcione correctamente. Que uno tiene la misma plataforma de software.

He encontrado que el tutorial de fallas. Sugieren que para hacer una Aplicación de Empresa. Si, por el contrario, sólo un módulo EJB debe funcionar según lo previsto. Ver: stackoverflow.com/questions/25828542/…

OriginalEl autor ilya8891 | 2012-08-31

2 Comentarios

  1. 4

    Cuando escribe:

    @EJB
    private static StartedSessionBeanRemote startedSessionBean;

    su cliente intenta realizar una inyección de que EJB. En el caso de que, obviamente, no fue un éxito:

    com.sun.enterprise.container.common.spi.util.InjectionException: Exception attempting to inject...

    Usted puede ayudarse a sí mismo mediante el uso de mappedName construir. La reescritura de estas líneas de su código, de la siguiente manera:

    @Stateless(mappedName="ejb/StartedSessionBeanRemote")
    public class StartedSessionBean implements StartedSessionBeanRemote {

    y

    @EJB(mappedName="ejb/StartedSessionBeanRemote")
    private static StartedSessionBeanRemote startedSessionBean;

    Por último, asegúrese de que su EJB se implementa antes de que el cliente, ya que sin el cliente EJB puede inyectar 🙂

    Sí, me olvidé de implementar la aplicación cliente y de la empresa, aplicación). He corregido y todo comenzó a funcionar. Gracias!
    Pero es que ahora trabajan para mí. Yar….. He probado muchos ejemplos, pero no la inyección de Remote Ejb. Me fui a través de netbeans.org/kb/docs/javaee/entappclient.html#Exercise_32 ejemplo

    OriginalEl autor Miljen Mikic

  2. 4

    Yo creo que usted no puede tener acceso a un EJB el uso de la @EJB anotación de un método principal debido a que el método no es gestionado por el servidor. En su lugar, debe utilizar JNDI.

    ¿Cómo puedo acceder a un componente EJB Remoto de un stand-alone cliente en java?

    Muchas gracias. Como escribí, estoy incomer. Así que voy a ser thanksworthy por toda la ayuda material relacionado con JavaEE y JavaBeans en el caso particular.
    Eso es cierto en el caso de los independientes de aplicaciones Java, pero no en el caso de la Empresa Cliente de la Aplicación, como se mencionó en ilya8891 pregunta. Normalmente se puede utilizar la inyección de aquí.
    link muerto……
    Verificar este. En el extremo usted necesita para recuperar el EJB usando JNDI.
    Que yo sepa, si usted está tratando de invocar a un EJB de una aplicación independiente, es decir, un main método, ya que no hay contenedor EJB gestión de los granos, la única forma que conozco es el uso de JNDI. OC4J parece ser un contenedor que puede administrar EJB frijoles, así que supongo que por el uso que usted debería ser capaz de inyectar los frijoles con el @EJB anotación, aunque no estoy familiarizado con él. En la final, el uso de anotaciones necesita un contenedor EJB (que todos Java EE compatible con servidores), de lo contrario debe recuperar mediante otros mecanismos, como JNDI.

    OriginalEl autor carcaret

Dejar respuesta

Please enter your comment!
Please enter your name here