maguro      2005/03/07 23:08:26

  Modified:    modules/core/src/java/org/openejb/corba Adapter.java
                        AdapterDelegate.java AdapterEntity.java
                        AdapterStateful.java AdapterStateless.java
                        CORBABean.java TSSBean.java
  Added:       modules/core/src/java/org/openejb/corba CORBAHandle.java
                        CORBAHomeHandle.java CSSBean.java
  Log:

  Intermediate CORBA checkin.
  
  Revision  Changes    Path
  1.6       +6 -3      
openejb/modules/core/src/java/org/openejb/corba/Adapter.java
  
  Index: Adapter.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/Adapter.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- Adapter.java      2 Mar 2005 06:14:37 -0000       1.5
  +++ Adapter.java      8 Mar 2005 04:08:26 -0000       1.6
  @@ -46,6 +46,7 @@
   
   import java.rmi.Remote;
   import javax.rmi.CORBA.Tie;
  +import javax.rmi.CORBA.Util;
   
   import org.omg.CORBA.ORB;
   import org.omg.CosNaming.NameComponent;
  @@ -85,13 +86,15 @@
               org.omg.CORBA.Object obj = 
orb.resolve_initial_references("NameService");
               initialContext = NamingContextExtHelper.narrow(obj);
   
  -            Servant servant = 
tieLoader.loadTieClass(container.getProxyInfo().getHomeInterface(), 
container.getProxyInfo());
  +
  +            Servant servant = 
tieLoader.loadTieClass(container.getProxyInfo().getHomeInterface(),  
container.getClassLoader());
               AdapterProxyFactory factory = new 
AdapterProxyFactory(container.getProxyInfo().getHomeInterface(), 
container.getClassLoader());
               Remote remote = (Remote) factory.create(container.getEJBHome());
   
               if (servant instanceof Tie) {
                   ((Tie) servant).setTarget(remote);
               }
  +
               parentPOA.activate_object_with_id(home_id, servant);
               homeReference = parentPOA.servant_to_reference(servant);
   
  
  
  
  1.2       +4 -2      
openejb/modules/core/src/java/org/openejb/corba/AdapterDelegate.java
  
  Index: AdapterDelegate.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/AdapterDelegate.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- AdapterDelegate.java      2 Mar 2005 05:23:10 -0000       1.1
  +++ AdapterDelegate.java      8 Mar 2005 04:08:26 -0000       1.2
  @@ -61,4 +61,6 @@
       final public Remote getDelegate() {
           return delegate;
       }
  +
  +    public void finalize() throws Throwable { }
   }
  
  
  
  1.5       +4 -4      
openejb/modules/core/src/java/org/openejb/corba/AdapterEntity.java
  
  Index: AdapterEntity.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/AdapterEntity.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- AdapterEntity.java        2 Mar 2005 05:23:10 -0000       1.4
  +++ AdapterEntity.java        8 Mar 2005 04:08:26 -0000       1.5
  @@ -100,7 +100,7 @@
   
               poa.the_POAManager().activate();
   
  -            Servant servant = 
getTieLoader().loadTieClass(container.getProxyInfo().getRemoteInterface(), 
container.getProxyInfo());
  +            Servant servant = 
getTieLoader().loadTieClass(container.getProxyInfo().getRemoteInterface(), 
container.getClassLoader());
               referenceInterface = servant._all_interfaces(null, null)[0];
   
               factory = new 
AdapterProxyFactory(container.getProxyInfo().getRemoteInterface(), 
container.getClassLoader());
  @@ -148,7 +148,7 @@
                   is.close();
   
                   EJBContainer container = getContainer();
  -                Servant servant = 
getTieLoader().loadTieClass(container.getProxyInfo().getRemoteInterface(), 
container.getProxyInfo());
  +                Servant servant = 
getTieLoader().loadTieClass(container.getProxyInfo().getRemoteInterface(), 
container.getClassLoader());
                   Remote remote = (Remote) 
factory.create(container.getEJBObject(pk));
   
                   if (servant instanceof Tie) {
  
  
  
  1.5       +4 -4      
openejb/modules/core/src/java/org/openejb/corba/AdapterStateful.java
  
  Index: AdapterStateful.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/AdapterStateful.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- AdapterStateful.java      2 Mar 2005 05:23:10 -0000       1.4
  +++ AdapterStateful.java      8 Mar 2005 04:08:26 -0000       1.5
  @@ -100,7 +100,7 @@
   
               poa.the_POAManager().activate();
   
  -            Servant servant = 
getTieLoader().loadTieClass(container.getProxyInfo().getRemoteInterface(), 
container.getProxyInfo());
  +            Servant servant = 
getTieLoader().loadTieClass(container.getProxyInfo().getRemoteInterface(), 
container.getClassLoader());
               referenceInterface = servant._all_interfaces(null, null)[0];
   
               factory = new 
AdapterProxyFactory(container.getProxyInfo().getRemoteInterface(), 
container.getClassLoader());
  @@ -148,7 +148,7 @@
                   is.close();
   
                   EJBContainer container = getContainer();
  -                Servant servant = 
getTieLoader().loadTieClass(container.getProxyInfo().getRemoteInterface(), 
container.getProxyInfo());
  +                Servant servant = 
getTieLoader().loadTieClass(container.getProxyInfo().getRemoteInterface(), 
container.getClassLoader());
                   Remote remote = (Remote) 
factory.create(container.getEJBObject(pk));
   
                   if (servant instanceof Tie) {
  
  
  
  1.5       +4 -3      
openejb/modules/core/src/java/org/openejb/corba/AdapterStateless.java
  
  Index: AdapterStateless.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/AdapterStateless.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- AdapterStateless.java     2 Mar 2005 05:23:10 -0000       1.4
  +++ AdapterStateless.java     8 Mar 2005 04:08:26 -0000       1.5
  @@ -49,6 +49,7 @@
   
   import org.omg.CORBA.ORB;
   import org.omg.CORBA.Policy;
  +import org.omg.CORBA.SetOverrideType;
   import org.omg.PortableServer.IdAssignmentPolicyValue;
   import org.omg.PortableServer.ImplicitActivationPolicyValue;
   import org.omg.PortableServer.LifespanPolicyValue;
  @@ -88,7 +89,7 @@
   
               poa.the_POAManager().activate();
   
  -            Servant servant = 
tieLoader.loadTieClass(container.getProxyInfo().getRemoteInterface(), 
container.getProxyInfo());
  +            Servant servant = 
tieLoader.loadTieClass(container.getProxyInfo().getRemoteInterface(), 
container.getClassLoader());
               AdapterProxyFactory factory = new 
AdapterProxyFactory(container.getProxyInfo().getRemoteInterface(), 
container.getClassLoader());
               Remote remote = (Remote) 
factory.create(container.getEJBObject(null));
   
  
  
  
  1.6       +27 -7     
openejb/modules/core/src/java/org/openejb/corba/CORBABean.java
  
  Index: CORBABean.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/CORBABean.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- CORBABean.java    6 Mar 2005 02:49:24 -0000       1.5
  +++ CORBABean.java    8 Mar 2005 04:08:26 -0000       1.6
  @@ -47,6 +47,7 @@
   import java.util.ArrayList;
   import java.util.Properties;
   
  +import EDU.oswego.cs.dl.util.concurrent.Executor;
   import org.apache.commons.logging.Log;
   import org.apache.commons.logging.LogFactory;
   import org.omg.CORBA.ORB;
  @@ -56,9 +57,10 @@
   import org.apache.geronimo.gbean.GBeanInfo;
   import org.apache.geronimo.gbean.GBeanInfoBuilder;
   import org.apache.geronimo.gbean.GBeanLifecycle;
  -import org.apache.geronimo.pool.ThreadPool;
   import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
  -import EDU.oswego.cs.dl.util.concurrent.Executor;
  +
  +import org.openejb.corba.security.config.ConfigAdapter;
  +import org.openejb.corba.security.config.tss.TSSConfig;
   
   
   /**
  @@ -70,6 +72,8 @@
   
       private final ClassLoader classLoader;
       private final Executor threadPool;
  +    private final ConfigAdapter configAdapter;
  +    private TSSConfig tssConfig;
       private ORB orb;
       private POA rootPOA;
       private ArrayList args = new ArrayList();
  @@ -78,11 +82,22 @@
       public CORBABean() {
           this.classLoader = null;
           this.threadPool = null;
  +        this.configAdapter = null;
       }
   
  -    public CORBABean(ClassLoader classLoader, Executor threadPool) {
  +    public CORBABean(ClassLoader classLoader, Executor threadPool, String 
configAdapter) throws ClassNotFoundException, IllegalAccessException, 
InstantiationException {
           this.classLoader = classLoader;
           this.threadPool = threadPool;
  +        this.configAdapter = (ConfigAdapter) 
classLoader.loadClass(configAdapter).newInstance();
  +    }
  +
  +    public TSSConfig getTssConfig() {
  +        return tssConfig;
  +    }
  +
  +    public void setTssConfig(TSSConfig config) {
  +        if (config == null) config = new TSSConfig();
  +        this.tssConfig = config;
       }
   
       public ORB getORB() {
  @@ -115,7 +130,10 @@
           try {
               Thread.currentThread().setContextClassLoader(classLoader);
   
  -            orb = ORB.init((String[]) args.toArray(new String[args.size()]), 
props);
  +            Properties properties = 
configAdapter.translateToProps(tssConfig);
  +            properties.putAll(props);
  +
  +            orb = ORB.init((String[]) args.toArray(new String[args.size()]), 
properties);
   
               org.omg.CORBA.Object obj = 
orb.resolve_initial_references("RootPOA");
   
  @@ -149,12 +167,14 @@
   
           infoFactory.addAttribute("classLoader", ClassLoader.class, false);
           infoFactory.addReference("ThreadPool", Executor.class, 
NameFactory.GERONIMO_SERVICE);
  +        infoFactory.addAttribute("configAdapter", String.class, true);
  +        infoFactory.addAttribute("tssConfig", TSSConfig.class, true);
           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.setConstructor(new String[]{"classLoader", 
"ThreadPool"});
  +        infoFactory.setConstructor(new String[]{"classLoader", "ThreadPool", 
"configAdapter"});
   
           GBEAN_INFO = infoFactory.getBeanInfo();
       }
  
  
  
  1.3       +45 -8     
openejb/modules/core/src/java/org/openejb/corba/TSSBean.java
  
  Index: TSSBean.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/TSSBean.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TSSBean.java      6 Mar 2005 02:49:24 -0000       1.2
  +++ TSSBean.java      8 Mar 2005 04:08:26 -0000       1.3
  @@ -52,6 +52,8 @@
   
   import org.apache.commons.logging.Log;
   import org.apache.commons.logging.LogFactory;
  +import org.omg.CORBA.Any;
  +import org.omg.CORBA.ORB;
   import org.omg.CORBA.Policy;
   import org.omg.CosNaming.NamingContextExt;
   import org.omg.CosNaming.NamingContextExtHelper;
  @@ -71,8 +73,10 @@
   import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
   
   import org.openejb.EJBContainer;
  +import org.openejb.corba.security.ServerPolicyFactory;
  +import org.openejb.corba.security.config.tss.TSSConfig;
  +import org.openejb.corba.security.config.tss.TSSNULLTransportConfig;
   import org.openejb.corba.util.TieLoader;
  -import org.openejb.corba.util.UtilDelegateImpl;
   
   
   /**
  @@ -88,6 +92,7 @@
       private final TieLoader tieLoader;
       private POA localPOA;
       private NamingContextExt initialContext;
  +    private TSSConfig tssConfig;
       private Collection containers = Collections.EMPTY_SET;
       private Map adapters = new HashMap();
       private static final Map containerMap = new HashMap();
  @@ -98,8 +103,6 @@
           this.POAName = POAName;
           this.server = server;
           this.tieLoader = tieLoader;
  -
  -        UtilDelegateImpl.setTieLoader(tieLoader);
       }
   
       public CORBABean getServer() {
  @@ -110,6 +113,15 @@
           return POAName;
       }
   
  +    public TSSConfig getTssConfig() {
  +        return tssConfig;
  +    }
  +
  +    public void setTssConfig(TSSConfig tssConfig) {
  +        if (tssConfig == null) tssConfig = new TSSConfig();
  +        this.tssConfig = tssConfig;
  +    }
  +
       public Collection getContainers() {
           return containers;
       }
  @@ -134,9 +146,14 @@
           try {
               Thread.currentThread().setContextClassLoader(classLoader);
   
  +            ORB orb = server.getORB();
               POA rootPOA = server.getRootPOA();
   
  +            Any any = orb.create_any();
  +            any.insert_Value(createCSIv2Config());
  +
               Policy[] policies = new Policy[]{
  +                orb.create_policy(ServerPolicyFactory.POLICY_TYPE, any),
                   
rootPOA.create_lifespan_policy(LifespanPolicyValue.TRANSIENT),
                   
rootPOA.create_request_processing_policy(RequestProcessingPolicyValue.USE_ACTIVE_OBJECT_MAP_ONLY),
                   
rootPOA.create_servant_retention_policy(ServantRetentionPolicyValue.RETAIN),
  @@ -164,7 +181,7 @@
               Thread.currentThread().setContextClassLoader(savedLoader);
           }
   
  -        log.info("Started CORBA Target Security Server in POA " + POAName);
  +        log.info("Started CORBA Target Security Service in POA " + POAName);
       }
   
       public void doStop() throws Exception {
  @@ -183,11 +200,30 @@
               localPOA.the_POAManager().deactivate(true, true);
               localPOA = null;
           }
  -        log.info("Stopped CORBA Target Security Server in POA " + POAName);
  +        log.info("Stopped CORBA Target Security Service in POA " + POAName);
       }
   
       public void doFail() {
  -        log.info("Failed CORBA Target Security Server in POA " + POAName);
  +        log.info("Failed CORBA Target Security Service in POA " + POAName);
  +    }
  +
  +    private TSSConfig createCSIv2Config() {
  +        if (tssConfig == null) return null;
  +        if (tssConfig.isInherit()) return server.getTssConfig();
  +
  +        TSSConfig config = new TSSConfig();
  +
  +        if (server.getTssConfig() != null)
  +            
config.setTransport_mech(server.getTssConfig().getTransport_mech());
  +        else
  +            config.setTransport_mech(new TSSNULLTransportConfig());
  +
  +        
config.getMechListConfig().setStateful(tssConfig.getMechListConfig().isStateful());
  +        for (int i = 0; i < tssConfig.getMechListConfig().size(); i++) {
  +            
config.getMechListConfig().add(tssConfig.getMechListConfig().mechAt(i));
  +        }
  +
  +        return config;
       }
   
       public static final GBeanInfo GBEAN_INFO;
  @@ -198,6 +234,7 @@
           infoFactory.addAttribute("classLoader", ClassLoader.class, false);
           infoFactory.addAttribute("POAName", String.class, true);
           infoFactory.addReference("Server", CORBABean.class, 
NameFactory.GERONIMO_SERVICE);
  +        infoFactory.addAttribute("tssConfig", TSSConfig.class, true);
           infoFactory.addReference("Containers", EJBContainer.class);//many 
types
           infoFactory.addReference("TieLoader", TieLoader.class, 
NameFactory.GERONIMO_SERVICE);
           infoFactory.setConstructor(new String[]{"classLoader", "POAName", 
"Server", "TieLoader"});
  
  
  
  1.1                  
openejb/modules/core/src/java/org/openejb/corba/CORBAHandle.java
  
  Index: CORBAHandle.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: CORBAHandle.java,v 1.1 2005/03/08 04:08:26 maguro Exp $
   */
  package org.openejb.corba;
  
  import java.io.IOException;
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
  import java.io.Serializable;
  import java.rmi.RemoteException;
  import javax.ejb.EJBObject;
  import javax.ejb.Handle;
  import javax.ejb.spi.HandleDelegate;
  import javax.naming.NamingException;
  import javax.rmi.PortableRemoteObject;
  
  import org.openejb.corba.util.Util;
  
  
  /**
   * EJB v2.1 spec, section 19.5.5.1
   * <p/>
   * The <code>javax.ejb.spi.HandleDelegate</code> service provider interface
   * defines methods that enable portable implementations of <code>Handle</code>
   * and <code>HomeHandle</code> that are instantiated in a different vendor’s
   * container to serialize and deserialize EJBObject and EJBHome references.
   * The <code>HandleDelegate</code> interface is not used by enterprise beans
   * or J2EE application components directly.
   *
   * @version $Revision: 1.1 $ $Date: 2005/03/08 04:08:26 $
   */
  public class CORBAHandle implements Handle, Serializable {
  
      private String ior;
  
      public CORBAHandle(String ior) {
          this.ior = ior;
      }
  
      public EJBObject getEJBObject() throws RemoteException {
  
          try {
              return (EJBObject) 
PortableRemoteObject.narrow(Util.getORB().string_to_object(ior), 
EJBObject.class);
          } catch (Exception e) {
              throw new RemoteException("Unable to convert IOR into object", e);
          }
      }
  
      private void writeObject(ObjectOutputStream out) throws IOException {
  
          HandleDelegate handleDelegate;
  
          try {
              handleDelegate = Util.getHandleDelegate();
          } catch (NamingException e) {
              throw new IOException("Unable to lookup 
java:comp/HandleDelegate");
          }
  
          handleDelegate.writeEJBObject(getEJBObject(), out);
      }
  
      private void readObject(ObjectInputStream in) throws IOException, 
ClassNotFoundException {
  
          HandleDelegate handleDelegate;
  
          try {
              handleDelegate = Util.getHandleDelegate();
          } catch (NamingException e) {
              throw new IOException("Unable to lookup 
java:comp/HandleDelegate");
          }
  
          EJBObject obj = handleDelegate.readEJBObject(in);
  
          try {
              ior = Util.getORB().object_to_string((org.omg.CORBA.Object) obj);
          } catch (Exception e) {
              throw new RemoteException("Unable to convert object to IOR", e);
          }
      }
  }
  
  
  
  1.1                  
openejb/modules/core/src/java/org/openejb/corba/CORBAHomeHandle.java
  
  Index: CORBAHomeHandle.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: CORBAHomeHandle.java,v 1.1 2005/03/08 04:08:26 maguro Exp $
   */
  package org.openejb.corba;
  
  import java.io.IOException;
  import java.io.ObjectOutputStream;
  import java.io.Serializable;
  import java.rmi.RemoteException;
  import javax.ejb.EJBHome;
  import javax.ejb.HomeHandle;
  import javax.ejb.spi.HandleDelegate;
  import javax.naming.NamingException;
  import javax.rmi.PortableRemoteObject;
  
  import org.openejb.corba.util.Util;
  
  
  /**
   * EJB v2.1 spec, section 19.5.5.1
   * <p/>
   * The <code>javax.ejb.spi.HandleDelegate</code> service provider interface
   * defines methods that enable portable implementations of <code>Handle</code>
   * and <code>HomeHandle</code> that are instantiated in a different vendor’s
   * container to serialize and deserialize EJBObject and EJBHome references.
   * The <code>HandleDelegate</code> interface is not used by enterprise beans
   * or J2EE application components directly.
   *
   * @version $Revision: 1.1 $ $Date: 2005/03/08 04:08:26 $
   */
  public class CORBAHomeHandle implements HomeHandle, Serializable {
  
      private String ior;
  
      public CORBAHomeHandle(String ior) {
          this.ior = ior;
      }
  
      public EJBHome getEJBHome() throws RemoteException {
  
          try {
              return (EJBHome) 
PortableRemoteObject.narrow(Util.getORB().string_to_object(ior), EJBHome.class);
          } catch (Exception e) {
              throw new RemoteException("Unable to convert IOR into home", e);
          }
  
      }
  
      private void writeObject(ObjectOutputStream out) throws IOException {
  
          HandleDelegate handleDelegate;
  
          try {
              handleDelegate = Util.getHandleDelegate();
          } catch (NamingException e) {
              throw new IOException("Unable to lookup 
java:comp/HandleDelegate");
          }
  
          handleDelegate.writeEJBHome(getEJBHome(), out);
      }
  
      private void readObject(java.io.ObjectInputStream in) throws IOException, 
ClassNotFoundException {
  
          HandleDelegate handleDelegate;
  
          try {
              handleDelegate = Util.getHandleDelegate();
          } catch (NamingException e) {
              throw new IOException("Cannot get HandleDelegate");
          }
  
          EJBHome home = handleDelegate.readEJBHome(in);
  
          try {
              ior = Util.getORB().object_to_string((org.omg.CORBA.Object) home);
          } catch (Exception e) {
              throw new RemoteException("Unable to convert object to IOR", e);
          }
      }
  }
  
  
  1.1                  
openejb/modules/core/src/java/org/openejb/corba/CSSBean.java
  
  Index: CSSBean.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: CSSBean.java,v 1.1 2005/03/08 04:08:26 maguro Exp $
   */
  package org.openejb.corba;
  
  import java.net.URI;
  import java.util.ArrayList;
  import java.util.Properties;
  
  import EDU.oswego.cs.dl.util.concurrent.Executor;
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  import org.omg.CORBA.ORB;
  import org.omg.CORBA.UserException;
  import org.omg.CosNaming.NameComponent;
  import org.omg.CosNaming.NamingContextExt;
  import org.omg.CosNaming.NamingContextExtHelper;
  
  import org.apache.geronimo.gbean.GBeanInfo;
  import org.apache.geronimo.gbean.GBeanInfoBuilder;
  import org.apache.geronimo.gbean.GBeanLifecycle;
  import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
  
  import org.openejb.corba.security.config.ConfigAdapter;
  import org.openejb.corba.security.config.css.CSSConfig;
  
  
  /**
   * @version $Revision: 1.1 $ $Date: 2005/03/08 04:08:26 $
   */
  public class CSSBean implements GBeanLifecycle {
  
      private final Log log = LogFactory.getLog(CSSBean.class);
  
      private final ClassLoader classLoader;
      private final Executor threadPool;
      private final ConfigAdapter configAdapter;
      private String description;
      private CSSConfig nssConfig;
      private CSSConfig cssConfig;
      private ORB nssORB;
      private ORB cssORB;
      private ArrayList nssArgs;
      private ArrayList cssArgs;
      private Properties nssProps;
      private Properties cssProps;
  
      public CSSBean() {
          this.classLoader = null;
          this.threadPool = null;
          this.configAdapter = null;
      }
  
      public CSSBean(ClassLoader classLoader, Executor threadPool, String 
configAdapter) throws ClassNotFoundException, IllegalAccessException, 
InstantiationException {
          this.classLoader = classLoader;
          this.threadPool = threadPool;
          log.info("LOADING - " + configAdapter);
          try {
              this.configAdapter = (ConfigAdapter) 
classLoader.loadClass(configAdapter).newInstance();
          } catch (InstantiationException e) {
              log.info("ERROR - " , e);
              throw e;
          } catch (IllegalAccessException e) {
              log.info("ERROR - " , e);
              throw e;
          } catch (ClassNotFoundException e) {
              log.info("ERROR - " , e);
              throw e;
          }
      }
  
      public String getDescription() {
          return description;
      }
  
      public void setDescription(String description) {
          this.description = description;
      }
  
      public CSSConfig getNssConfig() {
          return nssConfig;
      }
  
      public void setNssConfig(CSSConfig nssConfig) {
          this.nssConfig = nssConfig;
      }
  
      public CSSConfig getCssConfig() {
          return cssConfig;
      }
  
      public void setCssConfig(CSSConfig config) {
          if (config == null) config = new CSSConfig();
          this.cssConfig = config;
      }
  
      public ORB getORB() {
          return cssORB;
      }
  
      public ArrayList getNssArgs() {
          return nssArgs;
      }
  
      public void setNssArgs(ArrayList nssArgs) {
          if (nssArgs == null) nssArgs = new ArrayList();
          this.nssArgs = nssArgs;
      }
  
      public ArrayList getCssArgs() {
          return cssArgs;
      }
  
      public void setCssArgs(ArrayList cssArgs) {
          if (cssArgs == null) cssArgs = new ArrayList();
          this.cssArgs = cssArgs;
      }
  
      public Properties getNssProps() {
          return nssProps;
      }
  
      public void setNssProps(Properties nssProps) {
          if (nssProps == null) nssProps = new Properties();
          this.nssProps = nssProps;
      }
  
      public Properties getCssProps() {
          return cssProps;
      }
  
      public void setCssProps(Properties cssProps) {
          if (cssProps == null) cssProps = new Properties();
          this.cssProps = cssProps;
      }
  
      public org.omg.CORBA.Object getHome(URI nsURI, String name) {
          try {
              org.omg.CORBA.Object ref = 
nssORB.string_to_object(nsURI.toString());
              NamingContextExt ic = NamingContextExtHelper.narrow(ref);
  
              NameComponent[] nameComponent = ic.to_name(name);
              org.omg.CORBA.Object bean = ic.resolve(nameComponent);
              String beanIOR = nssORB.object_to_string(bean);
  
              return cssORB.string_to_object(beanIOR);
          } catch (UserException ue) {
              // do nothing
          }
          return null;
      }
  
      public void doStart() throws Exception {
          log.info("Starting CORBA Client Security Server - " + description);
  
          if (nssConfig == null) nssConfig = cssConfig;
          if (nssArgs == null) nssArgs = cssArgs;
  
          ClassLoader savedLoader = 
Thread.currentThread().getContextClassLoader();
          try {
              Thread.currentThread().setContextClassLoader(classLoader);
  
              Properties properties = configAdapter.translateToProps(nssConfig);
              properties.putAll(nssProps);
              log.info("S1 CORBA Client Security Server - " + description);
  
              nssORB = ORB.init((String[]) nssArgs.toArray(new 
String[nssArgs.size()]), properties);
              log.info("S2 CORBA Client Security Server - " + description);
  
              threadPool.execute(new Runnable() {
                  public void run() {
                      nssORB.run();
                  }
              });
              log.info("S3 CORBA Client Security Server - " + description);
  
              properties = configAdapter.translateToProps(cssConfig);
              properties.putAll(cssProps);
              log.info("S4 CORBA Client Security Server - " + description);
  
              cssORB = ORB.init((String[]) cssArgs.toArray(new 
String[cssArgs.size()]), properties);
              log.info("S5 CORBA Client Security Server - " + description);
  
              threadPool.execute(new Runnable() {
                  public void run() {
                      cssORB.run();
                  }
              });
          } finally {
              Thread.currentThread().setContextClassLoader(savedLoader);
          }
  
          log.info("Started CORBA Client Security Server - " + description);
      }
  
      public void doStop() throws Exception {
          nssORB.shutdown(true);
          cssORB.shutdown(true);
          log.info("Stopped CORBA Client Security Server - " + description);
      }
  
      public void doFail() {
          log.info("Failed CORBA Client Security Server " + description);
      }
  
      public static final GBeanInfo GBEAN_INFO;
  
      static {
          GBeanInfoBuilder infoFactory = new GBeanInfoBuilder(CSSBean.class);
  
          infoFactory.addAttribute("classLoader", ClassLoader.class, false);
          infoFactory.addReference("ThreadPool", Executor.class, 
NameFactory.GERONIMO_SERVICE);
          infoFactory.addAttribute("configAdapter", String.class, true);
          infoFactory.addAttribute("description", String.class, true);
          infoFactory.addAttribute("nssConfig", CSSConfig.class, true);
          infoFactory.addAttribute("cssConfig", CSSConfig.class, true);
          infoFactory.addAttribute("ORB", ORB.class, false);
          infoFactory.addAttribute("nssArgs", ArrayList.class, true);
          infoFactory.addAttribute("cssArgs", ArrayList.class, true);
          infoFactory.addAttribute("nssProps", Properties.class, true);
          infoFactory.addAttribute("cssProps", Properties.class, true);
          infoFactory.addOperation("getHome", new Class[]{URI.class, 
String.class});
  
          infoFactory.setConstructor(new String[]{"classLoader", "ThreadPool", 
"configAdapter"});
  
          GBEAN_INFO = infoFactory.getBeanInfo();
      }
  
      public static GBeanInfo getGBeanInfo() {
          return GBEAN_INFO;
      }
  }
  
  
  

Reply via email to