[jboss-user] [EJB 3.0] - Broken local-home-jndi-name in jboss.xml

zagarol do-not-reply at jboss.com
Fri Nov 2 06:44:47 EDT 2007


Hi,

I think there is a bug in the handling of local-home-jndi-name when using the ejb3 deployer.

I am trying to set up some local SLSB beans to respond to a legacy SLSB. Initally when I tried this I get ClassCastExceptions on the proxy returned from JNDI. I corrected this on remote connections by replacing the jndi-name with home-jndi-name in jboss.xml.

Logically I thought the fix for local connections would be to use local-home-jndi-name, this deploys fine but the corresponding JNDI entry is actually a proxy to the local interface, not the local home interface.

Below is the test code I am using to verify this:

Remote bean:

  | public class RemoteHomeTestEJB implements SessionBean {
  | 
  | 	private SessionContext context = null;
  | 
  | 	/*
  | 	 * (non-Javadoc)
  | 	 * 
  | 	 * @see javax.ejb.SessionBean#ejbActivate()
  | 	 */
  | 	public void ejbActivate() throws EJBException, RemoteException {
  | 		// TODO Auto-generated method stub
  | 
  | 	}
  | 
  | 	/*
  | 	 * (non-Javadoc)
  | 	 * 
  | 	 * @see javax.ejb.SessionBean#ejbPassivate()
  | 	 */
  | 	public void ejbPassivate() throws EJBException, RemoteException {
  | 		// TODO Auto-generated method stub
  | 
  | 	}
  | 
  | 	/*
  | 	 * (non-Javadoc)
  | 	 * 
  | 	 * @see javax.ejb.SessionBean#ejbRemove()
  | 	 */
  | 	public void ejbRemove() throws EJBException, RemoteException {
  | 		// TODO Auto-generated method stub
  | 
  | 	}
  | 	
  | 	public void ejbCreate() {
  | 		//Do nothing.
  | 	}
  | 
  | 	/*
  | 	 * (non-Javadoc)
  | 	 * 
  | 	 * @see javax.ejb.SessionBean#setSessionContext(javax.ejb.SessionContext)
  | 	 */
  | 	public void setSessionContext(SessionContext ctx) throws EJBException,
  | 			RemoteException {
  | 		context = ctx;
  | 	}
  | 
  | 	public String getHello() {
  | 		try {
  | 			LocalHomeTestHome home = null;
  | 			home = ServiceLocator.locateHome(LocalHomeTestHome.class,
  | 					"java:comp/env/local/LocalHomeTest");
  | 			return home.create().getHello();
  | 		} catch (Exception e) {
  | 			StringWriter stringWriter = new StringWriter();
  | 			PrintWriter writer = new PrintWriter(stringWriter);
  | 			e.printStackTrace(writer);
  | 			return stringWriter.toString();
  | 		}
  | 	}
  | }
  | 

ServiceLocater.java

  | public class ServiceLocator {
  | 	private static final Logger LOG = Logger.getLogger(ServiceLocator.class);
  | 
  | 	@SuppressWarnings("unchecked")
  | 	public static <T> T locateHome(Class<T> clazz, String location)
  | 			throws NamingException {
  | 		T home = null;
  | 		Context ic = new InitialContext();
  | 
  | 		Object potentialHome = ic.lookup(location);
  | 		if (clazz.isInstance(potentialHome)) {
  | 			home = (T) potentialHome;
  | 		} else {
  | 			home = (T) PortableRemoteObject.narrow(potentialHome, clazz);
  | 		}
  | 		return home;
  | 	}
  | }
  | 

Local bean:

  | public class LocalHomeTestEJB implements SessionBean {
  | 
  | 	/* (non-Javadoc)
  | 	 * @see javax.ejb.SessionBean#ejbActivate()
  | 	 */
  | 	public void ejbActivate() throws EJBException, RemoteException {
  | 		// TODO Auto-generated method stub
  | 
  | 	}
  | 
  | 	/* (non-Javadoc)
  | 	 * @see javax.ejb.SessionBean#ejbPassivate()
  | 	 */
  | 	public void ejbPassivate() throws EJBException, RemoteException {
  | 		// TODO Auto-generated method stub
  | 
  | 	}
  | 	
  | 	public void ejbCreate() {
  | 		//Do nothing.
  | 	}
  | 
  | 	/* (non-Javadoc)
  | 	 * @see javax.ejb.SessionBean#ejbRemove()
  | 	 */
  | 	public void ejbRemove() throws EJBException, RemoteException {
  | 		// TODO Auto-generated method stub
  | 
  | 	}
  | 
  | 	/* (non-Javadoc)
  | 	 * @see javax.ejb.SessionBean#setSessionContext(javax.ejb.SessionContext)
  | 	 */
  | 	public void setSessionContext(SessionContext ctx) throws EJBException,
  | 			RemoteException {
  | 		// TODO Auto-generated method stub
  | 
  | 	}
  | 
  | 	public String getHello() {
  | 		return "Hello from Aerosystems";
  | 	}
  | 
  | }
  | 
ejb-jar.xml:

  | <ejb-jar version="3.0"  xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  | xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd">
  | 
  |    <description>Simple migration testing to see how to move to EJB 3</description>
  |    <display-name>EjbMigration</display-name>
  |    
  |    <enterprise-beans>
  |       <session>
  |          <description><![CDATA[EcardGenerationFacadeSessionEJB Bean]]></description>
  |          <display-name>LocalHomeTest</display-name>
  | 
  |          <ejb-name>LocalHomeTest</ejb-name>
  |          <remote>com.aeroint.ejbtest.common.RemoteHomeTestInterface</remote>
  |          <local-home>com.aeroint.ejbtest.server.session.LocalHomeTestHome</local-home>
  |          <local>com.aeroint.ejbtest.server.session.LocalHomeTestInterface</local>
  |          <ejb-class>com.aeroint.ejbtest.server.session.LocalHomeTestEJB</ejb-class>
  |          
  |          <session-type>Stateless</session-type>
  |          <transaction-type>Container</transaction-type>
  |       </session>
  |       
  |    	<session>
  |          <description><![CDATA[EcardUpdateFacadeSessionEJB Bean]]></description>
  |          <display-name>RemoteHomeTest</display-name>
  | 
  |          <ejb-name>RemoteHomeTest</ejb-name>
  | 
  |          <home>com.aeroint.ejbtest.common.RemoteHomeTestHome</home>
  |          <remote>com.aeroint.ejbtest.common.RemoteHomeTestInterface</remote>
  |          <ejb-class>com.aeroint.ejbtest.server.facade.RemoteHomeTestEJB</ejb-class>
  |          <session-type>Stateless</session-type>
  |          <transaction-type>Container</transaction-type>
  | 
  |          <ejb-local-ref >
  |             <ejb-ref-name>local/LocalHomeTest</ejb-ref-name>
  |             <ejb-ref-type>Session</ejb-ref-type>
  |             <local-home>com.aeroint.ejbtest.server.session.LocalHomeTestHome</local-home>
  | 	        <local>com.aeroint.ejbtest.server.session.LocalHomeTestInterface</local>
  |     	    <ejb-link>LocalHomeTest</ejb-link>
  |          </ejb-local-ref>
  | 
  |       </session>
  |    </enterprise-beans>
  | </ejb-jar>
  | 

jboss.xml

  | <jboss xmlns="http://java.sun.com/xml/ns/javaee"
  | 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  | 	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  | http://www.jboss.org/j2ee/schema/jboss_5_0.xsd"
  | 	version="3.0">
  | 	<enterprise-beans>
  | 		<session>
  | 			<ejb-name>RemoteHomeTest</ejb-name>
  | 			<home-jndi-name>remote/RemoteHomeTest</home-jndi-name>
  | 		</session>
  | 		<session>
  | 			<ejb-name>LocalHomeTest</ejb-name>
  | 			<local-home-jndi-name>local/LocalHomeTest</local-home-jndi-name>
  | 		</session>
  | 	</enterprise-beans>
  | </jboss>
  | 

Thanks in advance,
Shane

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4101224#4101224

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4101224



More information about the jboss-user mailing list