Does anyone have an example of accessing an EJB on a remote server from
a JSP web application?

 

I have created an EJB and deployed it successfully. I can access it via
a java console application using the same code as below but when I try
to access it from a jsp application I get the following errors.

 

Here's my jsp code.

 

<%...@page import="

java.util.Properties,

javax.naming.InitialContext,

javax.naming.Context,

javax.rmi.PortableRemoteObject,

org.link.security.Hello,

org.apache.openejb.client.RemoteInitialContextFactory

"%>

<%

Properties props = new Properties();

props.put(Context.INITIAL_CONTEXT_FACTORY,"org.apache.openejb.client.Rem
oteInitialContextFactory");

props.put(Context.PROVIDER_URL,"ejbd://localhost:4201");

 

Context ctx = new InitialContext(props);

Object ref = ctx.lookup("HelloBeanRemote");

 

Hello h = (Hello)PortableRemoteObject.narrow(ref,Hello.class);

 

out.println(h.sayHello());

%>

 

Here's the error

 

Stacktrace:
 
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServle
tWrapper.java:451)
 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.ja
va:355)
 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

root cause 

javax.servlet.ServletException: javax/ejb/EJBHome
 
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageCont
extImpl.java:841)
 
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContex
tImpl.java:774)
        org.apache.jsp.Default_jsp._jspService(Default_jsp.java:68)
 
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.ja
va:331)
 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

root cause 

java.lang.NoClassDefFoundError: javax/ejb/EJBHome
        java.lang.Class.forName0(Native Method)
        java.lang.Class.forName(Unknown Source)
        com.sun.naming.internal.VersionHelper12.loadClass(Unknown
Source)
        javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
        javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
        javax.naming.InitialContext.init(Unknown Source)
        javax.naming.InitialContext.<init>(Unknown Source)
        org.apache.jsp.Default_jsp._jspService(Default_jsp.java:56)
 
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.ja
va:331)
 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

root cause 

java.lang.ClassNotFoundException: javax.ejb.EJBHome
 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader
.java:1362)
 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader
.java:1208)
        java.lang.ClassLoader.loadClassInternal(Unknown Source)
        java.lang.Class.forName0(Native Method)
        java.lang.Class.forName(Unknown Source)
        com.sun.naming.internal.VersionHelper12.loadClass(Unknown
Source)
        javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
        javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
        javax.naming.InitialContext.init(Unknown Source)
        javax.naming.InitialContext.<init>(Unknown Source)
        org.apache.jsp.Default_jsp._jspService(Default_jsp.java:56)
 
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.ja
va:331)
 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

 

 

If I can't access a remote bean on another server it makes the whole EJB
concept useless. Why wouldn't I just copy the jar files and include it
with every deployment of the system?.

 

I want to place business code in an EJB on one server and access it from
a completely different server in a presentation jsp application.

 

Robert Reese

Operational Excellence

Applications Developer

817-619-8464

 

 

Reply via email to