aspose file tools*
The moose likes EJB Certification (SCBCD/OCPJBCD) and the fly likes error while running sample EJB client Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Certification » EJB Certification (SCBCD/OCPJBCD)
Bookmark "error while running sample EJB client" Watch "error while running sample EJB client" New topic
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
 
jQuery in Action, 2nd edition
 
subject: error while running sample EJB client