Solved

trying to call an ejb from a servlet-client

Posted on 2002-04-15
4
362 Views
Last Modified: 2013-12-10
sir,

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
WEB-INF/classes/toy/*.class
WEB-INF/classes/toy/META-INF/ejb-jar.xml
and using a client servlet class "GameServ.class"
WEB-INF/classes/toy/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 here..as 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;
  x=x1+x2;
  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' 'http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd'>

<ejb-jar>
 <enterprise-beans>
  <session>
  <ejb-name>Game</ejb-name>
  <home>toy.GameHome</home>
  <remote>toy.Game</remote>
  <ejb-class>toy.GameBean</ejb-class>
  <session-type>Stateless</session-type>
  <transaction-type>Container</transaction-type>
  </session>
 </enterprise-beans>
</ejb-jar>


**************  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.io.*;
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  {
    super.init(config);
 
  }

  public void service(HttpServletRequest req, HttpServletResponse res)
       throws IOException
  {
 
    res.setContentType("text/html");
    PrintWriter out = res.getWriter();
     
       int ss=0;
       String name="";
       System.out.println("inside client : GameServ ");
       try
       {
          String url = "t3://localhost:7001";
         
        Properties h = new Properties();
          h.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
          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);
            
        name=sr.getName();
          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)
          {
              System.out.println(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>" +
              "<center><h1>Game</h1></center>");
    out.println("</body></html>");
  }
}



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

inside the "toy.GameServ.java" 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    ****************************************

 
0
Comment
Question by:sanjeev_1772
4 Comments
 
LVL 1

Accepted Solution

by:
naidubs earned 50 total points
ID: 7176721
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.
0

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Configure Web Service (server application) I. Configure security for Web Services methods First, we need to protect Session bean which implements the service: 1. Open EJB deployment descriptor (ejb-jar.xml) in the EJB project that contains you…
Most of the developers using Tomcat find it easy to configure the datasource in Server.xml and use the JNDI name in the code to get the connection.  So the default connection pool using DBCP (or any other framework) is made available and the life go…
This video shows how to quickly and easily add an email signature for all users on Exchange 2016. The resulting signature is applied on a server level by Exchange Online. The email signature template has been downloaded from: www.mail-signatures…

820 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question