trying to call an ejb from a servlet-client


I am just a biginner in weblogic and I am facing a problem here and I think you will provide a nice solution to me .
Environment : J2EE/weblogic 5.1/ejb1.1/servlets/win'2000

I have successfuly deployed a stateless session bean named as "Game" and the jndi name used is "gum" at Weblogic 5.1.
Elements inside the "Game.jar" are :
remote interface-> Game.class
home interface  -> GameHome.class
bean class      -> GameBean.class
xml DD          -> META-INF/ejb-jar.xml

I have maintained the dir. structure as follows :  WEB-INF/lib /Game.jar
and using a client servlet class "GameServ.class"

Now till I think everything is all right...
Now i started the weblogic...then called the index page
and from the index page I am calling the bean using the mentioned servlet client "GameServ.class" and during calling process i am getting a exception "java.lang.ClassCastException" at the line mentioned below inside ClentServ.class..>
line of error-->"GameHome sh=(GameHome) PortableRemoteObject.narrow(ref,GameHome.class);"

I tried my best but i could not get out of this problem and for more clearity i am writing the java files inside a package "toy" used below....>>

*******************  files used *****************

***** remote interface *******

package toy;

import java.rmi.*;
import javax.ejb.*;
public interface Game extends EJBObject
    public String getName()throws RemoteException;
      public int getSum(int x1,int x2) throws RemoteException;


********** home interface *********

package toy;

import java.rmi.*;
import javax.ejb.*;
import java.util.*;

public interface GameHome extends EJBHome

   public Game create()throws RemoteException,CreateException;


******** bean **********

package toy;

import javax.ejb.CreateException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import javax.naming.NamingException;
import javax.ejb.EJBException;
import java.sql.*;

  public class GameBean implements SessionBean
  public void ejbActivate() {System.out.println("Activate");  }
  public void ejbRemove() {  System.out.println("remove");}
  public void ejbPassivate() { System.out.println("<.....passivate....>"); }
  public void setSessionContext(SessionContext ctx) {    System.out.println("<....sessioncontext....>");    }
  public void ejbCreate () throws CreateException {  System.out.println("<.....create....>");    }
  public String getName()
     System.out.println("<.....chk 1 .....>");
       String name="GAME";
      return name;

 public int getSum(int x1,int x2)
  int x;
  System.out.println("<.....chk 5 ...x..> "+x);
  return x;


**************** ejb-jar.xml **************

<?xml version="1.0"?>

<!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN' ''>


**************  clent servlet  ***************

package toy;

import toy.Game;
import toy.GameHome;

import javax.ejb.*;
import javax.rmi.*;
import javax.rmi.PortableRemoteObject;
import javax.naming.InitialContext;
import javax.naming.Context;
import javax.naming.*;
import java.util.Properties;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class GameServ extends HttpServlet {

  public void init(ServletConfig config) throws ServletException  {

  public void service(HttpServletRequest req, HttpServletResponse res)
       throws IOException
    PrintWriter out = res.getWriter();
       int ss=0;
       String name="";
       System.out.println("inside client : GameServ ");
          String url = "t3://localhost:7001";
        Properties h = new Properties();
          h.put(Context.PROVIDER_URL, url);
          Context ctx = new InitialContext(h);
        Object ref = ctx.lookup("gum");
        System.out.println("inside client : objref-3 "+ref);
        System.out.println("....inside Zone...");

(**)        GameHome sh=(GameHome) PortableRemoteObject.narrow(ref,GameHome.class);
//here i am getting    >> ClassCastEXCEPTION<<

          System.out.println("inside client : sh-4 "+sh);
         Game sr =sh.create();
        System.out.println("inside client : sr-5 "+sr);
          System.out.println(" Client ...Got the name : "+name);
         ss = sr.getSum(1,7);
         System.out.println("Got the Sum :" + String.valueOf(ss));

      catch(Exception e)

    out.println("<html><head>\n" +
                "<title>Check Servlet</title>\n" +
                "</head>\n" +
                "<body bgcolor=#ffffff> <font face=\"Comic Sans MS\" size+=4 color=red>" +
                "<br> <center><h1> name = "+name+"</h1></center>" +
            "<br> <center><h1> sum = "+ss+"</h1></center>" +

************************** Exception I am getting  ****************************

inside the "" i am getting    >> ClassCastEXCEPTION<< at line (**) as below

   " GameHome sh=(GameHome) PortableRemoteObject.narrow(ref,GameHome.class); "

I hope i have described my problem very well and i request you to give me solution so that my client application may call the bean.

********  Waiting for the response. *******

*******************************    END    ****************************************

Who is Participating?
naidubsConnect With a Mentor Commented:
using reflection try to get class name , so that u will come to know which class ur getting.
code is
Class cls = ref.getClass();
S.O.P("class name"+cls.getName());

uu need to verify the class path and add home&remote classes in client jar file.
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.