I am running tomcat and JBoss separately. And I would
like to access an ejb from a servlet just as my client
application did.

I tried the ejb interest example and it worked just
fine.
The client application was able to communicated with a
remote ejb. I modified this client application into a
servlet and complied it just fine.
During execution, the servlet throws the exception
below. Sure JBoss was running as I did successfully
run the usual client application.
Then copied the jbosssx-client.jar,jboss-client.jar,
jnp-client.jar and even the jaas.jar and ejb.jar files
into tomcats lib directory, but the error persisted
(even after restarting tomcat).

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

The servlet looks like this.
(see attachment).



__________________________________________________
Do You Yahoo!?
Get personalized email addresses from Yahoo! Mail
http://personal.mail.yahoo.com/
package com.burudani.interest;
import java.util.Properties;
import javax.rmi.PortableRemoteObject;
import javax.naming.*;
import com.burudani.interest.Interest;
import com.burudani.interest.InterestHome;
import java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.http.*;
import javax.servlet.*;



public class InterestClientServlet extends HttpServlet
{
                private void executeServer(String JavaNamingProviderURLValue,String 
JndiContextLookupValue,PrintWriter out)
                {
                        out.println("inside executeServer()");
                        String JavaNamingProviderURL="localhost:1099";
                        String JndiContextLookup="Interest";
                        Date ServerDate=new Date();
                        SimpleDateFormat sdf;
                        sdf=new SimpleDateFormat("dd MMM yyyy hh:mm:ss:ms zzz");
                        try
                        {
                                /*System.out.println("Set the 
\"java.naming.provider.url\"");
                                BufferedReader br=new BufferedReader (new 
InputStreamReader(System.in));
                                String str="";int i;
                                for (i=0;i<1;i++)
                                        str=br.readLine();
                                JavaNamingProviderURL=str;
                                System.out.println("Enter the lookup jndi Name of 
remote object");
                                br=new BufferedReader (new 
InputStreamReader(System.in));
                                for (i=0;i<1;i++)
                                        str=br.readLine();
                                */
                                JavaNamingProviderURL=JavaNamingProviderURLValue;
                                JndiContextLookup=JndiContextLookupValue;
                                out.println("Setting the 
\"java.naming.provider.url\"");
                                out.println(JavaNamingProviderURL);
                                out.println("Setting the lookup jndi Name of remote 
object");
                                out.println(JndiContextLookup);
                        }
                        catch(Exception ioe)
                        {
                                System.out.println("Problems reading your values 
"+ioe.toString());
                        }
                        //set up the naming provider, this may not be necessary, 
depending on how your Java system is configured.
                        Properties env=new Properties();
                        
env.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
                        //env.setProperty("java.naming.provider.url","localhost:1099");
                        
env.setProperty("java.naming.provider.url",JavaNamingProviderURL);
                        
env.setProperty("java.naming.factory.url.pkgs","org.jboss.naming");
                        try
                        {
                                InitialContext jndiContext=new InitialContext(env);
                                out.println("Got context");
                                //Object ref=jndiContext.lookup("Interest");
                                Object ref=jndiContext.lookup(JndiContextLookup);
                                out.println("Got Reference");

                                //Get a reference from this to the Bean's Home 
interface.
                                InterestHome 
home=(InterestHome)PortableRemoteObject.narrow(ref,InterestHome.class);

                                //Create an Interest Object using the Home Interface
                                Interest interest=home.create();

                                ServerDate=interest.getServerDate();
                                System.out.println("Server date is 
"+sdf.format(ServerDate));

                                //Now call the calculateCompoundInterest() method to 
do the interest calculation.

                                System.out.println("Interest on 1000 units, at 10% per 
period, compounded over 2 periods is: ");
                                
System.out.println(interest.calculateCompoundInterest(1000,0.10,2));

                                ServerDate=interest.getServerDate();
                                System.out.println("Server date is 
"+sdf.format(ServerDate));

                        }
                        catch(Exception re){System.out.println("Error 
"+re.toString());}
                        /*catch(javax.naming.NamingException 
ne){System.out.println("NamingException Error "+ne.toString());}
                        catch(java.ejb.CreateException 
ce){System.out.println("java.ejb.CreateException Error "+ce;}
                        catch(java.ejb.FinderException 
fe){System.out.println("java.ejb.FinderException Error "+fe;}
                        */
        }
                public void doGet(HttpServletRequest req,HttpServletResponse res) 
throws ServletException, IOException
                {
                        PrintWriter out=res.getWriter();
                        out.println("there");
                        executeServer("132.107.151.36","ejb/Interest",out); //just 
hardcode values for testing purposes.
                }

}

Reply via email to