001: /*
002: * JBoss, Home of Professional Open Source.
003: * Copyright 2006, Red Hat Middleware LLC, and individual contributors
004: * as indicated by the @author tags. See the copyright.txt file in the
005: * distribution for a full listing of individual contributors.
006: *
007: * This is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU Lesser General Public License as
009: * published by the Free Software Foundation; either version 2.1 of
010: * the License, or (at your option) any later version.
011: *
012: * This software is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this software; if not, write to the Free
019: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021: */
022: package org.jboss.ejb;
023:
024: import java.util.Collection;
025:
026: import javax.ejb.EJBMetaData;
027:
028: import org.jboss.invocation.Invocation;
029: import org.jboss.metadata.InvokerProxyBindingMetaData;
030:
031: /**
032: * This is an interface for Container plugins. Implementations of this
033: * interface are responsible for receiving remote invocations of EJB's
034: * and to forward these requests to the Container it is being used with.
035: *
036: * <p>It is responsible for providing any EJBObject and EJBHome
037: * implementations (which may be statically or dynamically created).
038: *
039: * <p>Before forwarding a call to the container it must call
040: * Thread.setContextClassLoader() with the classloader of the container.
041: * It must also handle any propagated transaction and security contexts
042: * properly. It may acquire the TransactionManager from JNDI.
043: *
044: * @see Container
045: *
046: * @author <a href="mailto:rickard.oberg@telkel.com">Rickard �berg</a>
047: * @author <a href="mailto:marc.fleury@telkel.com">Marc Fleury</a>
048: * @version $Revision: 57209 $
049: *
050: *<p><b>20011219 marc fleury:</b>
051: * <ul>
052: * <li>Moved from typed return to Object to allow for optimizations in creation
053: * <li>Per Dain Sundstrom requests removed the Remote Exception.
054: * <li>The Container Invoker is going to be replaced by the ProxyFactory
055: *</ul>
056: */
057: public interface EJBProxyFactory extends GenericEntityObjectFactory,
058: ContainerPlugin {
059: /**
060: * Set the invoker meta data so that the ProxyFactory can initialize properly
061: */
062: void setInvokerMetaData(InvokerProxyBindingMetaData imd);
063:
064: /**
065: * Set the invoker jndi binding
066: */
067: void setInvokerBinding(String binding);
068:
069: /**
070: * Protocol specific isIdentical implementation
071: *
072: * @param container the container
073: * @param mi the invocation
074: * @return true when identical, false otherwise
075: */
076: boolean isIdentical(Container container, Invocation mi);
077:
078: /**
079: * This method is called whenever the metadata for this container is
080: * needed.
081: *
082: * @return An implementation of the EJBMetaData interface.
083: */
084: EJBMetaData getEJBMetaData();
085:
086: /**
087: * This method is called whenever the EJBHome implementation for this
088: * container is needed.
089: *
090: * @return An implementation of the home interface for this container.
091: */
092: Object getEJBHome();
093:
094: /**
095: * This method is called whenever an EJBObject implementation for a
096: * stateless session bean is needed.
097: *
098: * @return An implementation of the remote interface for this container.
099: */
100: Object getStatelessSessionEJBObject();
101:
102: /**
103: * This method is called whenever an EJBObject implementation for a stateful
104: * session bean is needed.
105: *
106: * @param id The id of the session.
107: * @return An implementation of the remote interface for this
108: * container.
109: */
110: Object getStatefulSessionEJBObject(Object id);
111:
112: /**
113: * This method is called whenever an EJBObject implementation for an
114: * entitybean is needed.
115: *
116: * @param id The primary key of the entity.
117: * @return An implementation of the remote interface for this
118: * container.
119: */
120: Object getEntityEJBObject(Object id);
121:
122: /**
123: * This method is called whenever a collection of EJBObjects for a
124: * collection of primary keys is needed.
125: *
126: * @param en Enumeration of primary keys.
127: * @return A collection of EJBObjects implementing the remote
128: * interface for this container.
129: */
130: Collection getEntityCollection(Collection en);
131: }
|