[CVS spice] Added Avalon impl of SocketAcceptorManager.
mauro-yCVjj/[email protected] 10 Jul 2004 13:06:21 -0000
| Newsgroups | gmane.comp.java.spice.cvs |
|---|---|
| Message-ID | <[email protected]> |
<html>
<head>
<style><!--
body {background-color:#ffffff;}
.file {border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;}
.pathname {font-family:monospace; float:right;}
.fileheader {margin-bottom:.5em;}
.diff {margin:0;}
.tasklist {padding:4px;border:1px dashed #000000;margin-top:1em;}
.tasklist ul {margin-top:0;margin-bottom:0;}
tr.alt {background-color:#eeeeee}
#added {background-color:#ddffdd;}
#addedchars {background-color:#99ff99;font-weight:bolder;}
tr.alt #added {background-color:#ccf7cc;}
#removed {background-color:#ffdddd;}
#removedchars {background-color:#ff9999;font-weight:bolder;}
tr.alt #removed {background-color:#f7cccc;}
#info {color:#888888;}
#context {background-color:#eeeeee;}
td {padding-left:.3em;padding-right:.3em;}
tr.head {border-bottom-width:1px;border-bottom-style:solid;}
tr.head td {padding:0;padding-top:.2em;}
.task {background-color:#ffff00;}
.comment {padding:4px;border:1px dashed #000000;background-color:#ffffdd}
.error {color:red;}
hr {border-width:0px;height:2px;background:black;}
--></style>
</head>
<body>
<table cellspacing="0" cellpadding="0" border="0" rules="cols">
<tr class="head"><td colspan="4">Commit in <b><tt>spice/components/netserve</tt></b><span id="info"> on MAIN</span></td></tr>
<tr><td><tt>src/java/org/codehaus/spice/netserve/connection/impl/<a href="#file1"><span id="added">AvalonAcceptorMonitor.java</span></a></tt></td><td align="right" id="added">+72</td><td></td><td nowrap="nowrap" align="right">added 1.1</td></tr>
<tr class="alt"><td><tt> /<a href="#file2"><span id="added">AvalonAcceptorManager.java</span></a></tt></td><td align="right" id="added">+67</td><td></td><td nowrap="nowrap" align="right">added 1.1</td></tr>
<tr><td><tt><a href="#file3">project.xml</a></tt></td><td align="right" id="added">+6</td><td align="right" id="removed">-1</td><td nowrap="nowrap" align="center">1.24 -> 1.25</td></tr>
<tr class="alt"><td><tt>src/test/org/codehaus/spice/netserve/connection/impl/<a href="#file4"><span id="added">AvalonAcceptorManagerTestCase.java</span></a></tt></td><td align="right" id="added">+30</td><td></td><td nowrap="nowrap" align="right">added 1.1</td></tr>
<tr><td><tt> /<a href="#file5"><span id="added">AvalonAcceptorMonitorTestCase.java</span></a></tt></td><td align="right" id="added">+73</td><td></td><td nowrap="nowrap" align="right">added 1.1</td></tr>
<tr><td></td><td align="right" id="added">+248</td><td align="right" id="removed">-1</td><td></td></tr>
</table>
<small id="info">4 added + 1 modified, total 5 files</small><br />
<pre class="comment">
Added Avalon impl of SocketAcceptorManager.
Changed version to 1.1-b2.
</pre>
<hr /><a name="file1" /><div class="file">
<span class="pathname" id="added">spice/components/netserve/src/java/org/codehaus/spice/netserve/connection/impl<br /></span>
<div class="fileheader" id="added"><big><b>AvalonAcceptorMonitor.java</b></big> <small id="info">added at 1.1</small></div>
<pre class="diff"><small id="info">diff -N AvalonAcceptorMonitor.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ AvalonAcceptorMonitor.java 10 Jul 2004 13:06:21 -0000 1.1
@@ -0,0 +1,72 @@
</small></pre><pre class="diff" id="added">+package org.codehaus.spice.netserve.connection.impl;
+
+import org.apache.avalon.framework.logger.Logger;
+
+/**
+ * AcceptorMonitor that writes out messages to Avalon Logger.
+ */
+public class AvalonAcceptorMonitor
+ extends AbstractLoggingAcceptorMonitor
+{
+ /**
+ * The associated Avalon Logger.
+ */
+ private final Logger m_logger;
+
+ /**
+ * Create AcceptorMonitor that writes to Avalon Logger.
+ *
+ * @param logger the logger
+ */
+ public AvalonAcceptorMonitor( final Logger logger )
+ {
+ if ( null == logger )
+ {
+ throw new NullPointerException( "logger" );
+ }
+ m_logger = logger;
+ }
+
+ /**
+ * @see AbstractLoggingAcceptorMonitor#isDebugEnabled
+ */
+ protected boolean isDebugEnabled()
+ {
+ return getLogger().isDebugEnabled();
+ }
+
+ /**
+ * @see AbstractLoggingAcceptorMonitor#debug
+ */
+ protected void debug( final String message )
+ {
+ getLogger().debug( message );
+ }
+
+ /**
+ * @see AbstractLoggingAcceptorMonitor#info
+ */
+ protected void info( final String message )
+ {
+ getLogger().info( message );
+ }
+
+ /**
+ * @see AbstractLoggingAcceptorMonitor#warn
+ */
+ protected void warn( final String message,
+ final Exception e )
+ {
+ getLogger().warn( message, e );
+ }
+
+ /**
+ * Return the logger.
+ *
+ * @return the logger
+ */
+ protected Logger getLogger()
+ {
+ return m_logger;
+ }
+}
</pre></div>
<hr /><a name="file2" /><div class="file">
<span class="pathname" id="added">spice/components/netserve/src/java/org/codehaus/spice/netserve/connection/impl<br /></span>
<div class="fileheader" id="added"><big><b>AvalonAcceptorManager.java</b></big> <small id="info">added at 1.1</small></div>
<pre class="diff"><small id="info">diff -N AvalonAcceptorManager.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ AvalonAcceptorManager.java 10 Jul 2004 13:06:21 -0000 1.1
@@ -0,0 +1,67 @@
</small></pre><pre class="diff" id="added">+package org.codehaus.spice.netserve.connection.impl;
+
+import org.apache.avalon.framework.activity.Disposable;
+import org.apache.avalon.framework.activity.Initializable;
+import org.apache.avalon.framework.configuration.Configurable;
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.logger.LogEnabled;
+import org.apache.avalon.framework.logger.Logger;
+
+/**
+ * An Avalon compliant implementation of AcceptorManager.
+ *
+ * <p>The component takes a single configuration parameter;
+ * "shutdownTimeout". This specifies the amount of time to wait
+ * while waiting for connections to shutdown gracefully. A
+ * sample configuration follows;</p>
+ * <pre>
+ * &lt;!-- wait 200ms for connections to gracefully shutdown --&gt;
+ * &lt;shutdownTimeout&gt;200&lt;/shutdownTimeout&gt;
+ * </pre>
+ *
+ * @author Peter Donald
+ * @author Mauro Talevi
+ * @version $Revision: 1.1 $ $Date: 2004/07/10 13:06:21 $
+ * @phoenix.component
+ * @phoenix.service type="org.codehaus.spice.netserve.connection.SocketAcceptorManager"
+ * @see org.codehaus.spice.netserve.connection.impl.DefaultAcceptorManager
+ */
+public class AvalonAcceptorManager
+ extends DefaultAcceptorManager
+ implements LogEnabled, Configurable, Initializable, Disposable
+{
+ /**
+ * @phoenix.logger
+ */
+ public void enableLogging( final Logger logger )
+ {
+ setMonitor( new AvalonAcceptorMonitor( logger ) );
+ }
+
+ /**
+ * @phoenix.configuration type="http://relaxng.org/ns/structure/1.0"
+ * location="AcceptorManager-schema.xml"
+ */
+ public void configure( final Configuration configuration )
+ throws ConfigurationException
+ {
+ setShutdownTimeout( configuration.getChild( "shutdownTimeout" ).getValueAsInteger( 0 ) );
+ }
+
+ /**
+ * Nothing to do to initial AcceptorManager.
+ */
+ public void initialize()
+ throws Exception
+ {
+ }
+
+ /**
+ * Shutdown all connections.
+ */
+ public void dispose()
+ {
+ shutdownAcceptors();
+ }
+}
</pre></div>
<hr /><a name="file3" /><div class="file">
<span class="pathname">spice/components/netserve<br /></span>
<div class="fileheader"><big><b>project.xml</b></big> <small id="info">1.24 -> 1.25</small></div>
<pre class="diff"><small id="info">diff -u -r1.24 -r1.25
--- project.xml 16 May 2004 09:42:39 -0000 1.24
+++ project.xml 10 Jul 2004 13:06:21 -0000 1.25
@@ -4,7 +4,7 @@
</small></pre><pre class="diff" id="context"> <name>Spice Netserve</name>
<id>spice-netserve</id>
<package>org.codehaus.spice.netserve</package>
</pre><pre class="diff" id="removed">- <currentVersion>1.1-b<span id="removedchars">1</span></currentVersion>
</pre><pre class="diff" id="added">+ <currentVersion>1.1-b<span id="addedchars">2</span></currentVersion>
</pre><pre class="diff" id="context"> <inceptionYear>1999</inceptionYear>
<shortDescription>Netserve is set of utility components for creating a Network Server.</shortDescription>
</pre><pre class="diff"><small id="info">@@ -16,6 +16,11 @@
</small></pre><pre class="diff" id="context"> </description>
<versions>
</pre><pre class="diff" id="added">+ <version>
+ <id>1.1-b2</id>
+ <name>1.1-b2</name>
+ <tag>NETSERVE_1_1_b2-tag</tag>
+ </version>
</pre><pre class="diff" id="context"> <version>
<id>1.1-b1</id>
<name>1.1-b1</name>
</pre></div>
<hr /><a name="file4" /><div class="file">
<span class="pathname" id="added">spice/components/netserve/src/test/org/codehaus/spice/netserve/connection/impl<br /></span>
<div class="fileheader" id="added"><big><b>AvalonAcceptorManagerTestCase.java</b></big> <small id="info">added at 1.1</small></div>
<pre class="diff"><small id="info">diff -N AvalonAcceptorManagerTestCase.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ AvalonAcceptorManagerTestCase.java 10 Jul 2004 13:06:21 -0000 1.1
@@ -0,0 +1,30 @@
</small></pre><pre class="diff" id="added">+package org.codehaus.spice.netserve.connection.impl;
+
+import junit.framework.TestCase;
+import org.apache.avalon.framework.configuration.DefaultConfiguration;
+import org.apache.avalon.framework.logger.ConsoleLogger;
+
+public class AvalonAcceptorManagerTestCase
+ extends TestCase
+{
+ public void testAvalonAcceptorManager()
+ throws Exception
+ {
+ final AvalonAcceptorManager manager = new AvalonAcceptorManager();
+ final DefaultConfiguration root = new DefaultConfiguration( "root", "" );
+ final DefaultConfiguration configuration = new DefaultConfiguration( "shutdownTimeout", "" );
+ configuration.setValue( "22" );
+ root.addChild( configuration );
+
+ final ConsoleLogger logger = new ConsoleLogger( ConsoleLogger.LEVEL_DISABLED );
+ manager.enableLogging( logger );
+ final AcceptorMonitor monitor = manager.getMonitor();
+ assertTrue( "getMonitor() instanceof AvalonAcceptorMonitor", monitor instanceof AvalonAcceptorMonitor );
+ final AvalonAcceptorMonitor dnaMonitor = (AvalonAcceptorMonitor) monitor;
+ assertEquals( "logger", logger, dnaMonitor.getLogger() );
+ manager.configure( root );
+ assertEquals( "getShutdownTimeout()", 22, manager.getShutdownTimeout() );
+ manager.initialize();
+ manager.dispose();
+ }
+}
</pre></div>
<hr /><a name="file5" /><div class="file">
<span class="pathname" id="added">spice/components/netserve/src/test/org/codehaus/spice/netserve/connection/impl<br /></span>
<div class="fileheader" id="added"><big><b>AvalonAcceptorMonitorTestCase.java</b></big> <small id="info">added at 1.1</small></div>
<pre class="diff"><small id="info">diff -N AvalonAcceptorMonitorTestCase.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ AvalonAcceptorMonitorTestCase.java 10 Jul 2004 13:06:21 -0000 1.1
@@ -0,0 +1,73 @@
</small></pre><pre class="diff" id="added">+package org.codehaus.spice.netserve.connection.impl;
+
+import java.io.IOException;
+import java.net.ServerSocket;
+import junit.framework.TestCase;
+import org.apache.avalon.framework.logger.Logger;
+import com.mockobjects.dynamic.C;
+import com.mockobjects.dynamic.Mock;
+
+public class AvalonAcceptorMonitorTestCase
+ extends TestCase
+{
+ public void testAvalonAcceptorMonitor()
+ throws Exception
+ {
+ final Mock mockLogger = new Mock( Logger.class );
+
+ final String name = "MyName";
+ final ServerSocket serverSocket = new ServerSocket( 2023 );
+ final IOException ioe = new IOException();
+
+ final String acceptorCreatedMessage =
+ "Creating Acceptor " + name + " on " +
+ serverSocket.getInetAddress().getHostAddress() + ":" +
+ serverSocket.getLocalPort() + ".";
+
+ final String acceptorClosingMessage =
+ "Closing Acceptor " + name + ".";
+
+ final String serverSocketListening =
+ "About to call accept() on ServerSocket '" + name + "'.";
+
+ final String errorAcceptingConnectionMessage =
+ "Error Accepting connection on " + name;
+
+ final String errorClosingServerSocketMessage =
+ "Error Closing Server Socket " + name;
+
+ mockLogger.expect( "info", C.args( C.eq( acceptorCreatedMessage ) ) );
+ mockLogger.expect( "info", C.args( C.eq( acceptorClosingMessage ) ) );
+ mockLogger.expectAndReturn( "isDebugEnabled", C.NO_ARGS, false );
+ mockLogger.expectAndReturn( "isDebugEnabled", C.NO_ARGS, true );
+ mockLogger.expect( "debug", C.args( C.eq( serverSocketListening ) ) );
+ mockLogger.expect( "warn", C.args( C.eq( errorAcceptingConnectionMessage ), C.eq( ioe ) ) );
+ mockLogger.expect( "warn", C.args( C.eq( errorClosingServerSocketMessage ), C.eq( ioe ) ) );
+ final Logger logger = (Logger) mockLogger.proxy();
+
+ final AcceptorMonitor monitor = new AvalonAcceptorMonitor( logger );
+ monitor.acceptorCreated( name, serverSocket );
+ monitor.acceptorClosing( name, serverSocket );
+ monitor.serverSocketListening( name, serverSocket );
+ monitor.serverSocketListening( name, serverSocket );
+ monitor.errorAcceptingConnection( name, ioe );
+ monitor.errorClosingServerSocket( name, ioe );
+
+ mockLogger.verify();
+ }
+
+ public void testAvalonAcceptorMonitorPassedNullIntoCtor()
+ throws Exception
+ {
+ try
+ {
+ new AvalonAcceptorMonitor( null );
+ }
+ catch ( final NullPointerException npe )
+ {
+ assertEquals( "npe.getMessage()", "logger", npe.getMessage() );
+ return;
+ }
+ fail( "Expected to fail due to npe in ctor" );
+ }
+}
</pre></div>
<center><small><a href="http://www.badgers-in-foil.co.uk/projects/cvsspam/" title="commit -> email">CVSspam</a> 0.2.8</small></center>
</body></html>