| Author |
error while running sample EJB client
|
bharat kumar
Greenhorn
Joined: Jul 16, 2003
Posts: 11
|
|
Hi, I am new to EJB, and trying to to run the sample EJB which returns the test message. I am using Sun application server as an EJB Server, at server side everything is o.k, i am able to deploy the EJB, but when i try to run the client i am getting the following errors Client Code : IntialConetext initContext = new InitialContext(); String jndiname = "java:comp/env/ejb/AdviceBean"; // "AdviceBean"; Object objref = initContext.lookup(jndiname); when i run the client i get the following exception : D:\projects\headfirst\advice>java -classpath . AdviceClient exception : javax.naming.NoInitialContextException: Need to specify class name in environment or system property: java.naming.factory.initial So i tried to add the context propeties like Hashtable env = new Hashtable(); env.putContext.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.cosnaming.CNCtxFactory"); env.put(Context.PROVIDER_URL, "http://localhost:3641"); IntialConetext initContext = new InitialContext(env); String jndiname = "java:comp/env/ejb/AdviceBean"; // "AdviceBean"; Object objref = initContext.lookup(jndiname); When i run like this i am getting this error : D:\projects\headfirst\advice>java -classpath . AdviceClient exception : javax.naming.ConfigurationException: http://localhost:3641 does not contain an IOR i think the error is due to jndi only, can anyone suggest me what is the problem. thanks in advance, Bharat
|
 |
David Harrigan
Ranch Hand
Joined: Sep 16, 2003
Posts: 43
|
|
Hi, Hmmm, the program doesn't look right to me to begin with. I'll list my observations, then you can decide what to do... 1. Getting the InitialContext. The way that I use, and what is used all over the place is: Context c = new InitialContext(); not InitialContext c = new InitialContext(); 2. The JNDI Name You seem to be using the special JNDI context that is only available to the bean, i.e., java:comp/env/ejb/AdviceBean Now, since your bean isn't trying to do a lookup on any other bean, I would recommend just using jndiname = "AdviceBean" in your client. 3. JARS Your client doesn't seem to be referencing the stubs that are generated by the deploy process. Do you generate the client side stubs? This is the option that is given to you on deployment (it is grey-ed out normally). e.g., javac -classpath $CLASSPATH:myclientjar.jar myclient.java and then to run java -classpath $CLASSPATH:myclientjar.jar myclient The myclientjar.jar contains the stubs generated by the deploy. Just a thought on those. -=david=-
|
 |
bharat kumar
Greenhorn
Joined: Jul 16, 2003
Posts: 11
|
|
Hi david, thanks for your reply, i am trying to run the first example given in Head First EJB book, I am using Sun Application Server 1.4 as server, when i run the first time the client i was getting this error exception : javax.naming.NoInitialContextException: Need to specify class name in environment or system property: java.naming.factory.initial so i tried with various options. Here is my client code : import java.rmi.*; import javax.rmi.*; import javax.naming.*; import javax.ejb.*; import headfirst.*; public class AdviceClient { public static void main(String h[]) { try { Context initContext = new InitialContext(); System.out.println("trying to look up EJB"); Object objref = initContext.lookup("AdviceBean"); System.out.println("look up is o.k "); AdviceHome adviceHome = (AdviceHome)PortableRemoteObject.narrow(objref,AdviceHome.class); System.out.println("Getting home object is o.k "); AdviceRemote adviceRemote = adviceHome.create(); System.out.println("Getting remote object is o.k "); String advice = adviceRemote.getAdvice(); System.out.println("Advice is "+advice); } catch (Exception h1) { System.out.println("Exception while running EJB "+h1.getMessage()); } } } The error i am getting is : D:\projects\headfirst\advice>javac -classpath .;$CLASSPATH:AdviceApplicationClie nt.jar AdviceClient.java D:\projects\headfirst\advice>java -classpath .;$CLASSPATH:AdviceApplicationClien t.jar AdviceClient Exception while running EJB Cannot instantiate class: org.jnp.interfaces.NamingC ontextFactory This is error i am getting, can u suggest what is going wrong, do i have add certain files to my classpath. After searching this error i added two files jnp-client.jar,jbossall-client.jar to my classpath and run the program again. i am getting timed out error. i am not sure where the JNDI is trying to lookup. D:\projects\headfirst\advice>javac -classpath %$CLASSPATH%;.;AdviceApplicationCl ient.jar AdviceClient.java D:\projects\headfirst\advice>java -classpath %$CLASSPATH%;.;AdviceApplicationCli ent.jar AdviceClient trying to look up EJB Exception while running EJB Receive timed out But if i deploy the same client program as web component ( as a JSP file ), i am able to run the client program and get the result. Thanks in advance, Bharat [ January 07, 2004: Message edited by: bharat kumar ]
|
 |
David Harrigan
Ranch Hand
Joined: Sep 16, 2003
Posts: 43
|
|
Hi, Just to be sure, %$CLASSPATH%; is an invalid classpath in Windows, can you remove the $ (which is a UNIX version of putting %% around the env variable). Can you echo out your classpath echo %CLASSPATH% And, you're using JBoss right? Didn't you say you are using Sun Application Server? Does that come with JBoss? The NamingContext error is usually a result of compiling and running in one Container whilst trying to use the Naming factories from another container (i.e., running in WebSphere, but using JBoss NamingContext factories to try and do the lookups...) -=david=-
|
 |
bharat kumar
Greenhorn
Joined: Jul 16, 2003
Posts: 11
|
|
Hi david, i have messed with sun application server and jboss, so i removed both of them and removed all the entries in classpath and start a new installtion of J2EE1.3 and Ant tool After installation i have the following path ANT_HOME = C:\ant J2EE_HOME = C:\j2sdkee1.3.1 JAVA_HOME = C:\j2sdk1.4.2 PATH = C:\j2sdkee1.3.1\bin;C:\ant\bin;.; i did not set any classpath option when i try to run the server with option j2ee -verbose , i get the following error. Earlier also when i was running the AdviceClient i was getting the same error, so installed JBoss and added the jnp-client.jar and jboss-clientall.jar to my classpath. C:\Documents and Settings\bharat>j2ee -verbose J2EE server listen port: 1050 Naming service started:1050 javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interf aces.NamingContextFactory [Root exception is java.lang.ClassNotFoundException: o rg.jnp.interfaces.NamingContextFactory] at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:6 52) at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:243 ) at javax.naming.InitialContext.init(InitialContext.java:219) at javax.naming.InitialContext.<init>(InitialContext.java:175) at com.sun.enterprise.naming.NamingManagerImpl.<init>(NamingManagerImpl. java:82) at com.sun.enterprise.server.J2EEServer.run(J2EEServer.java:240) at com.sun.enterprise.server.J2EEServer.main(J2EEServer.java:972) Caused by: java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFac tory at java.net.URLClassLoader$1.run(URLClassLoader.java:199) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:187) at java.lang.ClassLoader.loadClass(ClassLoader.java:289) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274) at java.lang.ClassLoader.loadClass(ClassLoader.java:235) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:219) at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.jav a:42) at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:6 49) ... 6 more javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interf aces.NamingContextFactory [Root exception is java.lang.ClassNotFoundException: o rg.jnp.interfaces.NamingContextFactory] at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:6 52) at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:243 ) at javax.naming.InitialContext.init(InitialContext.java:219) at javax.naming.InitialContext.<init>(InitialContext.java:175) at com.sun.enterprise.naming.NamingManagerImpl.<init>(NamingManagerImpl. java:82) at com.sun.enterprise.server.J2EEServer.run(J2EEServer.java:240) at com.sun.enterprise.server.J2EEServer.main(J2EEServer.java:972) Caused by: java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFac tory at java.net.URLClassLoader$1.run(URLClassLoader.java:199) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:187) at java.lang.ClassLoader.loadClass(ClassLoader.java:289) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274) at java.lang.ClassLoader.loadClass(ClassLoader.java:235) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:219) at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.jav a:42) at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:6 49) ... 6 more java.lang.RuntimeException: Cannot instantiate class: org.jnp.interfaces.NamingC ontextFactory at com.sun.enterprise.server.J2EEServer.run(J2EEServer.java:346) at com.sun.enterprise.server.J2EEServer.main(J2EEServer.java:972) J2EE server reported the following error: Cannot instantiate class: org.jnp.inte rfaces.NamingContextFactory Error executing J2EE server ... C:\Documents and Settings\bharat> where to get this package org.jnp.interfaces.NamingContextFactory or do i need to add any jar file to my classpath. In Jboss i found this package is available in jnp-client.jar but in J2EE1.3 where to find it. Thanks for your help, Bharat.
|
 |
Magnus Stattin
Ranch Hand
Joined: Jun 05, 2003
Posts: 65
|
|
You should not need to specify any properties to get the InitialContext when you use Sun's RI Server. The default should be enough. So you don't need to do this:
Hashtable env = new Hashtable(); env.putContext.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.cosnaming.CNCtxFactory"); env.put(Context.PROVIDER_URL, "http://localhost:3641"); IntialConetext initContext = new InitialContext(env);
This should be enough: Context initContext = new InitialContext(); Maybe that will help you get rid of the classpath trouble. Hope it helps /Magnus
|
 |
frank vallee
Greenhorn
Joined: Jan 10, 2004
Posts: 8
|
|
I also use Sun RI server and I get a NoInitialContextException if I use the plain version of InitialContext() on the client. I tried different INITIAL_CONTEXT_FACTORY values (rmi, corba, dns & filesystem) but none of them worked fine... Frank
|
 |
Mark Robert Ashworth
Greenhorn
Joined: Apr 10, 2004
Posts: 11
|
|
Are you using the SUN RI tool? If so, is the following file in your classpath? appserv-rt.jar
|
 |
Dmitry Danilov
Ranch Hand
Joined: Jan 27, 2004
Posts: 38
|
|
Originally posted by Mark Robert Ashworth: Are you using the SUN RI tool? If so, is the following file in your classpath? appserv-rt.jar
Yes!!! It worked fine for me on Linux + Sun ONE Application Server 7. Before that I was experiencing the same problems as described above. Just out of curiosity, Mark, how did you know?... [ April 10, 2004: Message edited by: Dmitry Danilov ]
|
 |
Subramanian Iyer
Greenhorn
Joined: Apr 12, 2004
Posts: 1
|
|
Excellent !! This did the trick! Thanks Mark!
Originally posted by Mark Robert Ashworth: Are you using the SUN RI tool? If so, is the following file in your classpath? appserv-rt.jar
|
When the going gets tough, upgrade!
|
 |
Hide Inada
Greenhorn
Joined: Jun 05, 2005
Posts: 1
|
|
Hi Mark, Thank you for posting this information. I was having the same problem and it worked for me too after adding appserv-rt.jar to CLASSPATH per your suggestion. I would have wasted a lot of time if I hadn't run into your posting. Regards, Hide
|
 |
Kane Li
Greenhorn
Joined: Jun 13, 2005
Posts: 1
|
|
awsome, adding the appserver-rt.jar file fixed my problem too
|
 |
 |
|
|
subject: error while running sample EJB client
|
|
|