maguro      2005/03/05 00:41:57

  Added:       modules/core/src/java/org/openejb/corba TSSBean.java
  Removed:     modules/core/src/java/org/openejb/corba POABean.java
  Log:

  Renamed POA GBean to TSS, Target Security Server.
  
  Revision  Changes    Path
  1.1                  
openejb/modules/core/src/java/org/openejb/corba/TSSBean.java
  
  Index: TSSBean.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: TSSBean.java,v 1.1 2005/03/05 05:41:57 maguro Exp $
   */
  package org.openejb.corba;
  
  import java.util.Collection;
  import java.util.Collections;
  import java.util.HashMap;
  import java.util.Iterator;
  import java.util.Map;
  
  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;
  import org.omg.PortableServer.POA;
  import org.omg.PortableServer.RequestProcessingPolicyValue;
  import org.omg.PortableServer.ServantRetentionPolicyValue;
  
  import org.apache.geronimo.gbean.GBeanInfo;
  import org.apache.geronimo.gbean.GBeanInfoBuilder;
  import org.apache.geronimo.gbean.GBeanLifecycle;
  import org.apache.geronimo.gbean.ReferenceCollection;
  import org.apache.geronimo.gbean.ReferenceCollectionEvent;
  import org.apache.geronimo.gbean.ReferenceCollectionListener;
  
  import org.openejb.EJBContainer;
  import org.openejb.corba.util.TieLoader;
  import org.openejb.corba.util.UtilDelegateImpl;
  
  
  /**
   * @version $Revision: 1.1 $ $Date: 2005/03/05 05:41:57 $
   */
  public class TSSBean implements GBeanLifecycle, ReferenceCollectionListener {
  
      private final Log log = LogFactory.getLog(TSSBean.class);
  
      private final ClassLoader classLoader;
      private final String POAName;
      private final CORBABean server;
      private final TieLoader tieLoader;
      private POA localPOA;
      private NamingContextExt initialContext;
      private Collection containers = Collections.EMPTY_SET;
      private Map adapters = new HashMap();
      private static final Map containerMap = new HashMap();
  
  
      public TSSBean(ClassLoader classLoader, String POAName, CORBABean server, 
TieLoader tieLoader) {
          this.classLoader = classLoader;
          this.POAName = POAName;
          this.server = server;
          this.tieLoader = tieLoader;
  
          UtilDelegateImpl.setTieLoader(tieLoader);
      }
  
      public CORBABean getServer() {
          return server;
      }
  
      public String getPOAName() {
          return POAName;
      }
  
      public Collection getContainers() {
          return containers;
      }
  
      public void setContainers(Collection containers) {
          ReferenceCollection ref = (ReferenceCollection) containers;
          ref.addReferenceCollectionListener(this);
  
          this.containers = containers;
      }
  
      public TieLoader getTieLoader() {
          return tieLoader;
      }
  
      public static EJBContainer getContainer(String containerId) {
          return (EJBContainer) containerMap.get(containerId);
      }
  
      public void doStart() throws 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 CORBA Target Security Server in POA " + POAName);
      }
  
      public void doStop() throws Exception {
          if (localPOA != null) {
              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;
          }
          log.info("Stopped CORBA Target Security Server in POA " + POAName);
      }
  
      public void doFail() {
          log.info("Failed CORBA Target Security Server in POA " + POAName);
      }
  
      public static final GBeanInfo GBEAN_INFO;
  
      static {
          GBeanInfoBuilder infoFactory = new GBeanInfoBuilder(TSSBean.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();
      }
  
      public static GBeanInfo getGBeanInfo() {
          return GBEAN_INFO;
      }
  
      public void memberAdded(ReferenceCollectionEvent event) {
          EJBContainer container = (EJBContainer) event.getMember();
  
          containerMap.put(container.getContainerID(), container);
  
          if (localPOA != null) {
              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);
              }
          }
      }
  
      public void memberRemoved(ReferenceCollectionEvent event) {
          EJBContainer container = (EJBContainer) event.getMember();
  
          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);
              }
          }
      }
  }
  
  
  

Reply via email to