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