Solved

trying to call an ejb from a servlet-client

Posted on 2002-04-15
4
363 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
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: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

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

Suggested Solutions

Verbose logging is used to diagnose garbage collector problems. By default, -verbose:gc output is written to either native_stderr.log or native_stdout.log.   It is also possible to redirect the logs to a user-specified file. This article will de…
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 use Hyena, from SystemTools Software, to update 100 user accounts from an external text file. View in 1080p for best video quality.

738 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