-
1. Re: How JSP communicate with EJB placed on jboss
vikaskansal May 14, 2003 9:54 AM (in response to vikaskansal)can somebody help me ?
-
2. Re: How JSP communicate with EJB placed on jboss
jonlee May 14, 2003 10:23 AM (in response to vikaskansal)A remote client such as a servlet or a JSP communicates to an EJB through the EJB's interfaces - there is a home interface and the remote interface; an interface that declares the public methods of an EJB accessible by a client.
These and the actual bean code are usually packaged together and deployed on the EJB container (JBoss) - by convention you would call it MyBean.jar. The client only needs the interface classes and you would package them in a jar called MyBean-client.jar which you put in the path of the client (in this case Tomcat, so it goes in the WEB-INF/lib of the web application's WAR. Use whatever convention you are comfortable with.
So suppose I have a stateless session bean with a remote interface class like this:
package com.amity.testbranch;
public interface MyBean extends javax.ejb.EJBObject
{
public long serviceTest(long counter) throws java.rmi.RemoteException;
}
and a home interface class like this:
package com.amity.testbranch;
public interface MyBeanHome extends javax.ejb.EJBHome
{
MyBean create() throws java.rmi.RemoteException, javax.ejb.CreateException;
}
My JSP would have something like this:
<%import="com.amity.testbranch.MyBeanHome,com.amity.testbranch.MyBean,..."%>
Now you can do your JNDI search and so on:
try
{
Properties jndiProps = new Properties();
InitialContext jndiContext = new InitialContext(jndiProps);
Object reference = jndiContext.lookup(jndiName);
MyBeanHome home = (MenuManagerHome)PortableRemoteObject.narrow(reference, MyBeanHome.class);
MyBean myBean = home.create();
long value = myBean.serviceTest(1);
}
catch(Exception e)
{
...
Note that this only gives you a flavour for how to write the code, and this particular example assumes that you don't have to do anything special to set up the properties - for example, if the JVM already has the JBoss naming lookup properties configured. -
3. Re: How JSP communicate with EJB placed on jboss
vikaskansal May 15, 2003 8:37 AM (in response to vikaskansal)Thanks jonlee for your initial help.
I did exactly the way you explain in your mail.
Here is my JSP Code..
<%@ page import="java.sql.*" %>
<%@ page import="javax.sql.*" %>
<%@ page import="javax.naming.*" %>
<%@ page import="javax.ejb.*" %>
<%@ page import= "javax.rmi.*" %>
<%@ page import="com.cm4d.utility.dbutility.ejb.*" %>
First EJB test
<%
try
{
InitialContext ctx = new InitialContext();
out.println("got the context");
Object obj = ctx.lookup("QMC/CM4D/Utility/RoutinesHome");
out.println("search the lookup");
RoutinesHome rHome = (RoutinesHome)
PortableRemoteObject.narrow(
obj, RoutinesHome.class);
out.println("got the home interface");
Routines rout = rHome.create();
RowSet rset = rout.getRoutines();
while(rset.next())
{
System.out.println(rset.getString("R_ID"));
System.out.println(rset.getString("R_Label"));
}
}
catch (javax.naming.NamingException e)
{
out.println(e.getMessage());
}
catch (Exception e) {
System.out.print(e.getClass().getName() + ":");
System.out.println(e.getMessage());
}
%>
I am using out.println method to check the ourput for lines related with EJB.
The JSP output is like this.
got the context
Name QMC is not bound in this Context
so I understand that it created the initialcontext object but was not able to find the JNDI name..
for creating the ejb-jar.xml and jboss.xml i used this forum posted by you
http://www.jboss.org/modules/bb/index.html?module=bb&op=viewtopic&t= you please give me some idea about the problem ? -
4. Re: How JSP communicate with EJB placed on jboss
raja05 May 15, 2003 8:44 AM (in response to vikaskansal)There is a problem with ur JNDI Name.
Look up Javadocs for javax.naming.CompositeName for naming details. A Name like "ejb/HelloWorld" is treated as a composite name of {"ejb", "HelloWorld"}
So your JNDI is possibly broken into a composite name of {"QMC", "CM4D","Utility", "RoutinesHome"}
Try setting up a ejb-ref in your web.xml and use the jbossweb.xml to point your reference to the actual JNDI Name.
Or Setup the EJB to not have any "/" in its JNDI Name(for a quick check, you can do this).
HTH
Raj