You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by fh...@apache.org on 2006/03/31 17:02:19 UTC

svn commit: r390440 - in /tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes: Channel.java ChannelInterceptor.java group/ChannelCoordinator.java group/ChannelInterceptorBase.java group/GroupChannel.java

Author: fhanik
Date: Fri Mar 31 07:02:18 2006
New Revision: 390440

URL: http://svn.apache.org/viewcvs?rev=390440&view=rev
Log:
Channel interceptors can all have a flag to use, and the group channel can make an optional dependency check to make sure that two interceptors don't have the same flag set. In some cases, it is desired for two interceptors to have the same flag, in those cases, you can turn off this dependency check

Modified:
    tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/Channel.java
    tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/ChannelInterceptor.java
    tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelCoordinator.java
    tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelInterceptorBase.java
    tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/GroupChannel.java

Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/Channel.java
URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/Channel.java?rev=390440&r1=390439&r2=390440&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/Channel.java (original)
+++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/Channel.java Fri Mar 31 07:02:18 2006
@@ -39,10 +39,11 @@
      * 
      * Send options
      */
-    public static final int SEND_OPTIONS_USE_ACK = 0x0001;
-    public static final int SEND_OPTIONS_SYNCHRONIZED_ACK = 0x0002;
+
+    public static final int SEND_OPTIONS_BYTE_MESSAGE = 0x0001;
+    public static final int SEND_OPTIONS_USE_ACK = 0x0002;
+    public static final int SEND_OPTIONS_SYNCHRONIZED_ACK = 0x0004;
     public static final int SEND_OPTIONS_DEFAULT = SEND_OPTIONS_USE_ACK;
-    public static final int SEND_OPTIONS_BYTE_MESSAGE = 0x0004;
     public static final int SEND_OPTIONS_ASYNCHRONOUS = 0x0008;
 
     

Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/ChannelInterceptor.java
URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/ChannelInterceptor.java?rev=390440&r1=390439&r2=390440&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/ChannelInterceptor.java (original)
+++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/ChannelInterceptor.java Fri Mar 31 07:02:18 2006
@@ -25,6 +25,9 @@
 
 public interface ChannelInterceptor extends MembershipListener {
 
+    public int getOptionFlag();
+    public void setOptionFlag(int flag);
+
     public void setNext(ChannelInterceptor next) ;
 
     public ChannelInterceptor getNext();

Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelCoordinator.java
URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelCoordinator.java?rev=390440&r1=390439&r2=390440&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelCoordinator.java (original)
+++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelCoordinator.java Fri Mar 31 07:02:18 2006
@@ -27,6 +27,7 @@
 import org.apache.catalina.tribes.transport.ReplicationTransmitter;
 import org.apache.catalina.tribes.membership.McastService;
 import org.apache.catalina.tribes.transport.nio.NioReceiver;
+import org.apache.catalina.tribes.Channel;
 
 
 /**
@@ -41,6 +42,9 @@
     private ChannelSender clusterSender = new ReplicationTransmitter();
     private MembershipService membershipService = new McastService();
     private boolean started = false;
+    
+    protected int optionFlag = Channel.SEND_OPTIONS_BYTE_MESSAGE|Channel.SEND_OPTIONS_USE_ACK|Channel.SEND_OPTIONS_SYNCHRONIZED_ACK;
+    
 
     public ChannelCoordinator() {
         

Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelInterceptorBase.java
URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelInterceptorBase.java?rev=390440&r1=390439&r2=390440&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelInterceptorBase.java (original)
+++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelInterceptorBase.java Fri Mar 31 07:02:18 2006
@@ -34,6 +34,8 @@
 
     private ChannelInterceptor next;
     private ChannelInterceptor previous;
+    //default value
+    protected int optionFlag = 0;
 
     public ChannelInterceptorBase() {
 
@@ -51,8 +53,16 @@
         this.previous = previous;
     }
 
+    public void setOptionFlag(int optionFlag) {
+        this.optionFlag = optionFlag;
+    }
+
     public final ChannelInterceptor getPrevious() {
         return previous;
+    }
+
+    public int getOptionFlag() {
+        return optionFlag;
     }
 
     public void sendMessage(Member[] destination, ChannelMessage msg, InterceptorPayload payload) throws

Modified: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/GroupChannel.java
URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/GroupChannel.java?rev=390440&r1=390439&r2=390440&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/GroupChannel.java (original)
+++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/GroupChannel.java Fri Mar 31 07:02:18 2006
@@ -27,14 +27,13 @@
 import org.apache.catalina.tribes.ChannelMessage;
 import org.apache.catalina.tribes.ChannelReceiver;
 import org.apache.catalina.tribes.ChannelSender;
+import org.apache.catalina.tribes.ErrorHandler;
 import org.apache.catalina.tribes.ManagedChannel;
 import org.apache.catalina.tribes.Member;
 import org.apache.catalina.tribes.MembershipListener;
 import org.apache.catalina.tribes.MembershipService;
 import org.apache.catalina.tribes.io.ClusterData;
 import org.apache.catalina.tribes.io.XByteBuffer;
-import org.apache.catalina.tribes.ErrorHandler;
-import org.apache.catalina.tribes.group.InterceptorPayload;
 
 /**
  * The GroupChannel manages the replication channel. It coordinates
@@ -52,6 +51,7 @@
     
     private ArrayList membershipListeners = new ArrayList();
     private ArrayList channelListeners = new ArrayList();
+    private boolean optionCheck = false;
 
     public GroupChannel() {
         addInterceptor(this);
@@ -165,7 +165,41 @@
             MembershipListener membershipListener = (MembershipListener)membershipListeners.get(i);
             if (membershipListener != null) membershipListener.memberDisappeared(member);
         }
-    }    
+    }
+    
+    protected void checkOptionFlags() throws ChannelException {
+        StringBuffer conflicts = new StringBuffer();
+        ChannelInterceptor first = interceptors;
+        while ( first != null ) {
+            int flag = first.getOptionFlag();
+            if ( flag != 0 ) {
+                ChannelInterceptor next = first.getNext();
+                while ( next != null ) {
+                    int nflag = next.getOptionFlag();
+                    if ( (flag & nflag) == flag ) {
+                        conflicts.append("[");
+                        conflicts.append(first.getClass().getName());
+                        conflicts.append(":");
+                        conflicts.append(flag);
+                        conflicts.append(" == ");
+                        conflicts.append(next.getClass().getName());
+                        conflicts.append(":");
+                        conflicts.append(nflag);
+                        conflicts.append("] ");
+                    }//end if
+                    next = next.getNext();
+                }//while
+            }//end if
+            first = first.getNext();
+        }//while
+        if ( conflicts.length() > 0 ) throw new ChannelException("Interceptor option flag conflict: "+conflicts.toString());
+    
+    }
+    
+    public void start(int svc) throws ChannelException {
+        if (optionCheck) checkOptionFlags();
+        super.start(svc);
+    }
     
     public ChannelInterceptor getFirstInterceptor() {
         if (interceptors != null) return interceptors;
@@ -243,6 +277,14 @@
         public void remove() {
             //empty operation
         }
+    }
+
+    public void setOptionCheck(boolean optionCheck) {
+        this.optionCheck = optionCheck;
+    }
+
+    public boolean getOptionCheck() {
+        return optionCheck;
     }
 
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org