2 Replies Latest reply on Aug 26, 2008 10:44 AM by 843830

    error while running EJB from java client on JBOSS

    843830
      Hi

      As i am new to EJB i have created a helloworld application in ejb which is working fine when i try to call it from servlet but when i try to invoke the same ejb from java client (i.e from diff jvm) on jboss i got the following error:

      javax.naming.CommunicationException: Could not obtain connection to any of these urls: localhost:1099 and discovery failed with error: javax.naming.CommunicationException: Receive timed out [Root exception is java.net.SocketTimeoutException: Receive timed out] [Root exception is javax.naming.CommunicationException: Failed to connect to server localhost:1099 [Root exception is javax.naming.ServiceUnavailableException: Failed to connect to server localhost:1099 [Root exception is java.net.ConnectException: Connection refused]]]
           at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1399)
           at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:579)
           at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:572)
           at javax.naming.InitialContext.lookup(InitialContext.java:351)
           at com.gl.TestClient.main(TestClient.java:39)
      Caused by: javax.naming.CommunicationException: Failed to connect to server localhost:1099 [Root exception is javax.naming.ServiceUnavailableException: Failed to connect to server localhost:1099 [Root exception is java.net.ConnectException: Connection refused]]
           at org.jnp.interfaces.NamingContext.getServer(NamingContext.java:254)
           at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1370)
           ... 4 more
      Caused by: javax.naming.ServiceUnavailableException: Failed to connect to server localhost:1099 [Root exception is java.net.ConnectException: Connection refused]
           at org.jnp.interfaces.NamingContext.getServer(NamingContext.java:228)
           ... 5 more
      Caused by: java.net.ConnectException: Connection refused
           at java.net.PlainSocketImpl.socketConnect(Native Method)
           at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
           at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
           at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
           at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
           at java.net.Socket.connect(Socket.java:519)
           at java.net.Socket.connect(Socket.java:469)
           at java.net.Socket.<init>(Socket.java:366)
           at java.net.Socket.<init>(Socket.java:266)
           at org.jnp.interfaces.TimedSocketFactory.createSocket(TimedSocketFactory.java:69)
           at org.jnp.interfaces.TimedSocketFactory.createSocket(TimedSocketFactory.java:62)
           at org.jnp.interfaces.NamingContext.getServer(NamingContext.java:224)
           ... 5 more


      Following is my code:

      Home Interface:

      package com.gl;

      import javax.ejb.CreateException;

      public interface testHome extends EJBHome {
           String JNDI_NAME = "testBean";
           public     test create()
           throws java.rmi.RemoteException,CreateException;
      }

      Remote Interface:

      package com.gl;

      import java.rmi.RemoteException;

      import javax.ejb.EJBObject;

      public interface test extends EJBObject {
           public String welcomeMessage() throws RemoteException;
      }


      Bean:

      package com.gl;

      import java.rmi.RemoteException;

      import javax.ejb.EJBException;
      import javax.ejb.SessionBean;
      import javax.ejb.SessionContext;

      public class testbean implements SessionBean {

           public void ejbActivate() throws EJBException, RemoteException {
                // TODO Auto-generated method stub

           }

           public void ejbPassivate() throws EJBException, RemoteException {
                // TODO Auto-generated method stub

           }

           public void ejbRemove() throws EJBException, RemoteException {
                // TODO Auto-generated method stub

           }

           public void setSessionContext(SessionContext arg0) throws EJBException,
                     RemoteException {
                // TODO Auto-generated method stub

           }
           
           public void ejbCreate(){}
           
           public String welcomeMessage(){
                return "Welcome to the World of EJB";
           }

      }


      ejb-jar.xml:

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">

      <ejb-jar>
      <enterprise-beans>
      <session>
      <ejb-name>testBean</ejb-name>
      <home>com.gl.testHome</home>
      <remote>com.gl.test</remote>
      <ejb-class>com.gl.testbean</ejb-class>
      <session-type>Stateless</session-type>
      <transaction-type>Container</transaction-type>
      </session>
      </enterprise-beans>
      </ejb-jar>


      jboss.xml:

      <?xml version='1.0' ?>
      <!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 3.2//EN" "http://www.jboss.org/j2ee/dtd/jboss_3_2.dtd">
      <jboss>
      <enterprise-beans>
      <entity>
      <ejb-name>testBean</ejb-name>
      <jndi-name>testBean</jndi-name>
      </entity>
      </enterprise-beans>
      </jboss>


      Client code:

      package com.gl;

      import java.util.Properties;

      import javax.naming.Context;
      import javax.naming.InitialContext;
      import javax.rmi.PortableRemoteObject;

      public class TestClient {
           
           public static void main(String[] args) throws Exception{
           
                     try{
                     /*     Properties props=new Properties();
                          props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
                          props.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
                          props.put(Context.PROVIDER_URL, "jnp://localhost:1099");
                     */     
                          
                     Properties props = new Properties();
      props.put(Context.INITIAL_CONTEXT_FACTORY,
      "org.jnp.interfaces.NamingContextFactory");
      props.put(Context.PROVIDER_URL, "localhost:1099");

                          
                          System.out.println("Properties ok");

                          
                          //env.setProperty(Context.INITIAL_CONTEXT_FACTORY,"org.jboss.naming.HttpNamingContextFactory");
                          //env.put(Context.PROVIDER_URL,"http://localhost:8080");
                          //env.put(Context.SECURITY_PRINCIPAL, "");
                          //env.put(Context.SECURITY_CREDENTIALS, "");
                          
                          
                          
                          Context ctx=new InitialContext(props);
                          System.out.println("context ok");
                          //testHome home = (testHome)ctx.lookup("testBean");
                          Object obj = ctx.lookup ("testBean");
                          System.out.println("ojb = " + obj);
                          
                          testHome ejbHome = (testHome)PortableRemoteObject.narrow(obj,testHome.class);
                     test ejbObject = ejbHome.create();
                     String message = ejbObject.welcomeMessage();
                          System.out.println("home ok");

                          
                          System.out.println("remote ok");


                          System.out.println(message);



                          }

                          catch(Exception e){e.printStackTrace();}

                          }

           }




      I am able to successfully deployed my ejb on JBOSS but i m getting above error when i am trying to invoke ejb from java client.

      kindly suggest me something to solve this issue.

      Regards
      Gagan

      Edited by: Gagan2914 on Aug 26, 2008 3:28 AM