maguro      2005/01/13 12:00:22

  Modified:    modules/core/src/java/org/openejb/corba Adapter.java
                        CORBABean.java POABean.java
  Added:       modules/core/src/java/org/openejb/corba AdapterEntity.java
                        AdapterStateful.java AdapterStateless.java
                        AdapterWrapper.java CORBAException.java
                        OpenORBNameBean.java RefGenerator.java
  Log:

  Add support for CORBA
  Intermediate checkin.
  
  Revision  Changes    Path
  1.2       +101 -15   
openejb/modules/core/src/java/org/openejb/corba/Adapter.java
  
  Index: Adapter.java
  ===================================================================
  RCS file: 
/scm/openejb/openejb/modules/core/src/java/org/openejb/corba/Adapter.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Adapter.java      5 Nov 2004 23:46:13 -0000       1.1
  +++ Adapter.java      13 Jan 2005 17:00:22 -0000      1.2
  @@ -38,39 +38,125 @@
    * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
    * OF THE POSSIBILITY OF SUCH DAMAGE.
    *
  - * Copyright 2001 (C) The OpenEJB Group. All Rights Reserved.
  + * Copyright 2004-2005 (C) The OpenEJB Group. All Rights Reserved.
    *
    * $Id$
    */
   package org.openejb.corba;
   
  -import org.openejb.EJBContainer;
  +import javax.rmi.CORBA.Tie;
  +
   import org.omg.CORBA.ORB;
  +import org.omg.CosNaming.NameComponent;
  +import org.omg.CosNaming.NamingContext;
  +import org.omg.CosNaming.NamingContextExt;
  +import org.omg.CosNaming.NamingContextExtHelper;
  +import org.omg.CosNaming.NamingContextHelper;
  +import org.omg.CosNaming.NamingContextPackage.NotEmpty;
   import org.omg.PortableServer.POA;
  +import org.omg.PortableServer.Servant;
  +
  +import org.openejb.EJBContainer;
  +import org.openejb.corba.util.TieLoader;
  +import org.openejb.proxy.ProxyInfo;
   
   
   /**
  - *
  - *
    * @version $Revision$ $Date$
    */
  -public class Adapter {
  -    private final ORB orb;
  -    private final POA poa;
  +public abstract class Adapter implements RefGenerator {
       private final EJBContainer container;
  +    private final POA parentPOA;
  +    private final NamingContextExt initialContext;
  +    private final TieLoader tieLoader;
  +    private final byte[] home_id;
  +    private final org.omg.CORBA.Object homeReference;
   
  -    public Adapter(ORB orb, POA poa, EJBContainer container) {
  -        this.orb = orb;
  -        this.poa = poa;
  +    protected Adapter(EJBContainer container, ORB orb, POA parentPOA, 
TieLoader tieLoader) throws CORBAException {
           this.container = container;
  +        this.parentPOA = parentPOA;
  +        this.tieLoader = tieLoader;
  +        this.home_id = container.getContainerID().toString().getBytes();
  +
  +
  +        try {
  +            org.omg.CORBA.Object obj = 
orb.resolve_initial_references("NameService");
  +            initialContext = NamingContextExtHelper.narrow(obj);
  +
  +            Servant servant = 
tieLoader.loadTieClass(container.getProxyInfo().getHomeInterface(), 
container.getProxyInfo());
  +            if (servant instanceof Tie) {
  +                ((Tie) servant).setTarget(container.getEJBHome());
  +            }
  +            parentPOA.activate_object_with_id(home_id, servant);
  +            homeReference = parentPOA.servant_to_reference(servant);
  +
  +            String[] names = container.getJndiNames();
  +            for (int i = 0; i < names.length; i++) {
  +                NameComponent[] nameComponent = 
initialContext.to_name(names[i]);
  +                NamingContext currentContext = initialContext;
  +                NameComponent[] nc = new NameComponent[1];
  +                int lastComponent = nameComponent.length - 1;
  +                for (int j = 0; j < lastComponent; ++j) {
  +                    nc[0] = nameComponent[j];
  +                    try {
  +                        currentContext = 
NamingContextHelper.narrow(currentContext.resolve(nc));
  +                    } catch (org.omg.CosNaming.NamingContextPackage.NotFound 
nf) {
  +                        currentContext = currentContext.bind_new_context(nc);
  +                    }
  +                }
  +                nc[0] = nameComponent[lastComponent];
  +                currentContext.rebind(nc, homeReference);
  +                initialContext.resolve(nameComponent);
  +            }
  +        } catch (Exception e) {
  +            throw new CORBAException(e);
  +        }
  +    }
   
  -        String home_name = container.getEJBName();
  -        byte[] objectId = container.getContainerID().toString().getBytes();
  +    public EJBContainer getContainer() {
  +        return container;
  +    }
  +
  +    public NamingContextExt getInitialContext() {
  +        return initialContext;
  +    }
   
  -        byte [] home_id = home_name.getBytes();
  +    public TieLoader getTieLoader() {
  +        return tieLoader;
       }
   
  -    public void stop() {
  +    public org.omg.CORBA.Object getHomeReference() {
  +        return homeReference;
  +    }
   
  +    public void stop() throws CORBAException {
  +        try {
  +            String[] names = container.getJndiNames();
  +            for (int i = 0; i < names.length; i++) {
  +                NameComponent[] nameComponent = 
initialContext.to_name(names[i]);
  +                initialContext.unbind(nameComponent);
  +
  +                for (int j = nameComponent.length - 1; 0 < j; --j) {
  +                    NameComponent[] nc = new NameComponent[j];
  +                    System.arraycopy(nameComponent, 0, nc, 0, j);
  +                    NamingContext currentContext = 
NamingContextHelper.narrow(initialContext.resolve(nc));
  +                    try {
  +                        initialContext.unbind(nc);
  +                        currentContext.destroy();
  +                    } catch (NotEmpty nf) {
  +                        break;
  +                    }
  +                }
  +            }
  +
  +            parentPOA.deactivate_object(home_id);
  +        } catch (Exception e) {
  +            throw new CORBAException(e);
  +        }
       }
  +
  +    public org.omg.CORBA.Object genHomeReference(ProxyInfo proxyInfo) throws 
CORBAException {
  +        return this.getHomeReference();
  +    }
  +
   }
  
  
  
  1.2       +19 -12    
openejb/modules/core/src/java/org/openejb/corba/CORBABean.java
  
  Index: CORBABean.java
  ===================================================================
  RCS file: 
/scm/openejb/openejb/modules/core/src/java/org/openejb/corba/CORBABean.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- CORBABean.java    5 Nov 2004 23:46:13 -0000       1.1
  +++ CORBABean.java    13 Jan 2005 17:00:22 -0000      1.2
  @@ -38,7 +38,7 @@
    * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
    * OF THE POSSIBILITY OF SUCH DAMAGE.
    *
  - * Copyright 2001 (C) The OpenEJB Group. All Rights Reserved.
  + * Copyright 2004-2005 (C) The OpenEJB Group. All Rights Reserved.
    *
    * $Id$
    */
  @@ -57,11 +57,10 @@
   import org.apache.geronimo.gbean.GBeanInfoBuilder;
   import org.apache.geronimo.gbean.GBeanLifecycle;
   import org.apache.geronimo.gbean.WaitingException;
  +import org.apache.geronimo.pool.ThreadPool;
   
   
   /**
  - *
  - *
    * @version $Revision$ $Date$
    */
   public class CORBABean implements GBeanLifecycle {
  @@ -69,6 +68,7 @@
       private final Log log = LogFactory.getLog(CORBABean.class);
   
       private final ClassLoader classLoader;
  +    private final ThreadPool threadPool;
       private ORB orb;
       private POA rootPOA;
       private ArrayList args = new ArrayList();
  @@ -76,10 +76,12 @@
   
       public CORBABean() {
           this.classLoader = null;
  +        this.threadPool = null;
       }
   
  -    public CORBABean(ClassLoader classLoader) {
  +    public CORBABean(ClassLoader classLoader, ThreadPool threadPool) {
           this.classLoader = classLoader;
  +        this.threadPool = threadPool;
       }
   
       public ORB getORB() {
  @@ -118,8 +120,11 @@
   
               rootPOA = POAHelper.narrow(obj);
   
  -//            obj = orb.resolve_initial_references("NameService");
  -//            NamingContextExt initial_context = 
NamingContextExtHelper.narrow(obj);
  +            threadPool.execute(new Runnable() {
  +                public void run() {
  +                    orb.run();
  +                }
  +            });
           } finally {
               Thread.currentThread().setContextClassLoader(savedLoader);
           }
  @@ -128,6 +133,7 @@
       }
   
       public void doStop() throws WaitingException, Exception {
  +        orb.shutdown(true);
           log.info("Stopped CORBABean");
       }
   
  @@ -141,12 +147,13 @@
           GBeanInfoBuilder infoFactory = new GBeanInfoBuilder(CORBABean.class);
   
           infoFactory.addAttribute("classLoader", ClassLoader.class, false);
  +        infoFactory.addReference("ThreadPool", ThreadPool.class);
           infoFactory.addAttribute("ORB", ORB.class, false);
  -        infoFactory.addAttribute("RootPOA", POA.class, false);
  -        infoFactory.addAttribute("Args", ArrayList.class, true);
  -        infoFactory.addAttribute("Props", Properties.class, true);
  +        infoFactory.addAttribute("rootPOA", POA.class, false);
  +        infoFactory.addAttribute("args", ArrayList.class, true);
  +        infoFactory.addAttribute("props", Properties.class, true);
   
  -        infoFactory.setConstructor(new String[]{"classLoader"});
  +        infoFactory.setConstructor(new String[]{"classLoader", 
"ThreadPool"});
   
           GBEAN_INFO = infoFactory.getBeanInfo();
       }
  
  
  
  1.2       +99 -39    
openejb/modules/core/src/java/org/openejb/corba/POABean.java
  
  Index: POABean.java
  ===================================================================
  RCS file: 
/scm/openejb/openejb/modules/core/src/java/org/openejb/corba/POABean.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- POABean.java      5 Nov 2004 23:46:13 -0000       1.1
  +++ POABean.java      13 Jan 2005 17:00:22 -0000      1.2
  @@ -38,7 +38,7 @@
    * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
    * OF THE POSSIBILITY OF SUCH DAMAGE.
    *
  - * Copyright 2001 (C) The OpenEJB Group. All Rights Reserved.
  + * Copyright 2004-2005 (C) The OpenEJB Group. All Rights Reserved.
    *
    * $Id$
    */
  @@ -53,6 +53,8 @@
   import org.apache.commons.logging.Log;
   import org.apache.commons.logging.LogFactory;
   import org.omg.CORBA.Policy;
  +import org.omg.CosNaming.NamingContextExt;
  +import org.omg.CosNaming.NamingContextExtHelper;
   import org.omg.PortableServer.IdAssignmentPolicyValue;
   import org.omg.PortableServer.ImplicitActivationPolicyValue;
   import org.omg.PortableServer.LifespanPolicyValue;
  @@ -69,6 +71,8 @@
   import org.apache.geronimo.gbean.WaitingException;
   
   import org.openejb.EJBContainer;
  +import org.openejb.corba.util.TieLoader;
  +import org.openejb.corba.util.UtilDelegateImpl;
   
   
   /**
  @@ -78,29 +82,34 @@
   
       private final Log log = LogFactory.getLog(POABean.class);
   
  -    private CORBABean server;
  +    private final ClassLoader classLoader;
  +    private final String POAName;
  +    private final CORBABean server;
  +    private final TieLoader tieLoader;
       private POA localPOA;
  -    private String POAName;
  +    private NamingContextExt initialContext;
       private Collection containers = Collections.EMPTY_SET;
       private Map adapters = new HashMap();
  +    private static final Map containerMap = new HashMap();
   
   
  -    public CORBABean getServer() {
  -        return server;
  +    public POABean(ClassLoader classLoader, String POAName, CORBABean 
server, TieLoader tieLoader) {
  +        this.classLoader = classLoader;
  +        this.POAName = POAName;
  +        this.server = server;
  +        this.tieLoader = tieLoader;
  +
  +        UtilDelegateImpl.setTieLoader(tieLoader);
       }
   
  -    public void setServer(CORBABean server) {
  -        this.server = server;
  +    public CORBABean getServer() {
  +        return server;
       }
   
       public String getPOAName() {
           return POAName;
       }
   
  -    public void setPOAName(String POAName) {
  -        this.POAName = POAName;
  -    }
  -
       public Collection getContainers() {
           return containers;
       }
  @@ -112,25 +121,47 @@
           this.containers = containers;
       }
   
  -    public void doStart() throws WaitingException, Exception {
  -        POA rootPOA = server.getRootPOA();
  +    public TieLoader getTieLoader() {
  +        return tieLoader;
  +    }
   
  -        Policy[] policies = new Policy[]{
  -            rootPOA.create_lifespan_policy(LifespanPolicyValue.PERSISTENT),
  -            
rootPOA.create_request_processing_policy(RequestProcessingPolicyValue.USE_ACTIVE_OBJECT_MAP_ONLY),
  -            
rootPOA.create_servant_retention_policy(ServantRetentionPolicyValue.RETAIN),
  -            
rootPOA.create_id_assignment_policy(IdAssignmentPolicyValue.USER_ID),
  -            
rootPOA.create_implicit_activation_policy(ImplicitActivationPolicyValue.NO_IMPLICIT_ACTIVATION),
  -        };
  -        localPOA = rootPOA.create_POA(POAName, rootPOA.the_POAManager(), 
policies);
  -
  -        localPOA.the_POAManager().activate();
  -
  -        Iterator iter = containers.iterator();
  -        while (iter.hasNext()) {
  -            EJBContainer container = (EJBContainer) iter.next();
  +    public static EJBContainer getContainer(String containerId) {
  +        return (EJBContainer) containerMap.get(containerId);
  +    }
   
  -            adapters.put(container.getContainerID(), new 
Adapter(server.getORB(), localPOA, container));
  +    public void doStart() throws WaitingException, Exception {
  +        ClassLoader savedLoader = 
Thread.currentThread().getContextClassLoader();
  +        try {
  +            Thread.currentThread().setContextClassLoader(classLoader);
  +
  +            POA rootPOA = server.getRootPOA();
  +
  +            Policy[] policies = new Policy[]{
  +                
rootPOA.create_lifespan_policy(LifespanPolicyValue.TRANSIENT),
  +                
rootPOA.create_request_processing_policy(RequestProcessingPolicyValue.USE_ACTIVE_OBJECT_MAP_ONLY),
  +                
rootPOA.create_servant_retention_policy(ServantRetentionPolicyValue.RETAIN),
  +                
rootPOA.create_id_assignment_policy(IdAssignmentPolicyValue.USER_ID),
  +                
rootPOA.create_implicit_activation_policy(ImplicitActivationPolicyValue.NO_IMPLICIT_ACTIVATION),
  +            };
  +            localPOA = rootPOA.create_POA(POAName, rootPOA.the_POAManager(), 
policies);
  +
  +            localPOA.the_POAManager().activate();
  +
  +            org.omg.CORBA.Object obj = 
server.getORB().resolve_initial_references("NameService");
  +            initialContext = NamingContextExtHelper.narrow(obj);
  +
  +            for (Iterator iter = adapters.keySet().iterator(); 
iter.hasNext();) {
  +                AdapterWrapper adapterWrapper = (AdapterWrapper) 
adapters.get(iter.next());
  +                try {
  +                    adapterWrapper.start(server.getORB(), localPOA, 
initialContext, tieLoader);
  +                    log.info("Linked container " + 
adapterWrapper.getContainer().getContainerID());
  +                } catch (CORBAException e) {
  +                    log.error("Unable to link container " + 
adapterWrapper.getContainer().getContainerID());
  +                    log.error(e);
  +                }
  +            }
  +        } finally {
  +            Thread.currentThread().setContextClassLoader(savedLoader);
           }
   
           log.info("Started POABean");
  @@ -138,10 +169,17 @@
   
       public void doStop() throws WaitingException, Exception {
           if (localPOA != null) {
  -            Iterator iter = adapters.keySet().iterator();
  -            while (iter.hasNext()) {
  -                ((Adapter) adapters.remove(iter.next())).stop();
  +            for (Iterator iter = adapters.keySet().iterator(); 
iter.hasNext();) {
  +                AdapterWrapper adapterWrapper = (AdapterWrapper) 
adapters.get(iter.next());
  +                try {
  +                    adapterWrapper.stop();
  +                    log.info("Unlinked container " + 
adapterWrapper.getContainer().getContainerID());
  +                } catch (CORBAException e) {
  +                    log.error("Error unlinking container " + 
adapterWrapper.getContainer().getContainerID());
  +                    log.error(e);
  +                }
               }
  +            adapters.clear();
               localPOA.the_POAManager().deactivate(true, true);
               localPOA = null;
           }
  @@ -157,9 +195,12 @@
       static {
           GBeanInfoBuilder infoFactory = new GBeanInfoBuilder(POABean.class);
   
  +        infoFactory.addAttribute("classLoader", ClassLoader.class, false);
           infoFactory.addAttribute("POAName", String.class, true);
           infoFactory.addReference("Server", CORBABean.class);
           infoFactory.addReference("Containers", EJBContainer.class);
  +        infoFactory.addReference("TieLoader", TieLoader.class);
  +        infoFactory.setConstructor(new String[]{"classLoader", "POAName", 
"Server", "TieLoader"});
   
           GBEAN_INFO = infoFactory.getBeanInfo();
       }
  @@ -170,19 +211,38 @@
   
       public void memberAdded(ReferenceCollectionEvent event) {
           EJBContainer container = (EJBContainer) event.getMember();
  +
  +        containerMap.put(container.getContainerID(), container);
  +
           if (localPOA != null) {
  -            adapters.put(container.getContainerID(), new 
Adapter(server.getORB(), localPOA, container));
  +            try {
  +                AdapterWrapper adapterWrapper = new 
AdapterWrapper(container);
  +
  +                adapterWrapper.start(server.getORB(), localPOA, 
initialContext, tieLoader);
  +                adapters.put(container.getContainerID(), adapterWrapper);
  +
  +                log.info("Linked container " + container.getContainerID());
  +            } catch (CORBAException e) {
  +                log.error("Unable to link container " + 
container.getContainerID());
  +                log.error(e);
  +            }
           }
  -        log.info("Linked container " + container.getContainerID());
       }
   
       public void memberRemoved(ReferenceCollectionEvent event) {
           EJBContainer container = (EJBContainer) event.getMember();
   
  -        Adapter adapter = (Adapter) 
adapters.remove(container.getContainerID());
  -        if (adapter != null) {
  -            adapter.stop();
  +        containerMap.remove(container.getContainerID());
  +
  +        AdapterWrapper adapterWrapper = (AdapterWrapper) 
adapters.remove(container.getContainerID());
  +        if (adapterWrapper != null) {
  +            try {
  +                adapterWrapper.stop();
  +                log.info("Unlinked container " + container.getContainerID());
  +            } catch (CORBAException e) {
  +                log.error("Error unlinking container " + 
container.getContainerID());
  +                log.error(e);
  +            }
           }
  -        log.info("Unlinked container " + container.getContainerID());
       }
   }
  
  
  
  1.1                  
openejb/modules/core/src/java/org/openejb/corba/AdapterEntity.java
  
  Index: AdapterEntity.java
  ===================================================================
  /**
   * Redistribution and use of this software and associated documentation
   * ("Software"), with or without modification, are permitted provided
   * that the following conditions are met:
   *
   * 1. Redistributions of source code must retain copyright
   *    statements and notices.  Redistributions must also contain a
   *    copy of this document.
   *
   * 2. Redistributions in binary form must reproduce the
   *    above copyright notice, this list of conditions and the
   *    following disclaimer in the documentation and/or other
   *    materials provided with the distribution.
   *
   * 3. The name "OpenEJB" must not be used to endorse or promote
   *    products derived from this Software without prior written
   *    permission of The OpenEJB Group.  For written permission,
   *    please contact [EMAIL PROTECTED]
   *
   * 4. Products derived from this Software may not be called "OpenEJB"
   *    nor may "OpenEJB" appear in their names without prior written
   *    permission of The OpenEJB Group. OpenEJB is a registered
   *    trademark of The OpenEJB Group.
   *
   * 5. Due credit should be given to the OpenEJB Project
   *    (http://openejb.sf.net/).
   *
   * THIS SOFTWARE IS PROVIDED BY THE OPENEJB GROUP AND CONTRIBUTORS
   * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
   * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
   * THE OPENEJB GROUP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
   * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   * OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   * Copyright 2004-2005 (C) The OpenEJB Group. All Rights Reserved.
   *
   * $Id: AdapterEntity.java,v 1.1 2005/01/13 17:00:22 maguro Exp $
   */
  package org.openejb.corba;
  
  import java.io.ByteArrayInputStream;
  import java.io.ByteArrayOutputStream;
  import java.io.IOException;
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
  import javax.rmi.CORBA.Tie;
  
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  import org.omg.CORBA.LocalObject;
  import org.omg.CORBA.OBJECT_NOT_EXIST;
  import org.omg.CORBA.ORB;
  import org.omg.CORBA.Policy;
  import org.omg.PortableServer.IdAssignmentPolicyValue;
  import org.omg.PortableServer.ImplicitActivationPolicyValue;
  import org.omg.PortableServer.LifespanPolicyValue;
  import org.omg.PortableServer.POA;
  import org.omg.PortableServer.POAManagerPackage.AdapterInactive;
  import org.omg.PortableServer.RequestProcessingPolicyValue;
  import org.omg.PortableServer.Servant;
  import org.omg.PortableServer.ServantLocator;
  import org.omg.PortableServer.ServantLocatorPackage.CookieHolder;
  import org.omg.PortableServer.ServantRetentionPolicyValue;
  
  import org.openejb.EJBContainer;
  import org.openejb.corba.util.TieLoader;
  import org.openejb.proxy.ProxyInfo;
  
  
  /**
   * @version $Revision: 1.1 $ $Date: 2005/01/13 17:00:22 $
   */
  public final class AdapterEntity extends Adapter {
  
      private final Log log = LogFactory.getLog(AdapterEntity.class);
  
      private final POA poa;
      private final String referenceInterface;
  
      public AdapterEntity(EJBContainer container, ORB orb, POA parentPOA, 
TieLoader tieLoader) throws CORBAException {
          super(container, orb, parentPOA, tieLoader);
  
          try {
              Policy[] policies = new Policy[]{
                  
parentPOA.create_lifespan_policy(LifespanPolicyValue.PERSISTENT),
                  
parentPOA.create_request_processing_policy(RequestProcessingPolicyValue.USE_SERVANT_MANAGER),
                  
parentPOA.create_servant_retention_policy(ServantRetentionPolicyValue.NON_RETAIN),
                  
parentPOA.create_id_assignment_policy(IdAssignmentPolicyValue.USER_ID),
                  
parentPOA.create_implicit_activation_policy(ImplicitActivationPolicyValue.NO_IMPLICIT_ACTIVATION),
              };
              poa = parentPOA.create_POA(container.getContainerID().toString(), 
parentPOA.the_POAManager(), policies);
              poa.set_servant_manager(new ObjectActivator());
  
              poa.the_POAManager().activate();
  
              Servant servant = 
getTieLoader().loadTieClass(container.getProxyInfo().getRemoteInterface(), 
container.getProxyInfo());
              referenceInterface = servant._all_interfaces(null, null)[0];
          } catch (Exception e) {
              throw new CORBAException(e);
          }
      }
  
      public POA getPOA() {
          return poa;
      }
  
      public void stop() throws CORBAException {
          try {
              poa.the_POAManager().deactivate(true, true);
          } catch (AdapterInactive e) {
              throw new CORBAException(e);
          }
      }
  
      public org.omg.CORBA.Object genObjectReference(ProxyInfo proxyInfo) 
throws CORBAException {
  
          byte[] bytes = null;
          try {
              ByteArrayOutputStream b = new ByteArrayOutputStream();
              ObjectOutputStream os = new ObjectOutputStream(b);
  
              os.writeObject(proxyInfo.getPrimaryKey());
              bytes = b.toByteArray();
  
              os.close();
          } catch (IOException e) {
              log.error("Could not serialize deployment info for " + proxyInfo, 
e);
              throw new CORBAException(e);
          }
          return poa.create_reference_with_id(bytes, referenceInterface);
      }
  
      protected class ObjectActivator extends LocalObject implements 
ServantLocator {
  
          public Servant preinvoke(byte[] oid, POA poa, String operation, 
CookieHolder cookie) {
              // the byte array can be cached in a weak hash map for performance
              Object pk = null;
  
              try {
                  ObjectInputStream is = new ObjectInputStream(new 
ByteArrayInputStream(oid));
                  pk = is.readObject();
                  is.close();
  
                  EJBContainer container = getContainer();
                  Servant servant = 
getTieLoader().loadTieClass(container.getProxyInfo().getRemoteInterface(), 
container.getProxyInfo());
                  if (servant instanceof Tie) {
                      ((Tie) 
servant).setTarget(container.getProxyFactory().getEJBObject(pk));
                  }
                  return servant;
              } catch (IOException e) {
                  // if we can't deserialize, then this object can't exist in 
this process
                  throw new OBJECT_NOT_EXIST(0, 
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
              } catch (Exception e) {
                  log.error("Exception during dispatch to method " + operation 
+ " in bean " + pk, e);
                  return null;
              }
          }
  
          public void postinvoke(byte[] oid, POA poa, String operation, Object 
cookie, Servant servant) {
          }
      }
  
  }
  
  
  
  1.1                  
openejb/modules/core/src/java/org/openejb/corba/AdapterStateful.java
  
  Index: AdapterStateful.java
  ===================================================================
  /**
   * Redistribution and use of this software and associated documentation
   * ("Software"), with or without modification, are permitted provided
   * that the following conditions are met:
   *
   * 1. Redistributions of source code must retain copyright
   *    statements and notices.  Redistributions must also contain a
   *    copy of this document.
   *
   * 2. Redistributions in binary form must reproduce the
   *    above copyright notice, this list of conditions and the
   *    following disclaimer in the documentation and/or other
   *    materials provided with the distribution.
   *
   * 3. The name "OpenEJB" must not be used to endorse or promote
   *    products derived from this Software without prior written
   *    permission of The OpenEJB Group.  For written permission,
   *    please contact [EMAIL PROTECTED]
   *
   * 4. Products derived from this Software may not be called "OpenEJB"
   *    nor may "OpenEJB" appear in their names without prior written
   *    permission of The OpenEJB Group. OpenEJB is a registered
   *    trademark of The OpenEJB Group.
   *
   * 5. Due credit should be given to the OpenEJB Project
   *    (http://openejb.sf.net/).
   *
   * THIS SOFTWARE IS PROVIDED BY THE OPENEJB GROUP AND CONTRIBUTORS
   * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
   * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
   * THE OPENEJB GROUP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
   * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   * OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   * Copyright 2004-2005 (C) The OpenEJB Group. All Rights Reserved.
   *
   * $Id: AdapterStateful.java,v 1.1 2005/01/13 17:00:22 maguro Exp $
   */
  package org.openejb.corba;
  
  import java.io.ByteArrayInputStream;
  import java.io.ByteArrayOutputStream;
  import java.io.IOException;
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
  import javax.rmi.CORBA.Tie;
  
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  import org.omg.CORBA.LocalObject;
  import org.omg.CORBA.OBJECT_NOT_EXIST;
  import org.omg.CORBA.ORB;
  import org.omg.CORBA.Policy;
  import org.omg.PortableServer.IdAssignmentPolicyValue;
  import org.omg.PortableServer.ImplicitActivationPolicyValue;
  import org.omg.PortableServer.LifespanPolicyValue;
  import org.omg.PortableServer.POA;
  import org.omg.PortableServer.POAManagerPackage.AdapterInactive;
  import org.omg.PortableServer.RequestProcessingPolicyValue;
  import org.omg.PortableServer.Servant;
  import org.omg.PortableServer.ServantLocator;
  import org.omg.PortableServer.ServantLocatorPackage.CookieHolder;
  import org.omg.PortableServer.ServantRetentionPolicyValue;
  
  import org.openejb.EJBContainer;
  import org.openejb.corba.util.TieLoader;
  import org.openejb.proxy.ProxyInfo;
  
  
  /**
   * @version $Revision: 1.1 $ $Date: 2005/01/13 17:00:22 $
   */
  public class AdapterStateful extends Adapter {
  
      private final Log log = LogFactory.getLog(AdapterStateful.class);
  
      private final POA poa;
      private final String referenceInterface;
  
      public AdapterStateful(EJBContainer container, ORB orb, POA parentPOA, 
TieLoader tieLoader) throws CORBAException {
          super(container, orb, parentPOA, tieLoader);
  
          try {
              Policy[] policies = new Policy[]{
                  
parentPOA.create_lifespan_policy(LifespanPolicyValue.TRANSIENT),
                  
parentPOA.create_request_processing_policy(RequestProcessingPolicyValue.USE_SERVANT_MANAGER),
                  
parentPOA.create_servant_retention_policy(ServantRetentionPolicyValue.NON_RETAIN),
                  
parentPOA.create_id_assignment_policy(IdAssignmentPolicyValue.USER_ID),
                  
parentPOA.create_implicit_activation_policy(ImplicitActivationPolicyValue.NO_IMPLICIT_ACTIVATION),
              };
              poa = parentPOA.create_POA(container.getContainerID().toString(), 
parentPOA.the_POAManager(), policies);
              poa.set_servant_manager(new ObjectActivator());
  
              poa.the_POAManager().activate();
  
              Servant servant = 
getTieLoader().loadTieClass(container.getProxyInfo().getRemoteInterface(), 
container.getProxyInfo());
              referenceInterface = servant._all_interfaces(null, null)[0];
          } catch (Exception e) {
              throw new CORBAException(e);
          }
      }
  
      public POA getPOA() {
          return poa;
      }
  
      public void stop() throws CORBAException {
          try {
              poa.the_POAManager().deactivate(true, true);
          } catch (AdapterInactive e) {
              throw new CORBAException(e);
          }
      }
  
      public org.omg.CORBA.Object genObjectReference(ProxyInfo proxyInfo) 
throws CORBAException {
  
          byte[] bytes = null;
          try {
              ByteArrayOutputStream b = new ByteArrayOutputStream();
              ObjectOutputStream os = new ObjectOutputStream(b);
  
              os.writeObject(proxyInfo.getPrimaryKey());
              bytes = b.toByteArray();
  
              os.close();
          } catch (IOException e) {
              log.error("Could not serialize deployment info for " + proxyInfo, 
e);
              throw new CORBAException(e);
          }
          return poa.create_reference_with_id(bytes, referenceInterface);
      }
  
      protected class ObjectActivator extends LocalObject implements 
ServantLocator {
  
          public Servant preinvoke(byte[] oid, POA poa, String operation, 
CookieHolder cookie) {
              // the byte array can be cached in a weak hash map for performance
              Object pk = null;
  
              try {
                  ObjectInputStream is = new ObjectInputStream(new 
ByteArrayInputStream(oid));
                  pk = is.readObject();
                  is.close();
  
                  EJBContainer container = getContainer();
                  Servant servant = 
getTieLoader().loadTieClass(container.getProxyInfo().getRemoteInterface(), 
container.getProxyInfo());
                  if (servant instanceof Tie) {
                      ((Tie) 
servant).setTarget(container.getProxyFactory().getEJBObject(pk));
                  }
                  return servant;
              } catch (IOException e) {
                  // if we can't deserialize, then this object can't exist in 
this process
                  throw new OBJECT_NOT_EXIST(0, 
org.omg.CORBA.CompletionStatus.COMPLETED_NO);
              } catch (Exception e) {
                  log.error("Exception during dispatch to method " + operation 
+ " in bean " + pk, e);
                  return null;
              }
          }
  
          public void postinvoke(byte[] oid, POA poa, String operation, Object 
cookie, Servant servant) {
          }
      }
  
  }
  
  
  
  1.1                  
openejb/modules/core/src/java/org/openejb/corba/AdapterStateless.java
  
  Index: AdapterStateless.java
  ===================================================================
  /**
   * Redistribution and use of this software and associated documentation
   * ("Software"), with or without modification, are permitted provided
   * that the following conditions are met:
   *
   * 1. Redistributions of source code must retain copyright
   *    statements and notices.  Redistributions must also contain a
   *    copy of this document.
   *
   * 2. Redistributions in binary form must reproduce the
   *    above copyright notice, this list of conditions and the
   *    following disclaimer in the documentation and/or other
   *    materials provided with the distribution.
   *
   * 3. The name "OpenEJB" must not be used to endorse or promote
   *    products derived from this Software without prior written
   *    permission of The OpenEJB Group.  For written permission,
   *    please contact [EMAIL PROTECTED]
   *
   * 4. Products derived from this Software may not be called "OpenEJB"
   *    nor may "OpenEJB" appear in their names without prior written
   *    permission of The OpenEJB Group. OpenEJB is a registered
   *    trademark of The OpenEJB Group.
   *
   * 5. Due credit should be given to the OpenEJB Project
   *    (http://openejb.sf.net/).
   *
   * THIS SOFTWARE IS PROVIDED BY THE OPENEJB GROUP AND CONTRIBUTORS
   * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
   * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
   * THE OPENEJB GROUP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
   * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   * OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   * Copyright 2004-2005 (C) The OpenEJB Group. All Rights Reserved.
   *
   * $Id: AdapterStateless.java,v 1.1 2005/01/13 17:00:22 maguro Exp $
   */
  package org.openejb.corba;
  
  import java.rmi.Remote;
  import javax.rmi.CORBA.Tie;
  
  import org.omg.CORBA.ORB;
  import org.omg.CORBA.Policy;
  import org.omg.PortableServer.IdAssignmentPolicyValue;
  import org.omg.PortableServer.ImplicitActivationPolicyValue;
  import org.omg.PortableServer.LifespanPolicyValue;
  import org.omg.PortableServer.POA;
  import org.omg.PortableServer.POAManagerPackage.AdapterInactive;
  import org.omg.PortableServer.RequestProcessingPolicyValue;
  import org.omg.PortableServer.Servant;
  import org.omg.PortableServer.ServantRetentionPolicyValue;
  
  import org.openejb.EJBContainer;
  import org.openejb.corba.util.TieLoader;
  import org.openejb.proxy.ProxyInfo;
  
  
  /**
   * @version $Revision: 1.1 $ $Date: 2005/01/13 17:00:22 $
   */
  public final class AdapterStateless extends Adapter {
  
      private POA poa;
      private org.omg.CORBA.Object objectReference;
  
      public AdapterStateless(EJBContainer container, ORB orb, POA parentPOA, 
TieLoader tieLoader) throws CORBAException {
          super(container, orb, parentPOA, tieLoader);
  
          try {
              Policy[] policies = new Policy[]{
                  
parentPOA.create_lifespan_policy(LifespanPolicyValue.TRANSIENT),
                  
parentPOA.create_request_processing_policy(RequestProcessingPolicyValue.USE_ACTIVE_OBJECT_MAP_ONLY),
                  
parentPOA.create_servant_retention_policy(ServantRetentionPolicyValue.RETAIN),
                  
parentPOA.create_id_assignment_policy(IdAssignmentPolicyValue.USER_ID),
                  
parentPOA.create_implicit_activation_policy(ImplicitActivationPolicyValue.NO_IMPLICIT_ACTIVATION),
              };
              poa = parentPOA.create_POA(container.getContainerID().toString(), 
parentPOA.the_POAManager(), policies);
  
              poa.the_POAManager().activate();
  
              Servant servant = 
tieLoader.loadTieClass(container.getProxyInfo().getRemoteInterface(), 
container.getProxyInfo());
              Remote obj = container.getProxyFactory().getEJBObject(null);
              if (servant instanceof Tie) {
                  ((Tie) servant).setTarget(obj);
              }
  
              
poa.activate_object_with_id(container.getContainerID().toString().getBytes(), 
servant);
              objectReference = poa.servant_to_reference(servant);
          } catch (Exception e) {
              throw new CORBAException(e);
          }
      }
  
      public void stop() throws CORBAException {
          try {
              poa.the_POAManager().deactivate(true, true);
          } catch (AdapterInactive e) {
              throw new CORBAException(e);
          }
      }
  
      public org.omg.CORBA.Object genObjectReference(ProxyInfo proxyInfo) {
          return objectReference;
      }
  
  }
  
  
  
  1.1                  
openejb/modules/core/src/java/org/openejb/corba/AdapterWrapper.java
  
  Index: AdapterWrapper.java
  ===================================================================
  /**
   * Redistribution and use of this software and associated documentation
   * ("Software"), with or without modification, are permitted provided
   * that the following conditions are met:
   *
   * 1. Redistributions of source code must retain copyright
   *    statements and notices.  Redistributions must also contain a
   *    copy of this document.
   *
   * 2. Redistributions in binary form must reproduce the
   *    above copyright notice, this list of conditions and the
   *    following disclaimer in the documentation and/or other
   *    materials provided with the distribution.
   *
   * 3. The name "OpenEJB" must not be used to endorse or promote
   *    products derived from this Software without prior written
   *    permission of The OpenEJB Group.  For written permission,
   *    please contact [EMAIL PROTECTED]
   *
   * 4. Products derived from this Software may not be called "OpenEJB"
   *    nor may "OpenEJB" appear in their names without prior written
   *    permission of The OpenEJB Group. OpenEJB is a registered
   *    trademark of The OpenEJB Group.
   *
   * 5. Due credit should be given to the OpenEJB Project
   *    (http://openejb.sf.net/).
   *
   * THIS SOFTWARE IS PROVIDED BY THE OPENEJB GROUP AND CONTRIBUTORS
   * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
   * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
   * THE OPENEJB GROUP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
   * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   * OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   * Copyright 2004-2005 (C) The OpenEJB Group. All Rights Reserved.
   *
   * $Id: AdapterWrapper.java,v 1.1 2005/01/13 17:00:22 maguro Exp $
   */
  package org.openejb.corba;
  
  import java.util.HashMap;
  import java.util.Map;
  
  import org.omg.CORBA.ORB;
  import org.omg.CosNaming.NamingContextExt;
  import org.omg.PortableServer.POA;
  
  import org.openejb.EJBComponentType;
  import org.openejb.EJBContainer;
  import org.openejb.corba.util.TieLoader;
  
  
  /**
   * @version $Revision: 1.1 $ $Date: 2005/01/13 17:00:22 $
   */
  public final class AdapterWrapper {
      private final static Map adapters = new HashMap();
      private final EJBContainer container;
      private Adapter generator;
  
      public AdapterWrapper(EJBContainer container) {
          this.container = container;
  
      }
  
      public EJBContainer getContainer() {
          return container;
      }
  
      public void start(ORB orb, POA poa, NamingContextExt initialContext, 
TieLoader tieLoader) throws CORBAException {
          switch (container.getProxyInfo().getComponentType()) {
              case EJBComponentType.STATELESS:
                  generator = new AdapterStateless(container, orb, poa, 
tieLoader);
                  break;
              case EJBComponentType.STATEFUL:
                  generator = new AdapterStateful(container, orb, poa, 
tieLoader);
                  break;
              case EJBComponentType.BMP_ENTITY:
              case EJBComponentType.CMP_ENTITY:
                  generator = new AdapterEntity(container, orb, poa, tieLoader);
                  break;
              default:
                  throw new CORBAException("CORBA Adapter does not handle MDB 
containers");
          }
          adapters.put(container.getContainerID(), generator);
      }
  
      public void stop() throws CORBAException {
          generator.stop();
          adapters.remove(container.getContainerID());
  
      }
  
      public static RefGenerator getRefGenerator(String containerId) {
          return (RefGenerator) adapters.get(containerId);
      }
  }
  
  
  
  1.1                  
openejb/modules/core/src/java/org/openejb/corba/CORBAException.java
  
  Index: CORBAException.java
  ===================================================================
  /**
   * Redistribution and use of this software and associated documentation
   * ("Software"), with or without modification, are permitted provided
   * that the following conditions are met:
   *
   * 1. Redistributions of source code must retain copyright
   *    statements and notices.  Redistributions must also contain a
   *    copy of this document.
   *
   * 2. Redistributions in binary form must reproduce the
   *    above copyright notice, this list of conditions and the
   *    following disclaimer in the documentation and/or other
   *    materials provided with the distribution.
   *
   * 3. The name "OpenEJB" must not be used to endorse or promote
   *    products derived from this Software without prior written
   *    permission of The OpenEJB Group.  For written permission,
   *    please contact [EMAIL PROTECTED]
   *
   * 4. Products derived from this Software may not be called "OpenEJB"
   *    nor may "OpenEJB" appear in their names without prior written
   *    permission of The OpenEJB Group. OpenEJB is a registered
   *    trademark of The OpenEJB Group.
   *
   * 5. Due credit should be given to the OpenEJB Project
   *    (http://openejb.sf.net/).
   *
   * THIS SOFTWARE IS PROVIDED BY THE OPENEJB GROUP AND CONTRIBUTORS
   * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
   * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
   * THE OPENEJB GROUP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
   * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   * OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   * Copyright 2004-2005 (C) The OpenEJB Group. All Rights Reserved.
   *
   * $Id: CORBAException.java,v 1.1 2005/01/13 17:00:22 maguro Exp $
   */
  package org.openejb.corba;
  
  
  /**
   * @version $Revision: 1.1 $ $Date: 2005/01/13 17:00:22 $
   */
  public class CORBAException extends Exception {
      public CORBAException() {
          super();
      }
  
      public CORBAException(String message) {
          super(message);
      }
  
      public CORBAException(String message, Throwable cause) {
          super(message, cause);
      }
  
      public CORBAException(Throwable cause) {
          super(cause);
      }
  }
  
  
  
  1.1                  
openejb/modules/core/src/java/org/openejb/corba/OpenORBNameBean.java
  
  Index: OpenORBNameBean.java
  ===================================================================
  /**
   * Redistribution and use of this software and associated documentation
   * ("Software"), with or without modification, are permitted provided
   * that the following conditions are met:
   *
   * 1. Redistributions of source code must retain copyright
   *    statements and notices.  Redistributions must also contain a
   *    copy of this document.
   *
   * 2. Redistributions in binary form must reproduce the
   *    above copyright notice, this list of conditions and the
   *    following disclaimer in the documentation and/or other
   *    materials provided with the distribution.
   *
   * 3. The name "OpenEJB" must not be used to endorse or promote
   *    products derived from this Software without prior written
   *    permission of The OpenEJB Group.  For written permission,
   *    please contact [EMAIL PROTECTED]
   *
   * 4. Products derived from this Software may not be called "OpenEJB"
   *    nor may "OpenEJB" appear in their names without prior written
   *    permission of The OpenEJB Group. OpenEJB is a registered
   *    trademark of The OpenEJB Group.
   *
   * 5. Due credit should be given to the OpenEJB Project
   *    (http://openejb.sf.net/).
   *
   * THIS SOFTWARE IS PROVIDED BY THE OPENEJB GROUP AND CONTRIBUTORS
   * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
   * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
   * THE OPENEJB GROUP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
   * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   * OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   * Copyright 2005 (C) The OpenEJB Group. All Rights Reserved.
   *
   * $Id: OpenORBNameBean.java,v 1.1 2005/01/13 17:00:22 maguro Exp $
   */
  package org.openejb.corba;
  
  import java.util.ArrayList;
  import java.util.Properties;
  
  import org.apache.commons.cli.Option;
  import org.apache.commons.cli.OptionBuilder;
  import org.apache.commons.cli.Options;
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  import org.openorb.ins.Server;
  import org.openorb.ins.Service;
  
  import org.apache.geronimo.gbean.GBeanInfo;
  import org.apache.geronimo.gbean.GBeanInfoBuilder;
  import org.apache.geronimo.gbean.GBeanLifecycle;
  import org.apache.geronimo.gbean.WaitingException;
  import org.apache.geronimo.pool.ThreadPool;
  
  
  /**
   * @version $Revision: 1.1 $ $Date: 2005/01/13 17:00:22 $
   */
  public class OpenORBNameBean implements GBeanLifecycle {
  
      private final Log log = LogFactory.getLog(OpenORBNameBean.class);
  
      private final ClassLoader classLoader;
      private final Server server;
      private final ThreadPool threadPool;
      private ArrayList args = new ArrayList();
      private Properties props = new Properties();
  
      public OpenORBNameBean() {
          this.classLoader = null;
          this.server = null;
          this.threadPool = null;
          this.args = null;
          this.props = null;
      }
  
      public OpenORBNameBean(ClassLoader classLoader, ThreadPool threadPool, 
ArrayList args, Properties props) {
          this.server = new Server();
          this.classLoader = classLoader;
          this.threadPool = threadPool;
          this.args = args;
          this.props = props;
  
          ClassLoader savedLoader = 
Thread.currentThread().getContextClassLoader();
          try {
              Thread.currentThread().setContextClassLoader(classLoader);
  
              Options options = new Options();
              // persistenceType
              
options.addOption(OptionBuilder.withArgName(Service.OPT_PERSISTENCE_ARG_NAME)
                                .hasArg()
                                
.withDescription(Service.OPT_PERSISTENCE_DESCRIP)
                                .withLongOpt(Service.OPT_PERSISTENCE_LONG)
                                .create(Service.OPT_PERSISTENCE));
              // shutdown
              options.addOption(new Option(Service.OPT_SHUTDOWN_ROOT,
                                           Service.OPT_SHUTDOWN_ROOT_LONG, 
false,
                                           Service.OPT_SHUTDOWN_ROOT_DESCRIP));
  
              // make sure to import the pss config
              props.put("ImportModule.pss", 
"${openorb.home}config/pss.xml#pss");
              server.init((String[]) args.toArray(new String[args.size()]), 
options, props);
          } finally {
              Thread.currentThread().setContextClassLoader(savedLoader);
          }
      }
  
      public ArrayList getArgs() {
          return args;
      }
  
      public Properties getProps() {
          return props;
      }
  
      public void doStart() throws WaitingException, Exception {
          threadPool.execute(new Runnable() {
              public void run() {
                  Thread.currentThread().setContextClassLoader(classLoader);
                  server.run();
              }
          });
  
          log.info("Started OpenORBNameBean");
      }
  
      public void doStop() throws WaitingException, Exception {
          server.getORB().shutdown(true);
  
          log.info("Stopped OpenORBNameBean");
      }
  
      public void doFail() {
          log.info("Failed OpenORBNameBean");
      }
  
      public static final GBeanInfo GBEAN_INFO;
  
      static {
          GBeanInfoBuilder infoFactory = new 
GBeanInfoBuilder(OpenORBNameBean.class);
  
          infoFactory.addAttribute("classLoader", ClassLoader.class, false);
          infoFactory.addReference("ThreadPool", ThreadPool.class);
          infoFactory.addAttribute("args", ArrayList.class, true);
          infoFactory.addAttribute("props", Properties.class, true);
  
          infoFactory.setConstructor(new String[]{"classLoader", "ThreadPool", 
"args", "props"});
  
          GBEAN_INFO = infoFactory.getBeanInfo();
      }
  
      public static GBeanInfo getGBeanInfo() {
          return GBEAN_INFO;
      }
  }
  
  
  
  1.1                  
openejb/modules/core/src/java/org/openejb/corba/RefGenerator.java
  
  Index: RefGenerator.java
  ===================================================================
  /**
   * Redistribution and use of this software and associated documentation
   * ("Software"), with or without modification, are permitted provided
   * that the following conditions are met:
   *
   * 1. Redistributions of source code must retain copyright
   *    statements and notices.  Redistributions must also contain a
   *    copy of this document.
   *
   * 2. Redistributions in binary form must reproduce the
   *    above copyright notice, this list of conditions and the
   *    following disclaimer in the documentation and/or other
   *    materials provided with the distribution.
   *
   * 3. The name "OpenEJB" must not be used to endorse or promote
   *    products derived from this Software without prior written
   *    permission of The OpenEJB Group.  For written permission,
   *    please contact [EMAIL PROTECTED]
   *
   * 4. Products derived from this Software may not be called "OpenEJB"
   *    nor may "OpenEJB" appear in their names without prior written
   *    permission of The OpenEJB Group. OpenEJB is a registered
   *    trademark of The OpenEJB Group.
   *
   * 5. Due credit should be given to the OpenEJB Project
   *    (http://openejb.sf.net/).
   *
   * THIS SOFTWARE IS PROVIDED BY THE OPENEJB GROUP AND CONTRIBUTORS
   * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
   * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
   * THE OPENEJB GROUP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
   * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   * OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   * Copyright 2004-2005 (C) The OpenEJB Group. All Rights Reserved.
   *
   * $Id: RefGenerator.java,v 1.1 2005/01/13 17:00:22 maguro Exp $
   */
  package org.openejb.corba;
  
  import org.openejb.proxy.ProxyInfo;
  
  
  /**
   * @version $Revision: 1.1 $ $Date: 2005/01/13 17:00:22 $
   */
  public interface RefGenerator {
  
      public org.omg.CORBA.Object genHomeReference(ProxyInfo proxyInfo) throws 
CORBAException;
  
      public org.omg.CORBA.Object genObjectReference(ProxyInfo proxyInfo) 
throws CORBAException;
  
  }
  
  
  

Reply via email to