EJB remote invokation with Apache geronimo

Discussions

EJB programming & troubleshooting: EJB remote invokation with Apache geronimo

  1. EJB remote invokation with Apache geronimo (5 messages)

    Hi,

    I'm trying to connect a standalone java client application to an EJB in Apache Geronimo, but with no success so far.

    It's a starting project so I can learn something about EJB and remote invocation, and ... well, I'll put some info and hope someone can put some light on the matter.

    My Geronimo has the following ports, which are displayed on console, when starting up:

      Listening on Ports:
           0 0.0.0.0   Derby Connector
          80 0.0.0.0   Tomcat Connector HTTP BIO HTTP
        1099 0.0.0.0   RMI Naming
        1150 127.0.0.1 CORBA Naming Service
        2001 127.0.0.1 OpenEJB ORB Adapter
        4201 0.0.0.0   OpenEJB Daemon
        6882 127.0.0.1 OpenEJB ORB Adapter
        8009 0.0.0.0   Tomcat Connector AJP AJP
        8443 0.0.0.0   Tomcat Connector HTTPS BIO HTTPS
        9999 0.0.0.0   JMX Remoting Connector
       61613 0.0.0.0   ActiveMQ Transport Connector
       61616 0.0.0.0   ActiveMQ Transport Connector

    I'm working with Apache Geronimo 2.1.2, in a windows system, installed locally.

    My EJB3 has the following definition:

    @Stateful(name="test-bean", mappedName="test-bean-map")
    public class TestBean implements TestLocal, TestRemote {

        public String hello(String user) {
            return "Hello " + user + ", welcome to this EJB!";
        }

        public List getList(String user) {
            ...
        }

    }

    And the interfaces, which are part of the EJB client JAR:

    @Remote
    public interface TestRemote {

        public String hello(String user);

    }

    @Local
    public interface TestLocal {

        public List getList(String user);

    }

    The EAR has the EJB and a WAR module that successfully injects TestLocal and uses it.

    Now I've started a Java project from scratch, and inside a runnable class main method I do something like:

            String hostName = "localhost";
            String port = "1150";

            Properties props = new Properties();

            props.setProperty("java.naming.factory.initial", "org.openejb.client.RemoteInitialContextFactory");
            props.setProperty("java.naming.provider.url", hostName+":"+port);
    //        props.setProperty("java.naming.security.principal", "username");
    //        props.setProperty("java.naming.security.credentials", "passwd");

            Context ic = null;
            try {
                ic = new InitialContext(props);

                // java:comp/env/
                // @Stateful(name="test-bean", mappedName="test-bean-map")

                TestRemote testBean = (TestRemote) PortableRemoteObject.narrow(
                        ic.lookup("test-bean"),
                        TestRemote.class
                        );

                String result = testBean.hello( "peter" );
                log( result );

            } catch(Throwable ex) {
                ex.printStackTrace();
            } finally {
                if( ic!=null ) {
                    ic.close();
                }
            }

    The result:

    java.lang.RuntimeException: Invalid response from server: -1
        at org.apache.openejb.client.JNDIContext.lookup(JNDIContext.java:277)
        at javax.naming.InitialContext.lookup(InitialContext.java:392)


    I've tried using ports 1099 and 1150, with the same result. What port should I use? The one defined for CORBA Naming Service?

    So what am I missing here?

    In apache geronimo, where am I suppose to check the jndi name configured? I can't seem to find it ... although it works on the webapp that goes with the EJB (on the same EAR).


    Thanks

    Threaded Messages (5)

  2. You want this port:

      4201 0.0.0.0   OpenEJB Daemon

     

     

     

  3. Port 4201 - no success[ Go to top ]

    You want this port:

      4201 0.0.0.0   OpenEJB Daemon

     

     

     

    Hi,

     

    Thanks for the reply.

     

    I've tried with IP localhost and 127.0.0.1, with port 4201, still I receive an exception:

     

    java.lang.RuntimeException: Invalid response from server: -1
        at org.apache.openejb.client.JNDIContext.lookup(JNDIContext.java:277)
        at javax.naming.InitialContext.lookup(InitialContext.java:392)

     

    I've deployed the EAR to Geronimo, without any ejb descriptor and no geronimo plan descriptor. The EJB uses annotations. But the webapp uses the injected EJB dependency, so I assume it is properly configured.

     

    Also, can anyone tell me where I should look for the available EJBs? In JBoss I can check a tree of JNDI entries, and the EJB nammings can be found there, but in Geronimo I cannot find this EJB name ... I searched in console->Debug Views (JMX and JNDI) they both present a tree, but I didn't find the EJB entry that was deployed.

     

    Thanks

  4. Port 4201 - no success[ Go to top ]

    You want this port:

      4201 0.0.0.0   OpenEJB Daemon

     

     

     

    Hi,

     

    Thanks for the reply.

     

    I've tried with IP localhost and 127.0.0.1, with port 4201, still I receive an exception:

     

    java.lang.RuntimeException: Invalid response from server: -1
        at org.apache.openejb.client.JNDIContext.lookup(JNDIContext.java:277)
        at javax.naming.InitialContext.lookup(InitialContext.java:392)

     

    I've deployed the EAR to Geronimo, without any ejb descriptor and no geronimo plan descriptor. The EJB uses annotations. But the webapp uses the injected EJB dependency, so I assume it is properly configured.

     

    Also, can anyone tell me where I should look for the available EJBs? In JBoss I can check a tree of JNDI entries, and the EJB nammings can be found there, but in Geronimo I cannot find this EJB name ... I searched in console->Debug Views (JMX and JNDI) they both present a tree, but I didn't find the EJB entry that was deployed.

     

    Thanks

  5. Console exception[ Go to top ]

    On the server console, I'm getting the following error:

     

    15:55:13,406 ERROR [remote] "null  OEJ/0.0" FAIL "Unexpected error - For input string: "/""
    java.lang.NumberFormatException: For input string: "/"
            at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
            at java.lang.Integer.parseInt(Integer.java:449)
            at java.lang.Integer.parseInt(Integer.java:499)
            at org.apache.openejb.client.ProtocolMetaData.init(ProtocolMetaData.java:56)
            at org.apache.openejb.client.ProtocolMetaData.readExternal(ProtocolMetaData.java:92)
            at org.apache.openejb.server.ejbd.EjbDaemon.service(EjbDaemon.java:103)
            at org.apache.openejb.server.ejbd.EjbDaemon.service(EjbDaemon.java:84)
            at org.apache.openejb.server.ejbd.EjbServer.service(EjbServer.java:60)
            at org.apache.openejb.server.ServicePool$2.run(ServicePool.java:78)
            at org.apache.openejb.server.ServicePool$3.run(ServicePool.java:101)
            at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
            at java.lang.Thread.run(Thread.java:619)

     

    Looks like an incorrect setting, any tip would be appreciated.

     

    Thanks

  6. EJB remote invokation with Apache geronimo[ Go to top ]

    Might result from wrong version of openejb-client.jar on the client side. (The same problem was resolved for me by replacing 3.1.4 by 3.0.2 from the server)