Author: jfclere
Date: Thu Apr  9 13:00:21 2009
New Revision: 763635

URL: http://svn.apache.org/viewvc?rev=763635&view=rev
Log:
Move the multi logic to MultiCastSender with
the idea to TCP sockets and a list of proxy too.

Added:
    tomcat/trunk/java/org/apache/catalina/ha/backend/MultiCastSender.java
    tomcat/trunk/java/org/apache/catalina/ha/backend/Sender.java
Modified:
    tomcat/trunk/java/org/apache/catalina/ha/backend/HeartbeatListener.java

Modified: 
tomcat/trunk/java/org/apache/catalina/ha/backend/HeartbeatListener.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/backend/HeartbeatListener.java?rev=763635&r1=763634&r2=763635&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/ha/backend/HeartbeatListener.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/ha/backend/HeartbeatListener.java Thu 
Apr  9 13:00:21 2009
@@ -55,8 +55,6 @@
     public void setPort(int port) { this.port = port; }
 
     /* for multicasting stuff */
-    MulticastSocket s = null;
-    InetAddress group = null;
     String ip = "224.0.1.105"; /* Multicast IP */
     int multiport = 23364;     /* Multicast Port */
     int ttl = 16;
@@ -70,23 +68,17 @@
 
     private CollectedInfo coll = null;
 
+    private Sender sender = null;
+
     public void containerEvent(ContainerEvent event) {
     }
 
     public void lifecycleEvent(LifecycleEvent event) {
         Object source = event.getLifecycle();
         if (Lifecycle.PERIODIC_EVENT.equals(event.getType())) {
-            if (s == null) {
-                try {
-                    group = InetAddress.getByName(ip);
-                    s = new MulticastSocket(port);
-                    s.setTimeToLive(16);
-                    s.joinGroup(group);
-                } catch (Exception ex) {
-                    log.error("Unable to use multicast: " + ex);
-                    s = null;
-                    return;
-                } 
+            if (sender == null) {
+                sender = new MultiCastSender();
+                sender.init(this);
             }
 
             /* Read busy and ready */
@@ -108,19 +100,10 @@
             }
             String output = new String();
             output = "v=1&ready=" + coll.ready + "&busy=" + coll.busy;
-            byte[] buf;
-            try {
-                buf = output.getBytes("US-ASCII");
-            } catch (UnsupportedEncodingException ex) {
-                buf = output.getBytes();
-            }
-            DatagramPacket data = new DatagramPacket(buf, buf.length, group, 
multiport);
             try {
-                s.send(data);
+                sender.send(output);
             } catch (Exception ex) {
                 log.error("Unable to send colllected load information: " + ex);
-                s.close();
-                s = null;
             }
         }
     }

Added: tomcat/trunk/java/org/apache/catalina/ha/backend/MultiCastSender.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/backend/MultiCastSender.java?rev=763635&view=auto
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/ha/backend/MultiCastSender.java 
(added)
+++ tomcat/trunk/java/org/apache/catalina/ha/backend/MultiCastSender.java Thu 
Apr  9 13:00:21 2009
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+package org.apache.catalina.ha.backend;
+
+import org.apache.juli.logging.Log;
+import org.apache.juli.logging.LogFactory;
+
+import java.net.MulticastSocket;
+import java.net.InetAddress;
+import java.net.DatagramPacket;
+import java.io.UnsupportedEncodingException;
+
+/*
+ * Sender to proxies using multicast socket.
+ */
+public class MultiCastSender
+    implements Sender {
+
+    private static Log log = LogFactory.getLog(HeartbeatListener.class);
+
+    HeartbeatListener config = null;
+
+    /* for multicasting stuff */
+    MulticastSocket s = null;
+    InetAddress group = null;
+
+    public void init(HeartbeatListener config) {
+        this.config = config;
+    }
+
+    public int send(String mess) throws Exception {
+        if (s == null) {
+            try {
+                group = InetAddress.getByName(config.getGroup());
+                s = new MulticastSocket(config.getMultiport());
+                s.setTimeToLive(config.getTtl());
+                s.joinGroup(group);
+            } catch (Exception ex) {
+                log.error("Unable to use multicast: " + ex);
+                s = null;
+                return -1;
+            } 
+        }
+
+        byte[] buf;
+        try {
+            buf = mess.getBytes("US-ASCII");
+        } catch (UnsupportedEncodingException ex) {
+            buf = mess.getBytes();
+        }
+        DatagramPacket data = new DatagramPacket(buf, buf.length, group, 
config.getMultiport());
+        try {
+            s.send(data);
+        } catch (Exception ex) {
+            log.error("Unable to send colllected load information: " + ex);
+            s.close();
+            s = null;
+            return -1;
+        }
+        return 0;
+    }
+
+}

Added: tomcat/trunk/java/org/apache/catalina/ha/backend/Sender.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/backend/Sender.java?rev=763635&view=auto
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/ha/backend/Sender.java (added)
+++ tomcat/trunk/java/org/apache/catalina/ha/backend/Sender.java Thu Apr  9 
13:00:21 2009
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+package org.apache.catalina.ha.backend;
+
+/*
+ * Interface to send data to proxies
+ *
+ */
+public interface Sender {
+
+  /**
+   * Set the configuration parameters
+   */
+  public void init(HeartbeatListener config);
+
+  /**
+   * Send the message to the proxies
+   */
+  public int send(String mess) throws Exception;
+}



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

Reply via email to