1 2 Previous Next 26 Replies Latest reply: May 21, 2012 9:56 AM by Justin Bertram RSS

Remote JNDI Lookup with JBOSS AS -7.1.0.Beta1

Sueleyman Vurucu Expert

Hi,

 

I try to migrate my testapp which works under AS 6.1.0 Final to AS -7.1.0.Beta1. I see here https://docs.jboss.org/author/display/AS71/EJB+invocations+from+a+remote+client+using+JNDI that the lookup is basically changed.

 

I do the steps below:

 

1. Create a new runtime environment to AS -7.1.0.Beta1

2. Change the rerezenes of the projects to this new environment

 

The second problem is when I start AS -7.1.0.Beta1 with JBoss tools from eclipse I get an a lot of errors.

 

15:28:06,861 ERROR [org.jboss.remoting.remote] (Remoting "ws048059:MANAGEMENT" read-1) JBREM000200: Remote connection failed: java.io.IOException: JBREM000201: Received invalid message on Remoting connection 00b9e9a3 to /127.0.0.1:2593

 

The reference of the connection and the port are changed for every error message.

 

I attched my testproject.

 

My environment:

Win XP 32-Bit SP3

Eclispe 3.7

JBoss Tools

Unfortunately, no maven

  • 1. Re: Remote JNDI Lookup with JBOSS AS -7.1.0.Beta1
    Sueleyman Vurucu Expert

    I forgot to say,

     

    everytime if i try to make a lookup I get this exception:

     

    2011-11-23 15:31:41,113 ERROR SendMessageJNDI$ServiceLokup: Error:

    javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial

        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)

        at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)

        at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)

        at javax.naming.InitialContext.lookup(InitialContext.java:392)

        at SendMessageJNDI$ServiceLokup.doLookup(SendMessageJNDI.java:118)

        at SendMessageJNDI.initConnection(SendMessageJNDI.java:51)

        at SendMessageJNDI.main(SendMessageJNDI.java:35)

  • 2. Re: Remote JNDI Lookup with JBOSS AS -7.1.0.Beta1
    jaikiran pai Master

    Sueleyman Vurucu wrote:

     

     

    The second problem is when I start AS -7.1.0.Beta1 with JBoss tools from eclipse I get an a lot of errors.

     

    15:28:06,861 ERROR [org.jboss.remoting.remote] (Remoting "ws048059:MANAGEMENT" read-1) JBREM000200: Remote connection failed: java.io.IOException: JBREM000201: Received invalid message on Remoting connection 00b9e9a3 to /127.0.0.1:2593

     

    It probably is because of a mismatch in the client side remoting, sasl library versions with the server side ones. When do you see those errors?

     

     

    everytime if i try to make a lookup I get this exception:

     

    2011-11-23 15:31:41,113 ERROR SendMessageJNDI$ServiceLokup: Error:

    javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial

        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)

        at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)

        at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)

        at javax.naming.InitialContext.lookup(InitialContext.java:392)

        at SendMessageJNDI$ServiceLokup.doLookup(SendMessageJNDI.java:118)

        at SendMessageJNDI.initConnection(SendMessageJNDI.java:51)

        at SendMessageJNDI.main(SendMessageJNDI.java:35)

    My guess is that you aren't using the ejb: namespace for the JNDI name or you haven't passed the Context.URL_PKG_PREFIXES (with org.jboss.ejb.client.naming as the value) to the intial context constructor.

  • 3. Re: Remote JNDI Lookup with JBOSS AS -7.1.0.Beta1
    Yann Le Moigne Newbie

    About

    2011-11-23 15:31:41,113 ERROR SendMessageJNDI$ServiceLokup: Error:

    javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial

        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)

        at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)

        at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)

        at javax.naming.InitialContext.lookup(InitialContext.java:392)

        at SendMessageJNDI$ServiceLokup.doLookup(SendMessageJNDI.java:118)

        at SendMessageJNDI.initConnection(SendMessageJNDI.java:51)

        at SendMessageJNDI.main(SendMessageJNDI.java:35)

    Does your url start with "java:" ? I was having the same error until I replace it to "ejb:"

     

    I have a similar problem now when I call an EJB, on the server side, I have :

    JBREM000200: Remote connection failed: java.io.IOException: JBREM000201: Received invalid message on Remoting connection 46f02f31 to /127.0.0.1:52771

     

    And on client side :

    INFO: JBoss Remoting version 3.2.0.CR2

    nov. 23, 2011 4:30:49 PM org.jboss.remoting3.remote.RemoteConnection handleException

    ERROR: JBREM000200: Remote connection failed: java.io.IOException: JBREM000202: Abrupt close on Remoting connection 4cac1566 to localhost/127.0.0.1:4447

    nov. 23, 2011 4:30:49 PM org.jboss.ejb.client.ConfigBasedEJBClientContextSelector createConnections

    ERROR: Could not create connection for connection named default

    java.lang.RuntimeException: java.io.IOException: JBREM000202: Abrupt close on Remoting connection 4cac1566 to localhost/127.0.0.1:4447

        at org.jboss.ejb.client.remoting.IoFutureHelper.get(IoFutureHelper.java:91)

        at org.jboss.ejb.client.ConfigBasedEJBClientContextSelector.createConnection(ConfigBasedEJBClientContextSelector.java:276)

     

    If someone has a solution...

  • 4. Re: Remote JNDI Lookup with JBOSS AS -7.1.0.Beta1
    Yann Le Moigne Newbie

    Problem solved on my side : jar version mismatch

     

    jboss-ejb-client on maven => Remoting version 3.2.0.CR2

     

    jboss 7.1 Beta1 use 3.2.0.CR3.

     

    Force version CR3 on client solved the problem.

  • 5. Re: Remote JNDI Lookup with JBOSS AS -7.1.0.Beta1
    jaikiran pai Master

    Yeah, thought so. By the way, I think this won't be an issue going forward since I believe those remoting and sasl jars are expected to maintain backward compatibility. I'll check though.

     

     

    Yann Le Moigne wrote:

     

    jboss-ejb-client on maven => Remoting version 3.2.0.CR2

     

    jboss 7.1 Beta1 use 3.2.0.CR3.

     

    Force version CR3 on client solved the problem.

    That's correct. Also make sure your sasl jar version on the client side is 1.0.0.Beta6 since that jar was upgraded on the server side too.

  • 6. Re: Remote JNDI Lookup with JBOSS AS -7.1.0.Beta1
    jaikiran pai Master

    Yann Le Moigne wrote:

     

    And on client side :

    INFO: JBoss Remoting version 3.2.0.CR2

    nov. 23, 2011 4:30:49 PM org.jboss.remoting3.remote.RemoteConnection handleException

    ERROR: JBREM000200: Remote connection failed: java.io.IOException: JBREM000202: Abrupt close on Remoting connection 4cac1566 to localhost/127.0.0.1:4447

    nov. 23, 2011 4:30:49 PM org.jboss.ejb.client.ConfigBasedEJBClientContextSelector createConnections

    ERROR: Could not create connection for connection named default

    java.lang.RuntimeException: java.io.IOException: JBREM000202: Abrupt close on Remoting connection 4cac1566 to localhost/127.0.0.1:4447

        at org.jboss.ejb.client.remoting.IoFutureHelper.get(IoFutureHelper.java:91)

        at org.jboss.ejb.client.ConfigBasedEJBClientContextSelector.createConnection(ConfigBasedEJBClientContextSelector.java:276)

     

    If someone has a solution...

    Yeah, upgrade the sasl library on the client side to 1.0.0.Beta6.

  • 7. Re: Remote JNDI Lookup with JBOSS AS -7.1.0.Beta1
    jaikiran pai Master

    Here's the pom.xml which I use for that quickstart example of the client https://github.com/jaikiran/quickstart/blob/master/ejb-remote/client/pom.xml

  • 8. Re: Remote JNDI Lookup with JBOSS AS -7.1.0.Beta1
    Sueleyman Vurucu Expert

    Hi  jaikiran ,

    I see in your pom.xml 7.0.2-SNAPSHOT as parent decleration  and I#m confused??

     

    For recontruction my advance,

     

    1. Download JBoss AS from http://www.jboss.org/jbossas/downloads/

    2. Configure this in Eclipse as Serverruntime (Error occures if I want startr the server ). When I start the server outside of Eclipse then is everything fine. I assume that the error occurs in combination with jboss tools.

    3. I create a client project in Eclipse an set the serverruntime as dependency. ( I don't use maven ). If I try to make a lookup then I get the error javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet


     


    I worked so with JBoss 6 and JBoss 5.


  • 9. Re: Remote JNDI Lookup with JBOSS AS -7.1.0.Beta1
    Sueleyman Vurucu Expert

    I looked for the library it says

    20:34:19,859 INFO  [org.jboss.remoting] JBoss Remoting version 3.2.0.CR3

  • 10. Re: Remote JNDI Lookup with JBOSS AS -7.1.0.Beta1
    Sueleyman Vurucu Expert

    jaikiran wrote:

     

    My guess is that you aren't using the ejb: namespace for the JNDI name or you haven't passed the Context.URL_PKG_PREFIXES (with org.jboss.ejb.client.naming as the value) to the intial context constructor.

    I think thta's true but  can't locate the error. I guess there a lib that fail in my classpath. I try di the lookup in this way.

     

    import java.io.File;

    import java.util.Hashtable;

    import java.util.Properties;

     

    import javax.naming.Context;

    import javax.naming.InitialContext;

    import javax.naming.NamingException;

     

    import org.apache.log4j.Logger;

     

    public class MainTest {

     

      public static void main(String[] args){

        new ServiceLokup<Object>().doLookup("test");

        new ServiceLokup<Object>().doLookupOld("test");

      }

     

      public static class ServiceLokup<T> {

        private Logger       lLog  = Logger.getLogger(ServiceLokup.class);

        private final String lIP   = "localhost";

        private final String lPort = "1099";

     

        /**

         * The new JBoss 7.1 way to do remote lookup ??

         */

        public T doLookup(String pServiceName){

          final Hashtable<String, String> jndiProperties = new Hashtable<String, String>();

          File lFile = new File("jboss-ejb-client.properties");

          lLog.info(lFile.getAbsolutePath());

          jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");

          try {

            final Context context = new InitialContext(jndiProperties);

            context.lookup(pServiceName);

          } catch (NamingException e) {

            lLog.error("Error: ", e);

          }

          return null;

     

        }

     

        /**

         * Works perfect with JBoss 5 or 6 but failed on JBoss 7.1

         */

        @SuppressWarnings("unchecked")

        public T doLookupOld(String pServiceName){

          InitialContext context;

          Properties properties = new Properties();

          properties.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");

          properties.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");

          properties.put("java.naming.provider.url", "jnp://" + lIP + ":" + lPort);

          try {

            context = new InitialContext(properties);

            return (T)context.lookup(pServiceName);

          } catch (NamingException e) {

            lLog.error("Error: ", e);

          }

          return null;

        }

      }

    }

     

    Furthermore I have a jboss-ejb-client.properties in my sorce folder bind the libs in my classpath from JBOSS AS 7.1 like jaikiran describes in https://docs.jboss.org/author/display/AS71/EJB+invocations+from+a+remote+client+using+JNDI

  • 11. Re: Remote JNDI Lookup with JBOSS AS -7.1.0.Beta1
    Sueleyman Vurucu Expert

    And here is the Full stacktrace :

    011-11-24 08:42:32,626 INFO  MainTest$ServiceLokup: F:\IDE\WORKSPACEs\JAVAEE_TESTS_JB7\CONTROLLER_TEST_CLIENT\jboss-ejb-client.properties

    2011-11-24 08:42:32,626 ERROR MainTest$ServiceLokup: Error:

    javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial

        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)

        at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)

        at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)

        at javax.naming.InitialContext.lookup(InitialContext.java:392)

        at MainTest$ServiceLokup.doLookup(MainTest.java:35)

        at MainTest.main(MainTest.java:14)

    2011-11-24 08:42:32,642 ERROR MainTest$ServiceLokup: Error:

    javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory [Root exception is java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory]

        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:657)

        at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)

        at javax.naming.InitialContext.init(InitialContext.java:223)

        at javax.naming.InitialContext.<init>(InitialContext.java:197)

        at MainTest$ServiceLokup.doLookupOld(MainTest.java:51)

        at MainTest.main(MainTest.java:15)

    Caused by: java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory

        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)

        at java.security.AccessController.doPrivileged(Native Method)

        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)

        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)

        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

        at java.lang.Class.forName0(Native Method)

        at java.lang.Class.forName(Class.java:247)

        at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:46)

        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:654)

        ... 5 more

  • 12. Re: Remote JNDI Lookup with JBOSS AS -7.1.0.Beta1
    Riccardo Pasquini Novice

    Hi Sueleyman,

     

    i succeded in going over this problem fixing the pom:

     

    i've added the dependency import:

     

    <dependencyManagement>
          <dependencies>
             <dependency>
                <groupId>org.jboss.spec</groupId>
                <artifactId>jboss-javaee-web-6.0</artifactId>
                <version>2.0.0.Final</version>
                <type>pom</type>
                <scope>import</scope>
             </dependency>
          </dependencies>
       </dependencyManagement>
    
    

     

    with this element the jboss-ejb-client has been recovered and the initial factory jndi property were no more required

     

    EDIT:

    is this F:\IDE\WORKSPACEs\JAVAEE_TESTS_JB7\CONTROLLER_TEST_CLIENT\jboss-ejb-client.properties in your classpath? if your using maven (you are using a pom so i expect your are using maven), why don't you place that file in src/main/resources ?

     

    EDIT2:

    Unfortunately, no maven

    ops... mmm...

     

    EDIT3:

    This error indicates that you are looking up some object whose JNDI name doesn't start with ejb:

     

    What does your JNDI name look like?

     

  • 13. Re: Remote JNDI Lookup with JBOSS AS -7.1.0.Beta1
    jaikiran pai Master

    011-11-24 08:42:32,626 INFO  MainTest$ServiceLokup: F:\IDE\WORKSPACEs\JAVAEE_TESTS_JB7\CONTROLLER_TEST_CLIENT\jboss-ejb-client.properties

    2011-11-24 08:42:32,626 ERROR MainTest$ServiceLokup: Error:

    javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial

        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)

        at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)

        at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)

        at javax.naming.InitialContext.lookup(InitialContext.java:392)

        at MainTest$ServiceLokup.doLookup(MainTest.java:35)

        at MainTest.main(MainTest.java:14)

    This error indicates that you are looking up some object whose JNDI name doesn't start with ejb:

     

    What does your JNDI name look like?

  • 14. Re: Remote JNDI Lookup with JBOSS AS -7.1.0.Beta1
    Sueleyman Vurucu Expert

    jaikiran pai schrieb:

    This error indicates that you are looking up some object whose JNDI name doesn't start with ejb:

     

    What does your JNDI name look like?

    And how I can make a lookup for a non ejb resource like a jms topic  for example ??

     

    But is the same when I do a lookup for:

    context

                .lookup("ejb:/jboss-as-ejb-remote-app//CalculatorBean!org.jboss.as.quickstarts.ejb.remote.stateless.RemoteCalculator");

     

    I think my jboss-ejb-client.properties not found. Where shuold I place this for a non maven project ?

1 2 Previous Next