Win a copy of Re-engineering Legacy Software this week in the Refactoring forum
or Docker in Action in the Cloud/Virtualization forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Help,Tomcat can't invoke EJB?

 
Yashnoo lyo
Ranch Hand
Posts: 152
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hello everyone:

I write a simple EJB(SessionBean) and it have Remote interface(Hello),Home interface(HelloHome) and bean class(HelloBean).I deploy it in sun's deploytool successfully(return a HelloClient.jar).I try to invoke The "Hello" EJB in the same computer using Tomcat.My code is:
///////////////////////invokeEJB.jsp////////////////////////////////
<%@page import="javax.ejb.*,javax.naming.*"%>
........... ......... ................. ............
try{
Context ctx=new InitialContext();
Object obj=ctx.lookup("java:comp/env/ejb/Hello");
HelloHome home=(HelloHome)PortableRemoteObject.narrow(obj,HelloHome.class);
Hello hello=home.create();
out.println(hello.getHello());
}catch(Exception e){
out.println(e.toString());
}
........... .......... ............ ......................
But Tomcat report error:
////////////////////////////////////////////////////
org.apache.jasper.JasperException: Unable to compile class for JSPNote: sun.tools.javac.Main has been deprecated.

An error occured between lines: 7 and 17 in the jsp file: /ejb/invokeejb.jsp
Generated servlet error:
g:\j2sdkee1.3\repository\lyo\web\ejb\_0002fejb_0002finvokeejb_jsp.java:64: Class org.apache.jsp.HelloHome not found.
HelloHome home=(HelloHome)PortableRemoteObject.narrow(obj,HelloHome.class);
^

An error occured between lines: 7 and 17 in the jsp file: /ejb/invokeejb.jsp
Generated servlet error:
g:\j2sdkee1.3\repository\lyo\web\ejb\_0002fejb_0002finvokeejb_jsp.java:64: Class org.apache.jsp.HelloHome not found.
HelloHome home=(HelloHome)PortableRemoteObject.narrow(obj,HelloHome.class);
^

An error occured between lines: 7 and 17 in the jsp file: /ejb/invokeejb.jsp
Generated servlet error:
g:\j2sdkee1.3\repository\lyo\web\ejb\_0002fejb_0002finvokeejb_jsp.java:64: Undefined variable or class name: PortableRemoteObject
HelloHome home=(HelloHome)PortableRemoteObject.narrow(obj,HelloHome.class);
^

An error occured between lines: 7 and 17 in the jsp file: /ejb/invokeejb.jsp
Generated servlet error:
g:\j2sdkee1.3\repository\lyo\web\ejb\_0002fejb_0002finvokeejb_jsp.java:65: Class org.apache.jsp.Hello not found.
Hello hello=home.create();
^
4 errors, 1 warning
Why? :roll:
 
Andres Gonzalez
Ranch Hand
Posts: 1561
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I try to invoke The "Hello" EJB in the same computer using Tomcat.
hmm.. Tomcat is a web container, not an EJB container. Am I missing something here?
 
Yashnoo lyo
Ranch Hand
Posts: 152
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Thank you:
But I want to invoke the EJB only in the Tomcat other than run the EJB in Tomcat.The EJB run in the sun's J2EE server(E:\j2sdkee1.3\...).The j2EE and the Tomcat were in the same computer.
Whether I missing some jar files in Tomcat?(for example: stub file,ejb-client.jar)But I add the ejb-client.jar to Tomcat it also can't work?!Why? :roll:
 
Lasse Koskela
author
Sheriff
Posts: 11962
5
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Are HelloHome, Hello and HelloBean defined in the default package (assuming from the missing import)? Try to move them into a package. Some appservers have trouble with components belonging to the default package.
 
Chris Mathews
Ranch Hand
Posts: 2712
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Originally posted by Lasse Koskela:
Some appservers have trouble with components belonging to the default package.

This is definitely the case with JSP pages. it is a failing of the JSP Specification. The spec does not explicitly define whether classes in the default package should be made available to JSP pages, therefore some Web Containers make them available and some do not.
Moral of the story: Never leave your classes in the default package.
 
Yashnoo lyo
Ranch Hand
Posts: 152
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Thanks everyone:
I try to write a javabean and I use it in jsp page "<jsp:useBean.... ../>".It can be compiled successfully if I don't package the javabean.But it can't compile if I package it.My javabean code is:
//////////////////////////testejb.java///////////////////////////////////
import javax.ejb.*;
import javax.naming.*;
import javax.rmi.*;
public class testejb{
String hi=null;
public testejb(){
try{
Context ctx=new InitialContext();
Object obj=ctx.lookup("ejb/Hello");
Hellohome home=(Hellohome)PortableRemoteObject.narrow(obj,Hellohome.class);
Hello hello=home.create();
hi=hello.getHello();
}catch(Exception e){
System.out.println(e.toString());
}
}
public String callejb(){
return this.hi;
}
public static void main(String args[]){
testejb li=new testejb();
li.callejb();
}
///////////////////////////////////////////////////////////////////////
I means that it can't compile if I add "package testejb" at the front.But if I don't add "package testejb" it compile successfully.Why?I have add the HelloClient.jar(return by sun's deploytool) to my classpath.Any problem? :roll:
 
Yashnoo lyo
Ranch Hand
Posts: 152
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Originally posted by Lasse Koskela:
Are HelloHome, Hello and HelloBean defined in the default package (assuming from the missing import)? Try to move them into a package. Some appservers have trouble with components belonging to the default package.

The "HelloHome, Hello and HelloBean" are in the same jar file(HelloClient.jar) and I add it in my classpath.It is created by deploytool.I use sun's deploytool.But the Tomcat report error if I import the jar using " import="HelloClient.Hellohome,HelloClient.Hello" ".
Can't I invoke the EJB in Tomcat if I don't integrate JBoss? :roll:
 
Chris Mathews
Ranch Hand
Posts: 2712
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Originally posted by Yashnoo lyo:
[QB]The "HelloHome, Hello and HelloBean" are in the same jar file(HelloClient.jar) and I add it in my classpath.

What jar classes are in has nothing to do with which package they are in... my recommendation is to make sure your ejb classes are not in the default package. In other words you will need to explicitly define which package they are in using the package keyword.
On another note, your ejb lookup is only going to work if you are retrieving the InitialContext correctly. Check the documentation for your Server on how to do this.
[ August 17, 2003: Message edited by: Chris Mathews ]
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic