EJBHomeProvider.java |
/* * JBoss, the OpenSource J2EE webOS * * Distributable under LGPL license. * See terms of license at gnu.org. */ // $Id: EJBHomeProvider.java,v 1.5.6.1 2005/03/02 14:19:51 tdiesler Exp $ package org.jboss.net.axis.server; import org.jboss.axis.Handler; import org.jboss.axis.MessageContext; import org.jboss.axis.providers.java.RPCProvider; import javax.ejb.EJBHome; import javax.naming.InitialContext; /** * A JBoss-compatible Provider that exposes the methods of * a beanīs home, such as a stateless session bean or an entity * bean. It is working under the presumption that the right classloader * has already been set by the invocation chain * (@see org.jboss.net.axis.SetClassLoaderHandler). * <br> * <h3>Change History</h3> * <ul> * </ul> * <br> * <h3>To Do</h3> * <ul> * <li> jung, 22.03.02: Service-Reference serialisation. </li> * </ul> * @author <a href="mailto:Christoph.Jung@infor.de">Christoph G. Jung</a> * @created 22.03.2002 * @version $Revision: 1.5.6.1 $ */ public class EJBHomeProvider extends RPCProvider { private static final String beanNameOption = "beanJndiName"; private static final String homeInterfaceNameOption = "homeInterfaceName"; /** Creates new EJBProvider */ public EJBHomeProvider() { } /** * Return the object which implements the service. Makes the usual * JNDI->lookup call wo the PortableRemoteDaDaDa for the sake of Corba. * @param msgContext the message context * @param clsName The JNDI name of the EJB home class * @return an object that implements the service */ protected Object getNewServiceObject(MessageContext msgContext, String clsName) throws Exception { // Get the EJB Home object from JNDI Object result = new InitialContext().lookup(clsName); return result; } /** * Return the option in the configuration that contains the service class * name. In the EJB case, it is the JNDI name of the bean. */ protected String getServiceClassNameOptionName() { return beanNameOption; } /** * Get the class description for the EJB Remote Interface, which is what * we are interested in exposing to the world (i.e. in WSDL). * * @param msgContext the message context * @param beanJndiName the JNDI name of the EJB * @return the class info of the EJB home interface */ protected Class getServiceClass(MessageContext msgContext, String beanJndiName) throws Exception { Handler serviceHandler = msgContext.getService(); Class interfaceClass = null; // First try to get the interface class from the configuation String homeName = (String)serviceHandler.getOption(homeInterfaceNameOption); if (homeName != null) { interfaceClass = msgContext.getClassLoader().loadClass(homeName); } else { // we look into the metadata EJBHome home = (EJBHome)getNewServiceObject(msgContext, beanJndiName); interfaceClass = home.getEJBMetaData().getHomeInterfaceClass(); } // got it, return it return interfaceClass; } }
EJBHomeProvider.java |