psmith 2003/06/19 21:52:21
Modified: src/java/org/apache/log4j/net MulticastReceiver.java
XMLSocketReceiver.java SocketReceiver.java
Log:
removed the isActive property from these classes as they will
now inherit them from PluginSkeleton.
Revision Changes Path
1.12 +1 -7
jakarta-log4j-sandbox/src/java/org/apache/log4j/net/MulticastReceiver.java
Index: MulticastReceiver.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j-sandbox/src/java/org/apache/log4j/net/MulticastReceiver.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- MulticastReceiver.java 19 Jun 2003 22:55:34 -0000 1.11
+++ MulticastReceiver.java 20 Jun 2003 04:52:21 -0000 1.12
@@ -116,14 +116,8 @@
}
/**
- Returns true if this receiver is active. */
- public synchronized boolean isActive() {
- return isActive;
- }
-
- /**
Sets the flag to indicate if receiver is active or not. */
- protected synchronized void setActive(boolean isActive) {
+ public synchronized void setActive(boolean isActive) {
this.isActive = isActive;
}
1.4 +0 -6
jakarta-log4j-sandbox/src/java/org/apache/log4j/net/XMLSocketReceiver.java
Index: XMLSocketReceiver.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j-sandbox/src/java/org/apache/log4j/net/XMLSocketReceiver.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- XMLSocketReceiver.java 19 Jun 2003 22:55:34 -0000 1.3
+++ XMLSocketReceiver.java 20 Jun 2003 04:52:21 -0000 1.4
@@ -137,12 +137,6 @@
}
/**
- Sets the flag to indicate if receiver is active or not. */
- protected synchronized void setActive(boolean _active) {
- active = _active;
- }
-
- /**
Starts the SocketReceiver with the current options. */
public void activateOptions() {
if (!isActive()) {
1.9 +98 -33
jakarta-log4j-sandbox/src/java/org/apache/log4j/net/SocketReceiver.java
Index: SocketReceiver.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j-sandbox/src/java/org/apache/log4j/net/SocketReceiver.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- SocketReceiver.java 18 Jun 2003 04:02:20 -0000 1.8
+++ SocketReceiver.java 20 Jun 2003 04:52:21 -0000 1.9
@@ -53,6 +53,8 @@
import org.apache.log4j.plugins.Receiver;
import org.apache.log4j.spi.LoggerRepository;
+import java.io.IOException;
+
import java.net.ServerSocket;
import java.net.Socket;
@@ -77,8 +79,9 @@
@since 1.3
*/
public class SocketReceiver extends Receiver implements Runnable, PortBased {
+ private boolean shutdown;
+ private Thread rThread;
protected int port;
- protected boolean active = false;
private ServerSocket serverSocket;
private Vector socketList = new Vector();
private SocketNodeEventListener listener = null;
@@ -128,35 +131,60 @@
}
/**
- Returns true if this receiver is active. */
- public synchronized boolean isActive() {
- return active;
- }
-
- /**
- Sets the flag to indicate if receiver is active or not. */
- public synchronized void setActive(boolean _active) {
- active = _active;
- }
-
- /**
Starts the SocketReceiver with the current options. */
public void activateOptions() {
if (!isActive()) {
- Thread rThread = new Thread(this);
+ // shutdown();
+ rThread = new Thread(this);
rThread.setDaemon(true);
rThread.start();
+ setActive(true);
+ setShutdown(false);
}
}
/**
- Called when the receiver should be stopped. Closes the
- server socket and all of the open sockets. */
+ * Called when the receiver should be stopped. Closes the
+ * server socket and all of the open sockets.
+ */
public synchronized void shutdown() {
+ LogLog.debug(getName() + " received shutdown request");
+
// mark this as no longer running
- active = false;
+ setActive(false);
+
+ if (rThread != null) {
+ rThread.interrupt();
+ rThread = null;
+ }
+
+ doShutdown();
+ }
+
+ /**
+ * Does the actual shutting down by closing the server socket
+ * and any connected sockets that have been created.
+ */
+ private void doShutdown() {
+ setActive(false);
+
+ LogLog.debug(getName() + " doShutdown called");
// close the server socket
+ closeServerSocket();
+
+ // close all of the accepted sockets
+ closeAllAcceptedSockets();
+
+ setShutdown(true);
+ }
+
+ /**
+ * Closes the server socket, if created.
+ */
+ private void closeServerSocket() {
+ LogLog.debug(getName() + " closing server socket");
+
try {
if (serverSocket != null) {
serverSocket.close();
@@ -165,7 +193,13 @@
// ignore for now
}
- // close all of the accepted sockets
+ serverSocket = null;
+ }
+
+ /**
+ * Closes all the connected sockets in the List.
+ */
+ private void closeAllAcceptedSockets() {
for (int x = 0; x < socketList.size(); x++) {
try {
((Socket) socketList.get(x)).close();
@@ -175,14 +209,17 @@
}
// clear member variables
- serverSocket = null;
socketList.clear();
}
/**
Loop, accepting new socket connections. */
public void run() {
- setActive(true);
+ /**
+ * Ensure we start fresh.
+ */
+ closeServerSocket();
+ closeAllAcceptedSockets();
// start the server socket
try {
@@ -192,26 +229,33 @@
"error starting SocketReceiver (" + this.getName()
+ "), receiver did not start", e);
setActive(false);
+ setShutdown(true);
return;
}
+ Socket socket = null;
+
try {
- Socket socket = null;
- LogLog.debug("in run-about to enter while isactiveloop");
+ LogLog.debug("in run-about to enter while not interrupted loop");
- while (isActive()) {
+ setActive(true);
+
+ while (!rThread.isInterrupted()) {
// if we have a socket, start watching it
if (socket != null) {
LogLog.debug("socket not null - creating and starting socketnode");
socketList.add(socket);
SocketNode node = new SocketNode(socket, this);
- SocketNodeEventListener[] listeners =
(SocketNodeEventListener[])listenerList.getListeners(SocketNodeEventListener.class);
+ SocketNodeEventListener[] listeners =
+ (SocketNodeEventListener[]) listenerList.getListeners(
+ SocketNodeEventListener.class);
+
for (int i = 0; i < listeners.length; i++) {
- node.addSocketNodeEventListener(listeners[i]);
+ node.addSocketNodeEventListener(listeners[i]);
}
-
+
new Thread(node).start();
socket = null;
}
@@ -222,19 +266,25 @@
socket = serverSocket.accept();
LogLog.debug("accepted socket");
}
-
- // socket not watched because we a no longer running
- // so close it now.
- if (socket != null) {
- socket.close();
- }
} catch (Exception e) {
LogLog.warn(
"exception while watching socket server in SocketReceiver ("
+ this.getName() + "), stopping", e);
}
- setActive(false);
+ LogLog.debug(getName() + " has exited the not interrupted loop");
+
+ // socket not watched because we a no longer running
+ // so close it now.
+ if (socket != null) {
+ try {
+ socket.close();
+ } catch (IOException e1) {
+ e1.printStackTrace();
+ }
+ }
+
+ LogLog.debug(getName() + " is exiting main run loop");
}
/**
@@ -300,6 +350,21 @@
removeSocketNodeEventListener(listener);
addSocketNodeEventListener(listener);
this.listener = listener;
+ }
+
+ /**
+ * Returns the shutdown property of this Receiver
+ * @return
+ */
+ private boolean isShutdown() {
+ return shutdown;
+ }
+
+ /**
+ * @param b
+ */
+ private void setShutdown(boolean b) {
+ shutdown = b;
}
public static class SocketDetail implements AddressBased, PortBased {
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]