What is wrong with my local ejb JNDI lookup code (or the ejb
sairndain Jan 11, 2008 12:22 AMI'm trying to perform a JNDI lookup on a local stateless session bean.
When I use the jboss jmx console to check the JNDI name space I get the following:
+- HandleDelegate (class: org.jboss.proxy.ejb.handle.HandleDelegateImpl)
+- ORB (class: org.jacorb.orb.ORB)
+- env (class: org.jnp.interfaces.NamingContext)
| +- ejb (class: org.jnp.interfaces.NamingContext)
| | +- DddEJBBeanLocal[link -> local/DddEJBBean@16619879] (class: javax.naming.LinkRef)
| +- DddEJBRemoteHome[link -> DddEJBBean] (class: javax.naming.LinkRef)
The code I am using for the JNDI lookup is as follows:
private DddEJBLocal lookupDddEJBBean() {
try {
Context c = new InitialContext();
DddEJBLocalHome rv = (DddEJBLocalHome) c.lookup("java:comp/env/ejb/DddEJBBeanLocal");
return rv.create();
} catch (NamingException ne) {
java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE, "exception caught", ne);
throw new RuntimeException(ne);
} catch (CreateException ce) {
java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE, "exception caught", ce);
throw new RuntimeException(ce);
}
}The ejb-jar.xml is as follows:
<?xml version="1.0" encoding="UTF-8"?> <ejb-jar version="2.1" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd"> <enterprise-beans> <session> <display-name>DddEJBSB</display-name> <ejb-name>DddEJBBean</ejb-name> <home>ddd.ejb.DddEJBRemoteHome</home> <remote>ddd.ejb.DddEJBRemote</remote> <local-home>ddd.ejb.DddEJBLocalHome</local-home> <local>ddd.ejb.DddEJBLocal</local> <ejb-class>ddd.ejb.DddEJBBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> <ejb-ref> <description>DddEJBBean</description> <ejb-link>dddEAR-ejb.jar#DddEJBBean</ejb-link> <ejb-ref-name>DddEJBRemoteHome</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <home>ddd.ejb.DddEJBRemoteHome</home> <remote>ddd.ejb.DddEJBRemote</remote> </ejb-ref> <ejb-local-ref> <description>DddEJBBean</description> <ejb-link>dddEAR-ejb.jar#DddEJBBean</ejb-link> <ejb-ref-name>ejb/DddEJBBeanLocal</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <local-home>ddd.ejb.DddEJBLocalHome</local-home> <local>ddd.ejb.DddEJBLocal</local> </ejb-local-ref> </session> </enterprise-beans> <assembly-descriptor> <container-transaction> <method> <ejb-name>DddEJBBean</ejb-name> <method-name>*</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction> </assembly-descriptor> </ejb-jar>
I get the the following error:
javax.naming.NameNotFoundException: ejb not bound
at org.jnp.server.NamingServer.getBinding(NamingServer.java:529)
at org.jnp.server.NamingServer.getBinding(NamingServer.java:537)
at org.jnp.server.NamingServer.getObject(NamingServer.java:543)
at org.jnp.server.NamingServer.lookup(NamingServer.java:267)
at org.jnp.server.NamingServer.lookup(NamingServer.java:270)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:625)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:716)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:587)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at ddd.ejb.DddHelper.lookupDddEJBBean(DddHelper.java:32)
QUESTION#1:
What is wrong with my lookup code or the ejb-jar.xml configuration?
QUESTION#2
Are proprietary JBoss configuration files (e.g., jboss.xml) required in order to successfully perform a JNDI lookup on the above mentioned bean?
Thanks for any help! --sd
[More information... if needed]
***ddd.ejb.DddEJBBean***
package ddd.ejb;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
/**
*
* @author sairndain
*/
public class DddEJBBean implements SessionBean {
private SessionContext context;
// <editor-fold defaultstate="collapsed" desc="EJB infrastructure methods. Click the + sign on the left to edit the code.">;
// TODO Add code to acquire and use other enterprise resources (DataSource, JMS, enterprise bean, Web services)
// TODO Add business methods or web service operations
/**
* @see javax.ejb.SessionBean#setSessionContext(javax.ejb.SessionContext)
*/
public void setSessionContext(SessionContext aContext) {
context = aContext;
}
/**
* @see javax.ejb.SessionBean#ejbActivate()
*/
public void ejbActivate() {
}
/**
* @see javax.ejb.SessionBean#ejbPassivate()
*/
public void ejbPassivate() {
}
/**
* @see javax.ejb.SessionBean#ejbRemove()
*/
public void ejbRemove() {
}
// </editor-fold>;
/**
* See section 7.10.3 of the EJB 2.0 specification
* See section 7.11.3 of the EJB 2.1 specification
*/
public void ejbCreate() {
// TODO implement ejbCreate if necessary, acquire resources
// This method has access to the JNDI context so resource aquisition
// spanning all methods can be performed here such as home interfaces
// and data sources.
}
private String field1 = "...value of field1 in DddEJBBean.java...";
public String getField1() {
System.out.println(".................DddEJBBean/getField1()..............");
return this.field1;
}
// Add business logic below. (Right-click in editor and choose
// "EJB Methods > Add Business Method" or "Web Service > Add Operation")
}
***ddd.ejb.DddHelper***
package ddd.ejb;
import javax.ejb.CreateException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
/**
*
* @author sairndain
*/
public class DddHelper {
private String field1 = "...value of field1 in DddHelper.java...";
public String getField1()
{
System.out.println(".................DddHelper/getField1()..............");
DddEJBLocal localref = this.lookupDddEJBBean();
return localref.getField1() + this.field1;
}
private DddEJBLocal lookupDddEJBBean() {
try {
Context c = new InitialContext();
DddEJBLocalHome rv = (DddEJBLocalHome) c.lookup("java:comp/env/ejb/DddEJBBeanLocal");
return rv.create();
} catch (NamingException ne) {
java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE, "exception caught", ne);
throw new RuntimeException(ne);
} catch (CreateException ce) {
java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE, "exception caught", ce);
throw new RuntimeException(ce);
}
}
}
***ddd.web.WelcomeJSFBean***
package ddd.web;
import ddd.ejb.DddHelper;
/**
*
* @author sairndain
*/
public class WelcomeJSFBean {
/** Creates a new instance of WelcomeJSFBean */
public WelcomeJSFBean() {
}
private String field1 = "...value of field1 in WelcomeJSFBean.java...";
public String getField1()
{
System.out.println(".................WelcomeJSFBean/getField1()..............");
DddHelper dh = new DddHelper();
return dh.getField1() + this.field1;
}
}***web.xml***
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.faces</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>welcomeJSF.faces</welcome-file> </welcome-file-list> </web-app>
***