You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ju...@apache.org on 2004/01/04 15:18:06 UTC

cvs commit: incubator-geronimo/modules/clustering/src/java/org/apache/geronimo/clustering Tier.java Node.java LocalCluster.java Cluster.java

jules       2004/01/04 06:18:06

  Modified:    modules/clustering/src/java/org/apache/geronimo/clustering/web
                        WebTier.java HttpSessionManager.java
               modules/clustering/src/java/org/apache/geronimo/clustering/ejb
                        EJBTier.java
               modules/clustering/src/java/org/apache/geronimo/clustering
                        Tier.java Node.java LocalCluster.java Cluster.java
  Log:
  decided to have Cluster, Node, and Tier statically deployed and how to
  hook them up.
  
  Revision  Changes    Path
  1.3       +1 -2      incubator-geronimo/modules/clustering/src/java/org/apache/geronimo/clustering/web/WebTier.java
  
  Index: WebTier.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/clustering/src/java/org/apache/geronimo/clustering/web/WebTier.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- WebTier.java	3 Jan 2004 01:42:56 -0000	1.2
  +++ WebTier.java	4 Jan 2004 14:18:06 -0000	1.3
  @@ -79,7 +79,6 @@
   public class
     WebTier
     extends Tier
  -  implements GeronimoMBeanTarget
   {
     protected Log _log=LogFactory.getLog(WebTier.class);
   
  
  
  
  1.4       +24 -18    incubator-geronimo/modules/clustering/src/java/org/apache/geronimo/clustering/web/HttpSessionManager.java
  
  Index: HttpSessionManager.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/clustering/src/java/org/apache/geronimo/clustering/web/HttpSessionManager.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- HttpSessionManager.java	3 Jan 2004 01:42:56 -0000	1.3
  +++ HttpSessionManager.java	4 Jan 2004 14:18:06 -0000	1.4
  @@ -78,7 +78,7 @@
    */
   public class
     HttpSessionManager
  - implements GeronimoMBeanTarget
  +  implements GeronimoMBeanTarget
   {
     protected Log _log=LogFactory.getLog(HttpSessionManager.class);
   
  @@ -90,8 +90,8 @@
   
     public int getSize(){return _sessions.size();}
   
  -  protected ObjectName _tier;
  -  public ObjectName getTier(){return _tier;}
  +  protected Tier _tier;
  +  public Tier getTier(){return _tier;}
   
     protected String _clusterName;
     public String getClusterName(){return _clusterName;}
  @@ -114,7 +114,23 @@
   
     protected MBeanServer _server;
   
  -  public boolean canStart() {return true;}
  +  public boolean
  +    canStart()
  +  {
  +    try
  +    {
  +      // find our tier
  +      _tier=(Tier)_server.getAttribute(Tier.makeObjectName(getClusterName(), getNodeName(), "web"), "Reference");
  +    }
  +    catch (Exception e)
  +    {
  +      _log.error("could not find Tier", e);
  +      return false;
  +    }
  +
  +    return true;
  +  }
  +
     public boolean canStop() {return true;}
   
     public void
  @@ -123,18 +139,8 @@
       _uid=_contextPath;		// TODO - what does Greg say ?
       _log=LogFactory.getLog(getClass().getName()+"#"+getUID());
       _log.info("starting");
  -    // find our tier
  -
  -    try
  -    {
  -      _tier=Tier.makeObjectName(getClusterName(), getNodeName(), "web");
  -      _server.invoke(_tier, "registerData", new Object[]{getUID(),_sessions}, new String[]{String.class.getName(),Object.class.getName()});
  -      _log.info("sessions registered: "+getUID());
  -    }
  -    catch (Exception e)
  -    {
  -      _log.error("could not retrieve Tier state", e);
  -    }
  +    _tier.registerData(getUID(),_sessions);
  +    _log.info("sessions registered: "+getUID());
   
         // test stuff
       _sessions.put("aaa", new Object());
  @@ -147,7 +153,7 @@
     {
       _log.info("stopping");
   
  -    // TODO - remove our session map from cluster Data
  +    _tier.deregisterData(getUID());
       // TODO - leave cluster
     }
   
  
  
  
  1.3       +1 -2      incubator-geronimo/modules/clustering/src/java/org/apache/geronimo/clustering/ejb/EJBTier.java
  
  Index: EJBTier.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/clustering/src/java/org/apache/geronimo/clustering/ejb/EJBTier.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- EJBTier.java	3 Jan 2004 01:42:56 -0000	1.2
  +++ EJBTier.java	4 Jan 2004 14:18:06 -0000	1.3
  @@ -79,7 +79,6 @@
   public class
     EJBTier
     extends Tier
  -  implements GeronimoMBeanTarget
   {
     protected Log _log=LogFactory.getLog(EJBTier.class);
   
  
  
  
  1.2       +25 -16    incubator-geronimo/modules/clustering/src/java/org/apache/geronimo/clustering/Tier.java
  
  Index: Tier.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/clustering/src/java/org/apache/geronimo/clustering/Tier.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Tier.java	3 Jan 2004 01:42:56 -0000	1.1
  +++ Tier.java	4 Jan 2004 14:18:06 -0000	1.2
  @@ -82,7 +82,7 @@
   {
     protected static Log  _log=LogFactory.getLog(Tier.class);
     protected ObjectName  _objectName;
  -  protected ObjectName  _node;
  +  protected Node        _node;
     protected MBeanServer _server;
     protected Data        _data;
     protected Map         _tiers;
  @@ -107,6 +107,14 @@
       return new ObjectName("geronimo.clustering:role=Tier,name="+tierName+",node="+nodeName+",cluster="+clusterName);
     }
   
  +  /**
  +   * Return a local reference to this Object. For tight coupling via
  +   * JMX (bad idea?).
  +   *
  +   * @return a <code>Tier</code> value
  +   */
  +  public Tier getReference(){return this;}
  +
     //----------------------------------------
     // GeronimoMBeanTarget
     //----------------------------------------
  @@ -132,6 +140,16 @@
         return false;
       }
   
  +    try
  +    {
  +      _node=(Node)_server.getAttribute(Node.makeObjectName(getClusterName(), getNodeName()), "Reference");
  +    }
  +    catch (Exception e)
  +    {
  +      _log.error("could not find Node", e);
  +      return false;
  +    }
  +
       return true;
     }
   
  @@ -142,20 +160,10 @@
     {
       _log.info("starting");
   
  -    // find our node
  -    try
  -    {
  -      _node=Node.makeObjectName(getClusterName(), getNodeName());
  -      // register our session map with it's Data object
  -      Data data=(Data)_server.getAttribute(_node, "Data");
  -      _log.info("Data:"+data);
  -      _tiers=data.getTiers(); // immutable, so doesn't need synchronisation
  -    }
  -    catch (Exception e)
  -    {
  -      _log.error("could not retrieve Node state", e);
  -    }
  -
  +    // register our session map with it's Data object
  +    Data data=_node.getData();
  +    _log.info("Data:"+data);
  +    _tiers=data.getTiers(); // immutable, so doesn't need synchronisation
       _tier=null;
       synchronized (_tiers)
       {
  @@ -189,6 +197,7 @@
     {
       GeronimoMBeanInfo mbeanInfo=new GeronimoMBeanInfo();
       //set target class in concrete subclass
  +    mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("Reference",   true, false, "a local reference to this Tier"));
       mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("Name",        true, false, "Name of this Tier"));
       mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("NodeName",    true, false, "Name of this Tier's Node"));
       mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("ClusterName", true, false, "Name of this Tier's Node's Cluster"));
  
  
  
  1.2       +26 -6     incubator-geronimo/modules/clustering/src/java/org/apache/geronimo/clustering/Node.java
  
  Index: Node.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/clustering/src/java/org/apache/geronimo/clustering/Node.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Node.java	3 Jan 2004 01:42:56 -0000	1.1
  +++ Node.java	4 Jan 2004 14:18:06 -0000	1.2
  @@ -117,6 +117,14 @@
       return new ObjectName("geronimo.clustering:role=Node,name="+nodeName+",cluster="+clusterName);
     }
   
  +  /**
  +   * Return a local reference to this Object. For tight coupling via
  +   * JMX (bad idea?).
  +   *
  +   * @return a <code>Node</code> value
  +   */
  +  public Node getReference(){return this;}
  +
     //----------------------------------------
     // MetaDataListener
     //----------------------------------------
  @@ -182,6 +190,17 @@
         return false;
       }
   
  +    // should we really be altering our state in this method ?
  +    try
  +    {
  +      _cluster=(Cluster)_server.getAttribute(Cluster.makeObjectName(_objectName.getKeyProperty("cluster")), "Reference");
  +    }
  +    catch (Exception e)
  +    {
  +      _log.error("could not find Cluster", e);
  +      return false;
  +    }
  +
       return true;
     }
   
  @@ -192,7 +211,7 @@
     {
       _log=LogFactory.getLog(getClass().getName()+"#"+getCluster()+"/"+getName());
       _log.info("starting");
  -    _cluster=LocalCluster.find(getCluster()); // TODO abstract out
  +
       synchronized (_cluster)
       {
         Data data=_cluster.getData();
  @@ -228,10 +247,11 @@
     {
       GeronimoMBeanInfo mbeanInfo=new GeronimoMBeanInfo();
       mbeanInfo.setTargetClass(Node.class);
  -    mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("Name",    true, false, "unique identifier for this Node (within it's Cluster)"));
  -    mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("Cluster", true, false, "unique identifier for this Node's Cluster"));
  -    mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("Members", true, false, "list of cluster members"));
  -    mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("Data",    true, false, "cluster state"));
  +    mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("Reference", true, false, "a local reference to this Node"));
  +    mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("Name",      true, false, "unique identifier for this Node (within it's Cluster)"));
  +    mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("Cluster",   true, false, "unique identifier for this Node's Cluster"));
  +    mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("Members",   true, false, "list of cluster members"));
  +    mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("Data",      true, false, "cluster state"));
       return mbeanInfo;
     }
   }
  
  
  
  1.11      +1 -34     incubator-geronimo/modules/clustering/src/java/org/apache/geronimo/clustering/LocalCluster.java
  
  Index: LocalCluster.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/clustering/src/java/org/apache/geronimo/clustering/LocalCluster.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- LocalCluster.java	3 Jan 2004 01:42:56 -0000	1.10
  +++ LocalCluster.java	4 Jan 2004 14:18:06 -0000	1.11
  @@ -81,39 +81,8 @@
   {
     // class
     protected static Log _log=LogFactory.getLog(LocalCluster.class);
  -  protected static Map _map=new HashMap();
  -
  -  /**
  -   * Return either an existing Cluster, or a freshly created one.
  -   *
  -   * @param name a <code>String</code> value
  -   * @return a <code>LocalCluster</code> value
  -   */
  -  public static LocalCluster
  -    find(String name)
  -  {
  -    synchronized (_map)
  -    {
  -      LocalCluster cluster=(LocalCluster)_map.get(name);
  -
  -      if (cluster==null)
  -      {
  -	cluster=new LocalCluster(name);
  -	_map.put(name, cluster);
  -
  -	_log.trace("created cluster: "+name);
  -      }
  -      else
  -      {
  -	_log.trace("found cluster: "+name);
  -      }
  -
  -      return cluster;
  -    }
  -  }
   
     // instance
  -  protected String _name;
     protected List   _members=new Vector();
   
   
  @@ -122,8 +91,6 @@
      *
      * @param name a <code>String</code> value
      */
  -  protected LocalCluster(String name) {_name=name;}
  -
     public List getMembers(){synchronized (_members){return Collections.unmodifiableList(_members);}}
   
     // MetaData
  
  
  
  1.6       +56 -7     incubator-geronimo/modules/clustering/src/java/org/apache/geronimo/clustering/Cluster.java
  
  Index: Cluster.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/clustering/src/java/org/apache/geronimo/clustering/Cluster.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- Cluster.java	3 Jan 2004 01:42:56 -0000	1.5
  +++ Cluster.java	4 Jan 2004 14:18:06 -0000	1.6
  @@ -56,7 +56,10 @@
   package org.apache.geronimo.clustering;
   
   import java.util.List;
  +import javax.management.MBeanServer;
   import javax.management.ObjectName;
  +import org.apache.commons.logging.Log;
  +import org.apache.commons.logging.LogFactory;
   import org.apache.geronimo.kernel.service.GeronimoAttributeInfo;
   import org.apache.geronimo.kernel.service.GeronimoMBeanContext;
   import org.apache.geronimo.kernel.service.GeronimoMBeanInfo;
  @@ -76,6 +79,8 @@
     Cluster
     implements GeronimoMBeanTarget
   {
  +  protected Log _log=LogFactory.getLog(Cluster.class);
  +
     public static ObjectName
       makeObjectName(String clusterName)
       throws Exception
  @@ -83,6 +88,9 @@
       return new ObjectName("geronimo.clustering:role=Cluster,name="+clusterName);
     }
   
  +  protected ObjectName 	_objectName;
  +  protected MBeanServer _server;
  +
     /**
      * Return current Cluster members.
      *
  @@ -99,7 +107,6 @@
      */
     public abstract void join(Object member);
   
  -
     /**
      * Remove the given node from this Cluster.
      *
  @@ -107,22 +114,64 @@
      */
     public abstract void leave(Object member);
   
  +  /**
  +   * Return a local reference to this Object. For tight coupling via
  +   * JMX (bad idea?).
  +   *
  +   * @return a <code>Cluster</code> value
  +   */
  +  public Cluster getReference(){return this;}
  +
     //----------------------------------------
     // GeronimoMBeanTarget
     //----------------------------------------
   
  -  public boolean canStart(){return true;}
  +  public boolean
  +    canStart()
  +  {
  +    if (_objectName.getKeyProperty("name")==null)
  +    {
  +      _log.warn("ClusterMBean name must contain a 'name' property");
  +      return false;
  +    }
  +
  +    return true;
  +  }
  +
     public boolean canStop(){return true;}
  -  public void doStart(){}
  -  public void doStop(){}
  -  public void doFail(){}
  -  public void setMBeanContext(GeronimoMBeanContext context){}
  +
  +  public void
  +    doStart()
  +  {
  +    _log=LogFactory.getLog(Cluster.class.getName()+"#"+_objectName.getKeyProperty("name"));
  +    _log.debug("starting");
  +  }
  +
  +  public void
  +    doStop()
  +  {
  +    _log.debug("stopping");
  +  }
  +
  +  public void
  +    doFail()
  +  {
  +    _log.debug("failing");
  +  }
  +
  +  public void
  +    setMBeanContext(GeronimoMBeanContext context)
  +  {
  +    _objectName=(context==null)?null:context.getObjectName();
  +    _server    =(context==null)?null:context.getServer();
  +  }
   
     public static GeronimoMBeanInfo
       getGeronimoMBeanInfo()
     {
       GeronimoMBeanInfo mbeanInfo=new GeronimoMBeanInfo();
       // set target class in concrete subclasses...
  +    mbeanInfo.addAttributeInfo(new GeronimoAttributeInfo("Reference", true, false, "a local reference to this Cluster"));
       return mbeanInfo;
     }
   }