Solved

trying to call an ejb from a servlet-client

Posted on 2002-04-15
4
359 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

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

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…
Upgrading Tomcat – There are a couple of methods to upgrade Tomcat is to use The Apache Installer is to download and unzip and run the services.bat remove|install Tomcat6 Because of the App that we are working with, we can only use Tomcat 6.…
This demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.
This video shows how to remove a single email address from the Outlook 2010 Auto Suggestion memory. NOTE: For Outlook 2016 and 2013 perform the exact same steps. Open a new email: Click the New email button in Outlook. Start typing the address: …

705 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

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now