You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2004/02/15 06:31:44 UTC
svn commit: rev 6654 - in incubator/directory/eve/trunk/eve/frontend: input/merlin-impl/src/java/org/apache/eve/input input/pojo-impl/src/java/org/apache/eve/input input/spi/src/java/org/apache/eve/input listener/merlin-impl listener/merlin-impl/conf listener/merlin-impl/src/java/org/apache/eve/listener listener/pojo-impl/src/java/org/apache/eve/listener listener/spi/src/java/org/apache/eve/listener
Author: akarasulu
Date: Sat Feb 14 21:31:43 2004
New Revision: 6654
Added:
incubator/directory/eve/trunk/eve/frontend/listener/merlin-impl/src/java/org/apache/eve/listener/MerlinListenerManager.xml
incubator/directory/eve/trunk/eve/frontend/listener/spi/src/java/org/apache/eve/listener/DefaultServerListener.java
incubator/directory/eve/trunk/eve/frontend/listener/spi/src/java/org/apache/eve/listener/LdapServerListener.java
Modified:
incubator/directory/eve/trunk/eve/frontend/input/merlin-impl/src/java/org/apache/eve/input/AvalonInputManagerMonitor.java
incubator/directory/eve/trunk/eve/frontend/input/merlin-impl/src/java/org/apache/eve/input/MerlinInputManager.java
incubator/directory/eve/trunk/eve/frontend/input/pojo-impl/src/java/org/apache/eve/input/DefaultInputManager.java
incubator/directory/eve/trunk/eve/frontend/input/spi/src/java/org/apache/eve/input/InputManagerMonitor.java
incubator/directory/eve/trunk/eve/frontend/input/spi/src/java/org/apache/eve/input/InputManagerMonitorAdapter.java
incubator/directory/eve/trunk/eve/frontend/listener/merlin-impl/conf/block.xml
incubator/directory/eve/trunk/eve/frontend/listener/merlin-impl/project.xml
incubator/directory/eve/trunk/eve/frontend/listener/merlin-impl/src/java/org/apache/eve/listener/AvalonListenerManagerMonitor.java
incubator/directory/eve/trunk/eve/frontend/listener/merlin-impl/src/java/org/apache/eve/listener/MerlinListenerManager.java
incubator/directory/eve/trunk/eve/frontend/listener/pojo-impl/src/java/org/apache/eve/listener/DefaultListenerManager.java
incubator/directory/eve/trunk/eve/frontend/listener/spi/src/java/org/apache/eve/listener/ListenerManagerMonitor.java
incubator/directory/eve/trunk/eve/frontend/listener/spi/src/java/org/apache/eve/listener/ListenerManagerMonitorAdapter.java
incubator/directory/eve/trunk/eve/frontend/listener/spi/src/java/org/apache/eve/listener/ServerListener.java
Log:
Fixed a few problems with the selector usage. And just cleaning up.
Modified: incubator/directory/eve/trunk/eve/frontend/input/merlin-impl/src/java/org/apache/eve/input/AvalonInputManagerMonitor.java
==============================================================================
--- incubator/directory/eve/trunk/eve/frontend/input/merlin-impl/src/java/org/apache/eve/input/AvalonInputManagerMonitor.java (original)
+++ incubator/directory/eve/trunk/eve/frontend/input/merlin-impl/src/java/org/apache/eve/input/AvalonInputManagerMonitor.java Sat Feb 14 21:31:43 2004
@@ -1,76 +1,213 @@
/*
-
- ============================================================================
- The Apache Software License, Version 1.1
- ============================================================================
-
- Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modifica-
- tion, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- 3. The end-user documentation included with the redistribution, if any, must
- include the following acknowledgment: "This product includes software
- developed by the Apache Software Foundation (http://www.apache.org/)."
- Alternately, this acknowledgment may appear in the software itself, if
- and wherever such third-party acknowledgments normally appear.
-
- 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve"
- and "Apache Software Foundation" must not be used to endorse or promote
- products derived from this software without prior written
- permission. For written permission, please contact apache@apache.org.
-
- 5. Products derived from this software may not be called "Apache", nor may
- "Apache" appear in their name, without prior written permission of the
- Apache Software Foundation.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
- DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- This software consists of voluntary contributions made by many individuals
- on behalf of the Apache Software Foundation. For more information on the
- Apache Software Foundation, please see <http://www.apache.org/>.
-
-*/
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed 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.eve.input ;
-import org.apache.avalon.framework.logger.Logger ;
-import org.apache.avalon.framework.logger.LogEnabled ;
+import java.io.IOException ;
+import java.nio.channels.Selector ;
+import java.nio.channels.SocketChannel ;
+
+import org.apache.avalon.framework.logger.AbstractLogEnabled ;
+
+import org.apache.eve.ResourceException ;
+import org.apache.eve.buffer.BufferPool ;
+import org.apache.eve.listener.ClientKey ;
+import org.apache.eve.listener.KeyExpiryException ;
/**
* A monitor that uses Avolon logging life-cycle an loggers to report events
* in the InputManager.
*
- * @author <a href="mailto:akarasulu@apache.org">Alex Karasulu</a>
- * @author $Author: akarasulu $
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
* @version $Rev: 6373 $
*/
-public class AvalonInputManagerMonitor extends InputManagerMonitorAdapter
- implements LogEnabled
+public class AvalonInputManagerMonitor extends AbstractLogEnabled
+ implements InputManagerMonitor
{
- /** the logger used to log messages */
- private Logger m_log ;
+ /* (non-Javadoc)
+ * @see org.apache.eve.input.InputManagerMonitor#bufferUnavailable(
+ * org.apache.eve.buffer.BufferPool, org.apache.eve.ResourceException)
+ */
+ public void bufferUnavailable( BufferPool a_bp, ResourceException a_fault )
+ {
+ if ( getLogger().isErrorEnabled() )
+ {
+ getLogger().error(
+ "Failed to acquire buffer resource from buffer pool "
+ + a_bp, a_fault ) ;
+ }
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.eve.input.InputManagerMonitor#channelCloseFailure(
+ * java.nio.channels.SocketChannel, java.io.IOException)
+ */
+ public void channelCloseFailure( SocketChannel a_channel,
+ IOException a_fault )
+ {
+ if ( getLogger().isErrorEnabled() )
+ {
+ getLogger().error( "Could not properly close socket channel "
+ + a_channel, a_fault ) ;
+ }
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.eve.input.InputManagerMonitor#channelRegistrationFailure(
+ * java.nio.channels.Selector, java.nio.channels.SocketChannel, int,
+ * java.io.IOException)
+ */
+ public void channelRegistrationFailure( Selector a_selector,
+ SocketChannel a_channel,
+ int a_key,
+ IOException a_fault )
+ {
+ if ( getLogger().isErrorEnabled() )
+ {
+ getLogger().error( "Could not register socket channel " + a_channel
+ + " for selector " + a_selector
+ + " using selection key mode " + a_key, a_fault ) ;
+ }
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.eve.input.InputManagerMonitor#disconnectedClient(
+ * org.apache.eve.listener.ClientKey)
+ */
+ public void disconnectedClient( ClientKey a_key )
+ {
+ if ( getLogger().isInfoEnabled() )
+ {
+ getLogger().info( "Disconnected client with key: " + a_key ) ;
+ }
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.eve.input.InputManagerMonitor#enteringSelect(
+ * java.nio.channels.Selector)
+ */
+ public void enteringSelect( Selector a_selector )
+ {
+ if ( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug( "About to enter select() on selector "
+ + a_selector ) ;
+ }
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.eve.input.InputManagerMonitor#inputRecieved(
+ * org.apache.eve.listener.ClientKey)
+ */
+ public void inputRecieved( ClientKey a_key )
+ {
+ if ( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug( "Got some input from " + a_key ) ;
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.eve.input.InputManagerMonitor#keyExpiryFailure(
+ * org.apache.eve.listener.ClientKey,
+ * org.apache.eve.listener.KeyExpiryException)
+ */
+ public void keyExpiryFailure( ClientKey a_key, KeyExpiryException a_fault )
+ {
+ if ( getLogger().isInfoEnabled() )
+ {
+ getLogger().info( "While working with client key " + a_key
+ + " it was prematurely expired!", a_fault ) ;
+ }
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.eve.input.InputManagerMonitor#readFailed(
+ * org.apache.eve.listener.ClientKey, java.io.IOException)
+ */
+ public void readFailed( ClientKey a_key, IOException a_fault )
+ {
+ if ( getLogger().isErrorEnabled() )
+ {
+ getLogger().error( "Encountered failure while reading from "
+ + a_key, a_fault ) ;
+ }
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.eve.input.InputManagerMonitor#registeredChannel(
+ * org.apache.eve.listener.ClientKey, java.nio.channels.Selector)
+ */
+ public void registeredChannel( ClientKey a_key, Selector a_selector )
+ {
+ if ( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug( "Succeeded in registering " + a_key
+ + " with selector " + a_selector ) ;
+ }
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.eve.input.InputManagerMonitor#selectFailure(
+ * java.nio.channels.Selector, java.io.IOException)
+ */
+ public void selectFailure( Selector a_selector, IOException a_fault )
+ {
+ if ( getLogger().isErrorEnabled() )
+ {
+ getLogger().error( "Failed on select() of selector " + a_selector,
+ a_fault ) ;
+ }
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.eve.input.InputManagerMonitor#selectorReturned(
+ * java.nio.channels.Selector)
+ */
+ public void selectorReturned( Selector a_selector )
+ {
+ if ( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug( "Select on " + a_selector + " returned" ) ;
+ }
+ }
+
- public void enableLogging( Logger a_logger )
+ /* (non-Javadoc)
+ * @see org.apache.eve.input.InputManagerMonitor#selectTimedOut(
+ * java.nio.channels.Selector)
+ */
+ public void selectTimedOut( Selector a_selector )
{
- m_log = a_logger ;
+ if ( getLogger().isWarnEnabled() )
+ {
+ getLogger().warn( "Select on " + a_selector + " timed out" ) ;
+ }
}
}
Modified: incubator/directory/eve/trunk/eve/frontend/input/merlin-impl/src/java/org/apache/eve/input/MerlinInputManager.java
==============================================================================
--- incubator/directory/eve/trunk/eve/frontend/input/merlin-impl/src/java/org/apache/eve/input/MerlinInputManager.java (original)
+++ incubator/directory/eve/trunk/eve/frontend/input/merlin-impl/src/java/org/apache/eve/input/MerlinInputManager.java Sat Feb 14 21:31:43 2004
@@ -1,52 +1,19 @@
/*
-
- ============================================================================
- The Apache Software License, Version 1.1
- ============================================================================
-
- Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modifica-
- tion, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- 3. The end-user documentation included with the redistribution, if any, must
- include the following acknowledgment: "This product includes software
- developed by the Apache Software Foundation (http://www.apache.org/)."
- Alternately, this acknowledgment may appear in the software itself, if
- and wherever such third-party acknowledgments normally appear.
-
- 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve"
- and "Apache Software Foundation" must not be used to endorse or promote
- products derived from this software without prior written
- permission. For written permission, please contact apache@apache.org.
-
- 5. Products derived from this software may not be called "Apache", nor may
- "Apache" appear in their name, without prior written permission of the
- Apache Software Foundation.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
- DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- This software consists of voluntary contributions made by many individuals
- on behalf of the Apache Software Foundation. For more information on the
- Apache Software Foundation, please see <http://www.apache.org/>.
-
-*/
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed 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.eve.input ;
@@ -73,9 +40,9 @@
* @avalon.component name="input-manager" lifestyle="singleton"
* @avalon.service type="org.apache.eve.input.InputManager" version="1.0"
*
- * @author <a href="mailto:aok123@bellsouth.net">Alex Karasulu</a>
- * @author $Author: akarasulu $
- * @version $Revision$
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
*/
public class MerlinInputManager extends AbstractLogEnabled
implements
Modified: incubator/directory/eve/trunk/eve/frontend/input/pojo-impl/src/java/org/apache/eve/input/DefaultInputManager.java
==============================================================================
--- incubator/directory/eve/trunk/eve/frontend/input/pojo-impl/src/java/org/apache/eve/input/DefaultInputManager.java (original)
+++ incubator/directory/eve/trunk/eve/frontend/input/pojo-impl/src/java/org/apache/eve/input/DefaultInputManager.java Sat Feb 14 21:31:43 2004
@@ -1,52 +1,19 @@
/*
-
- ============================================================================
- The Apache Software License, Version 1.1
- ============================================================================
-
- Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modifica-
- tion, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- 3. The end-user documentation included with the redistribution, if any, must
- include the following acknowledgment: "This product includes software
- developed by the Apache Software Foundation (http://www.apache.org/)."
- Alternately, this acknowledgment may appear in the software itself, if
- and wherever such third-party acknowledgments normally appear.
-
- 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve"
- and "Apache Software Foundation" must not be used to endorse or promote
- products derived from this software without prior written
- permission. For written permission, please contact apache@apache.org.
-
- 5. Products derived from this software may not be called "Apache", nor may
- "Apache" appear in their name, without prior written permission of the
- Apache Software Foundation.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
- DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- This software consists of voluntary contributions made by many individuals
- on behalf of the Apache Software Foundation. For more information on the
- Apache Software Foundation, please see <http://www.apache.org/>.
-
-*/
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed 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.eve.input ;
@@ -72,8 +39,8 @@
/**
* Default InputManager implementation based on NIO selectors and channels.
*
- * @author <a href="mailto:akarasulu@apache.org">Alex Karasulu</a>
- * @author $Author: akarasulu $
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
* @version $Rev: 1452 $
*/
public class DefaultInputManager implements InputManager
@@ -139,9 +106,10 @@
*/
try
{
- if ( 0 == ( l_count = m_selector.select( 100 ) ) )
+ m_monitor.enteringSelect( m_selector ) ;
+ if ( 0 == ( l_count = m_selector.select() ) )
{
- m_monitor.selectorReturned( m_selector ) ;
+ m_monitor.selectTimedOut( m_selector ) ;
continue ;
}
}
@@ -184,6 +152,7 @@
synchronized( m_hasStarted )
{
m_hasStarted = new Boolean( false ) ;
+ m_selector.wakeup() ;
while ( m_thread.isAlive() )
{
Modified: incubator/directory/eve/trunk/eve/frontend/input/spi/src/java/org/apache/eve/input/InputManagerMonitor.java
==============================================================================
--- incubator/directory/eve/trunk/eve/frontend/input/spi/src/java/org/apache/eve/input/InputManagerMonitor.java (original)
+++ incubator/directory/eve/trunk/eve/frontend/input/spi/src/java/org/apache/eve/input/InputManagerMonitor.java Sat Feb 14 21:31:43 2004
@@ -157,4 +157,18 @@
* @param a_fault the faulting exception
*/
void channelCloseFailure( SocketChannel a_channel, IOException a_fault ) ;
+
+ /**
+ * Monitors the occurrence of successful select timeouts on a selector
+ *
+ * @param a_selector
+ */
+ void selectTimedOut( Selector a_selector ) ;
+
+ /**
+ * A select call is about to be made.
+ *
+ * @param a_selector the selector on which the select is called
+ */
+ void enteringSelect( Selector a_selector ) ;
}
Modified: incubator/directory/eve/trunk/eve/frontend/input/spi/src/java/org/apache/eve/input/InputManagerMonitorAdapter.java
==============================================================================
--- incubator/directory/eve/trunk/eve/frontend/input/spi/src/java/org/apache/eve/input/InputManagerMonitorAdapter.java (original)
+++ incubator/directory/eve/trunk/eve/frontend/input/spi/src/java/org/apache/eve/input/InputManagerMonitorAdapter.java Sat Feb 14 21:31:43 2004
@@ -163,4 +163,22 @@
IOException a_fault )
{
}
+
+
+ /* (non-Javadoc)
+ * @see org.apache.eve.input.InputManagerMonitor#enteringSelect(
+ * java.nio.channels.Selector)
+ */
+ public void enteringSelect( Selector a_selector )
+ {
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.eve.input.InputManagerMonitor#selectTimedOut(
+ * java.nio.channels.Selector)
+ */
+ public void selectTimedOut( Selector a_selector )
+ {
+ }
}
Modified: incubator/directory/eve/trunk/eve/frontend/listener/merlin-impl/conf/block.xml
==============================================================================
--- incubator/directory/eve/trunk/eve/frontend/listener/merlin-impl/conf/block.xml (original)
+++ incubator/directory/eve/trunk/eve/frontend/listener/merlin-impl/conf/block.xml Sat Feb 14 21:31:43 2004
@@ -5,6 +5,7 @@
<classloader>
<classpath>
<repository>
+ <resource id="commons-lang:commons-lang" version="2.0"/>
<resource id="avalon-framework:avalon-framework-api" version="4.1.5"/>
<resource id="directory:eve-frontend-common-api" version="SNAPSHOT"/>
<resource id="directory:eve-frontend-event-spi" version="SNAPSHOT"/>
Modified: incubator/directory/eve/trunk/eve/frontend/listener/merlin-impl/project.xml
==============================================================================
--- incubator/directory/eve/trunk/eve/frontend/listener/merlin-impl/project.xml (original)
+++ incubator/directory/eve/trunk/eve/frontend/listener/merlin-impl/project.xml Sat Feb 14 21:31:43 2004
@@ -22,6 +22,13 @@
<dependencies>
<dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>2.0</version>
+ <url>http://jakarata.apache.org/commons/lang</url>
+ </dependency>
+
+ <dependency>
<groupId>avalon-framework</groupId>
<artifactId>avalon-framework-api</artifactId>
<version>4.1.5</version>
Modified: incubator/directory/eve/trunk/eve/frontend/listener/merlin-impl/src/java/org/apache/eve/listener/AvalonListenerManagerMonitor.java
==============================================================================
--- incubator/directory/eve/trunk/eve/frontend/listener/merlin-impl/src/java/org/apache/eve/listener/AvalonListenerManagerMonitor.java (original)
+++ incubator/directory/eve/trunk/eve/frontend/listener/merlin-impl/src/java/org/apache/eve/listener/AvalonListenerManagerMonitor.java Sat Feb 14 21:31:43 2004
@@ -91,7 +91,10 @@
*/
public void bindOccured( ServerListener a_listener )
{
- getLogger().info( "binding " + a_listener ) ;
+ if ( getLogger().isInfoEnabled() )
+ {
+ getLogger().info( "binding " + a_listener ) ;
+ }
}
@@ -101,7 +104,10 @@
*/
public void unbindOccured( ServerListener a_listener )
{
- getLogger().info( "unbinding " + a_listener ) ;
+ if ( getLogger().isInfoEnabled() )
+ {
+ getLogger().info( "unbinding " + a_listener ) ;
+ }
}
@@ -143,8 +149,11 @@
*/
public void failedToBind( ServerListener a_listener, IOException a_failure )
{
- getLogger().error( "failed to bind listener to " + a_listener
- + " encountered exception: " + a_failure.getMessage() ) ;
+ if ( getLogger().isErrorEnabled() )
+ {
+ getLogger().error( "failed to bind listener to " + a_listener
+ + " encountered exception: " + a_failure.getMessage() ) ;
+ }
}
@@ -155,8 +164,11 @@
public void failedToUnbind( ServerListener a_listener,
IOException a_failure )
{
- getLogger().error( "failed to unbind listener from " + a_listener
- + " encountered exception: " + a_failure.getMessage() ) ;
+ if ( getLogger().isErrorEnabled() )
+ {
+ getLogger().error( "failed to unbind listener from " + a_listener
+ + " encountered exception: " + a_failure.getMessage() ) ;
+ }
}
@@ -166,8 +178,11 @@
*/
public void failedToExpire( ClientKey a_key, IOException a_failure )
{
- getLogger().error( "failed to expire client key " + a_key
- + " encountered exception: " + a_failure.getMessage() ) ;
+ if ( getLogger().isErrorEnabled() )
+ {
+ getLogger().error( "failed to expire client key " + a_key
+ + " encountered exception: " + a_failure.getMessage() ) ;
+ }
}
@@ -177,8 +192,11 @@
*/
public void failedToAccept( SelectionKey a_key, IOException a_failure )
{
- getLogger().error( "failed to accept on selection key " + a_key
- + " encountered exception: " + a_failure.getMessage() ) ;
+ if ( getLogger().isErrorEnabled() )
+ {
+ getLogger().error( "failed to accept on selection key " + a_key
+ + " encountered exception: " + a_failure.getMessage() ) ;
+ }
}
@@ -188,7 +206,37 @@
*/
public void failedToSelect( Selector a_selector, IOException a_failure )
{
- getLogger().error( "failed on select of selector " + a_selector
- + " encountered exception: " + a_failure.getMessage() ) ;
+ if ( getLogger().isErrorEnabled() )
+ {
+ getLogger().error( "failed on select of selector " + a_selector
+ + " encountered exception: " + a_failure.getMessage() ) ;
+ }
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.eve.listener.ListenerManagerMonitor#selectTimedOut(
+ * java.nio.channels.Selector)
+ */
+ public void selectTimedOut( Selector a_selector )
+ {
+ if ( getLogger().isWarnEnabled() )
+ {
+ getLogger().warn( "Timed out on selector " + a_selector
+ + " select()" ) ;
+ }
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.eve.listener.ListenerManagerMonitor#
+ * enteringSelect(java.nio.channels.Selector)
+ */
+ public void enteringSelect( Selector a_selector )
+ {
+ if ( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug( "About to select on selector " + a_selector ) ;
+ }
}
}
Modified: incubator/directory/eve/trunk/eve/frontend/listener/merlin-impl/src/java/org/apache/eve/listener/MerlinListenerManager.java
==============================================================================
--- incubator/directory/eve/trunk/eve/frontend/listener/merlin-impl/src/java/org/apache/eve/listener/MerlinListenerManager.java (original)
+++ incubator/directory/eve/trunk/eve/frontend/listener/merlin-impl/src/java/org/apache/eve/listener/MerlinListenerManager.java Sat Feb 14 21:31:43 2004
@@ -51,14 +51,25 @@
import java.io.IOException ;
+
+import java.net.InetAddress ;
+import java.net.UnknownHostException ;
+
+import java.util.ArrayList ;
import java.util.EventObject ;
+import org.apache.avalon.framework.logger.Logger ;
import org.apache.avalon.framework.activity.Startable ;
import org.apache.avalon.framework.service.Serviceable ;
import org.apache.avalon.framework.activity.Initializable ;
import org.apache.avalon.framework.service.ServiceManager ;
import org.apache.avalon.framework.service.ServiceException ;
import org.apache.avalon.framework.logger.AbstractLogEnabled ;
+import org.apache.avalon.framework.configuration.Configurable ;
+import org.apache.avalon.framework.configuration.Configuration ;
+import org.apache.avalon.framework.configuration.ConfigurationException ;
+
+import org.apache.commons.lang.StringUtils ;
import org.apache.eve.event.EventRouter ;
import org.apache.eve.event.DisconnectEvent ;
@@ -79,13 +90,18 @@
implements
ListenerManager,
Initializable,
+ Configurable,
Serviceable,
Startable
{
+ /** the listener manager's avalon based monitor */
+ private AvalonListenerManagerMonitor m_monitor ;
/** the listener manager implementation wrapped by this service */
private DefaultListenerManager m_manager ;
/** a temporary handle on the event router to bridge life-cycle methods */
private EventRouter m_router ;
+ /** the set of listeners */
+ private ArrayList m_listeners ;
// ------------------------------------------------------------------------
@@ -140,13 +156,35 @@
/**
+ * Set's up the monitor with a logger.
+ *
+ * @param a_logger a logger.
+ */
+ public void enableLogging( Logger a_logger )
+ {
+ super.enableLogging( a_logger ) ;
+ m_monitor = new AvalonListenerManagerMonitor() ;
+ m_monitor.enableLogging( a_logger ) ;
+ }
+
+
+ /**
* Starts up this module.
*
* @see org.apache.avalon.framework.activity.Startable#start()
*/
public void start() throws Exception
{
+ getLogger().debug(
+ "About to call delegate start() from merlin wrapper!" ) ;
m_manager.start() ;
+ getLogger().debug(
+ "Completed call to delegate start() from merlin wrapper!" ) ;
+
+ for( int ii = 0; ii < m_listeners.size(); ii++ )
+ {
+ m_manager.bind( ( ServerListener ) m_listeners.get( ii ) ) ;
+ }
}
@@ -157,7 +195,16 @@
*/
public void stop() throws Exception
{
- m_manager.stop() ;
+ getLogger().debug(
+ "About to call delegate stop() from merlin wrapper!" ) ;
+
+ if ( m_manager != null )
+ {
+ m_manager.stop() ;
+ }
+
+ getLogger().debug(
+ "Completed call to delegate stop() from merlin wrapper!" ) ;
}
@@ -180,5 +227,88 @@
public void initialize() throws Exception
{
m_manager = new DefaultListenerManager( m_router ) ;
+ m_manager.setMonitor( m_monitor ) ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.avalon.framework.configuration.Configurable#
+ * configure(org.apache.avalon.framework.configuration.Configuration)
+ */
+ public void configure( Configuration a_config )
+ throws ConfigurationException
+ {
+ if ( a_config.getChild( "listeners" ).getChildren().length == 0 )
+ {
+ m_listeners = new ArrayList( 1 ) ;
+
+ try
+ {
+ m_listeners.add( new LdapServerListener() ) ;
+ }
+ catch ( UnknownHostException e )
+ {
+ throw new ConfigurationException( "No configuration provided "
+ + "for listener configuration and default listener "
+ + "failed due to exception", e ) ;
+ }
+ }
+
+ Configuration[] l_listeners = a_config
+ .getChild( "listeners" ).getChildren() ;
+ for ( int ii = 0; ii < l_listeners.length; ii++ )
+ {
+ int l_port = l_listeners[ii].getChild( "port" )
+ .getValueAsInteger( 389 ) ;
+ int l_backlog = l_listeners[ii].getChild( "backlog" )
+ .getValueAsInteger( 50 ) ;
+ boolean l_isSecure = l_listeners[ii].getChild( "isSecure" )
+ .getValueAsBoolean( false ) ;
+ String l_host = null ;
+ Configuration l_hostConf = l_listeners[ii]
+ .getChild( "host", false ) ;
+ Configuration l_addressConf = l_listeners[ii]
+ .getChild( "address", false ) ;
+
+ if ( l_hostConf == null && l_addressConf == null )
+ {
+ try
+ {
+ l_host = InetAddress.getLocalHost().getHostName() ;
+ }
+ catch ( UnknownHostException e )
+ {
+ throw new ConfigurationException( "No configuration address"
+ + " or hostname provided and using localhost "
+ + "failed due to exception", e ) ;
+ }
+ }
+ else if ( l_hostConf != null )
+ {
+ l_host = l_hostConf.getValue() ;
+ }
+ else if ( l_addressConf != null )
+ {
+ String l_addrStr = l_addressConf.getValue() ;
+ // split appart and build byte array
+ String[] l_octets = StringUtils.split( l_addrStr, '.' ) ;
+ byte[] l_address = new byte[ l_octets.length ] ;
+ for ( int jj =0; jj < l_octets.length; jj++ )
+ {
+ l_address[jj] = Byte.parseByte( l_octets[jj] ) ;
+ }
+
+ try
+ {
+ l_host = InetAddress.getByAddress( l_address )
+ .getHostName() ;
+ }
+ catch ( UnknownHostException e )
+ {
+ throw new ConfigurationException( "Could not find hostname "
+ + "for address " + l_addrStr, e ) ;
+ }
+ }
+ }
}
}
Added: incubator/directory/eve/trunk/eve/frontend/listener/merlin-impl/src/java/org/apache/eve/listener/MerlinListenerManager.xml
==============================================================================
--- (empty file)
+++ incubator/directory/eve/trunk/eve/frontend/listener/merlin-impl/src/java/org/apache/eve/listener/MerlinListenerManager.xml Sat Feb 14 21:31:43 2004
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<configuration>
+ <listeners>
+ <listener>
+ <port>389</port>
+ <address>127.0.0.1</address>
+ <backlog>50</backlog>
+ <isSecure>false</isSecure>
+ </listener>
+
+ <listener>
+ <port>636</port>
+ <hostname>localhost</hostname>
+ <backlog>50</backlog>
+ <isSecure>false</isSecure>
+ </listener>
+ </listeners>
+</configuration>
\ No newline at end of file
Modified: incubator/directory/eve/trunk/eve/frontend/listener/pojo-impl/src/java/org/apache/eve/listener/DefaultListenerManager.java
==============================================================================
--- incubator/directory/eve/trunk/eve/frontend/listener/pojo-impl/src/java/org/apache/eve/listener/DefaultListenerManager.java (original)
+++ incubator/directory/eve/trunk/eve/frontend/listener/pojo-impl/src/java/org/apache/eve/listener/DefaultListenerManager.java Sat Feb 14 21:31:43 2004
@@ -56,6 +56,7 @@
import java.util.EventObject ;
import java.io.IOException ;
+import java.net.InetAddress ;
import java.net.InetSocketAddress ;
import java.nio.channels.Selector ;
@@ -73,8 +74,6 @@
* A listener manager that uses non-blocking NIO based constructs to detect
* client connections on server socket listeners.
*
- * @author <a href="mailto:akarasulu@apache.org">Alex Karasulu</a>
- * @author $Author$
* @version $Rev$
*/
public class DefaultListenerManager
@@ -97,8 +96,8 @@
/** the listner manager's monitor */
private ListenerManagerMonitor m_monitor =
new ListenerManagerMonitorAdapter() ;
-
+
/**
* Creates a default listener manager using an event router.
*
@@ -120,7 +119,7 @@
*
* @return Returns the monitor.
*/
- ListenerManagerMonitor getMonitor()
+ public ListenerManagerMonitor getMonitor()
{
return m_monitor ;
}
@@ -131,7 +130,7 @@
*
* @param a_monitor The monitor to set.
*/
- void setMonitor( ListenerManagerMonitor a_monitor )
+ public void setMonitor( ListenerManagerMonitor a_monitor )
{
m_monitor = a_monitor ;
}
@@ -147,7 +146,7 @@
{
ServerSocketChannel l_channel = ServerSocketChannel.open() ;
InetSocketAddress l_address = new InetSocketAddress(
- a_listener.getAddress(),
+ InetAddress.getByAddress( a_listener.getAddress() ),
a_listener.getPort() ) ;
l_channel.socket().bind( l_address, a_listener.getBacklog() ) ;
l_channel.configureBlocking( false ) ;
@@ -248,9 +247,10 @@
try
{
+ m_monitor.enteringSelect( m_selector ) ;
if ( 0 == ( l_count = m_selector.select() ) )
{
- m_monitor.selectOccured( m_selector ) ;
+ m_monitor.selectTimedOut( m_selector ) ;
continue ;
}
}
@@ -275,6 +275,7 @@
try
{
l_channel = l_server.accept() ;
+ l_list.remove() ;
m_monitor.acceptOccured( l_key ) ;
}
catch ( IOException e )
@@ -329,6 +330,7 @@
synchronized( m_hasStarted )
{
m_hasStarted = new Boolean( false ) ;
+ m_selector.wakeup() ;
while ( m_thread.isAlive() )
{
Added: incubator/directory/eve/trunk/eve/frontend/listener/spi/src/java/org/apache/eve/listener/DefaultServerListener.java
==============================================================================
--- (empty file)
+++ incubator/directory/eve/trunk/eve/frontend/listener/spi/src/java/org/apache/eve/listener/DefaultServerListener.java Sat Feb 14 21:31:43 2004
@@ -0,0 +1,224 @@
+/*
+
+ ============================================================================
+ The Apache Software License, Version 1.1
+ ============================================================================
+
+ Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+ include the following acknowledgment: "This product includes software
+ developed by the Apache Software Foundation (http://www.apache.org/)."
+ Alternately, this acknowledgment may appear in the software itself, if
+ and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve"
+ and "Apache Software Foundation" must not be used to endorse or promote
+ products derived from this software without prior written
+ permission. For written permission, please contact apache@apache.org.
+
+ 5. Products derived from this software may not be called "Apache", nor may
+ "Apache" appear in their name, without prior written permission of the
+ Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software consists of voluntary contributions made by many individuals
+ on behalf of the Apache Software Foundation. For more information on the
+ Apache Software Foundation, please see <http://www.apache.org/>.
+
+*/
+package org.apache.eve.listener ;
+
+
+/**
+ * A default server listener.
+ *
+ * @author <a href="mailto:akarasulu@apache.org">Alex Karasulu</a>
+ * @author $LastChangedBy$
+ * @version $LastChangedRevision$
+ */
+public class DefaultServerListener implements ServerListener
+{
+ /** the port used for the connection */
+ private int m_port ;
+ /** the connection backlog */
+ private int m_backlog ;
+ /** the protocol's URL scheme */
+ private String m_scheme ;
+ /** the interface address or hostname of the server */
+ private byte[] m_address ;
+ /** whether or not ssl is used to secure connections */
+ private boolean m_isSecure ;
+ /** whether or not the transport is reliable (TCP or UDP) */
+ private boolean m_isReliable ;
+
+
+ /**
+ * Creates a default listener with all the supplied properties.
+ *
+ * @param a_address the interface address or hostname of the server
+ * @param a_scheme the URL scheme for the protocol
+ * @param a_port the port used for the connection
+ * @param a_backlog the connection backlog
+ * @param a_isSecure whether or not ssl is used to secure connections
+ * @param a_isReliable whether or not the transport is reliable (TCP or UDP)
+ */
+ public DefaultServerListener( byte[] a_address, String a_scheme, int a_port,
+ int a_backlog, boolean a_isSecure,
+ boolean a_isReliable )
+ {
+ m_port = a_port ;
+ m_scheme = a_scheme ;
+ m_backlog = a_backlog ;
+ m_address = a_address ;
+ m_isSecure = a_isSecure ;
+ m_isReliable = a_isReliable ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.eve.listener.ServerListener#getAddress()
+ */
+ public byte[] getAddress()
+ {
+ return m_address ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.eve.listener.ServerListener#getBacklog()
+ */
+ public int getBacklog()
+ {
+ return m_backlog ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.eve.listener.ServerListener#getPort()
+ */
+ public int getPort()
+ {
+ return m_port ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.eve.listener.ServerListener#isSecure()
+ */
+ public boolean isSecure()
+ {
+ return m_isSecure ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.eve.listener.ServerListener#getURL()
+ */
+ public String getURL()
+ {
+ StringBuffer l_buf = new StringBuffer() ;
+
+ l_buf.append( m_scheme ) ;
+ l_buf.append( "://" ) ;
+ l_buf.append( m_address ) ;
+ l_buf.append( ':' ) ;
+ l_buf.append( m_port ) ;
+
+ return l_buf.toString() ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.eve.listener.ServerListener#getProtocolUrlScheme()
+ */
+ public String getProtocolUrlScheme()
+ {
+ return m_scheme ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.eve.listener.ServerListener#isReliable()
+ */
+ public boolean isReliable()
+ {
+ return m_isReliable ;
+ }
+
+
+ /**
+ * Sets the address for the
+ *
+ * @param a_address The address to set.
+ */
+ protected void setAddress( byte[] a_address )
+ {
+ m_address = a_address ;
+ }
+
+
+ /**
+ * @param a_backlog The backlog to set.
+ */
+ protected void setBacklog( int a_backlog )
+ {
+ m_backlog = a_backlog ;
+ }
+
+
+ /**
+ * @param a_isReliable The isReliable to set.
+ */
+ protected void setReliable( boolean a_isReliable )
+ {
+ m_isReliable = a_isReliable ;
+ }
+
+
+ /**
+ * @param a_isSecure The isSecure to set.
+ */
+ protected void setSecure( boolean a_isSecure )
+ {
+ m_isSecure = a_isSecure ;
+ }
+
+
+ /**
+ * @param a_port The port to set.
+ */
+ protected void setPort( int a_port )
+ {
+ m_port = a_port ;
+ }
+
+
+ /**
+ * @param a_scheme The scheme to set.
+ */
+ protected void setScheme( String a_scheme )
+ {
+ m_scheme = a_scheme ;
+ }
+}
Added: incubator/directory/eve/trunk/eve/frontend/listener/spi/src/java/org/apache/eve/listener/LdapServerListener.java
==============================================================================
--- (empty file)
+++ incubator/directory/eve/trunk/eve/frontend/listener/spi/src/java/org/apache/eve/listener/LdapServerListener.java Sat Feb 14 21:31:43 2004
@@ -0,0 +1,94 @@
+/*
+
+ ============================================================================
+ The Apache Software License, Version 1.1
+ ============================================================================
+
+ Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+ include the following acknowledgment: "This product includes software
+ developed by the Apache Software Foundation (http://www.apache.org/)."
+ Alternately, this acknowledgment may appear in the software itself, if
+ and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve"
+ and "Apache Software Foundation" must not be used to endorse or promote
+ products derived from this software without prior written
+ permission. For written permission, please contact apache@apache.org.
+
+ 5. Products derived from this software may not be called "Apache", nor may
+ "Apache" appear in their name, without prior written permission of the
+ Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software consists of voluntary contributions made by many individuals
+ on behalf of the Apache Software Foundation. For more information on the
+ Apache Software Foundation, please see <http://www.apache.org/>.
+
+*/
+package org.apache.eve.listener ;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+
+
+/**
+ * An LDAP specific server listener.
+ *
+ * @author <a href="mailto:akarasulu@apache.org">Alex Karasulu</a>
+ * @author $LastChangedBy$
+ * @version $LastChangedRevision$
+ */
+public class LdapServerListener extends DefaultServerListener
+{
+ /**
+ * Creates an LDAP specific server listener.
+ *
+ * @param a_hostname the hostname
+ * @param a_port the TCP port
+ * @param a_backlog the connection backlog
+ * @param a_secure whether or not ssl is used
+ */
+ public LdapServerListener( String a_hostname, int a_port, int a_backlog,
+ boolean a_secure )
+ throws UnknownHostException
+ {
+ super( InetAddress.getByName( a_hostname ).getAddress(),
+ a_secure ? "ldaps" : "ldap" , a_port, a_backlog,
+ a_secure, true ) ;
+ }
+
+
+ /**
+ * Creates a default LDAP specific server listener configured for TCP port
+ * 389 using the address of the local host whatever that may be as defined
+ * by the naming system.
+ */
+ public LdapServerListener()
+ throws UnknownHostException
+ {
+ super( InetAddress.getLocalHost().getAddress(),
+ "ldap", 389, 0, false, true ) ;
+ }
+}
Modified: incubator/directory/eve/trunk/eve/frontend/listener/spi/src/java/org/apache/eve/listener/ListenerManagerMonitor.java
==============================================================================
--- incubator/directory/eve/trunk/eve/frontend/listener/spi/src/java/org/apache/eve/listener/ListenerManagerMonitor.java (original)
+++ incubator/directory/eve/trunk/eve/frontend/listener/spi/src/java/org/apache/eve/listener/ListenerManagerMonitor.java Sat Feb 14 21:31:43 2004
@@ -107,6 +107,13 @@
void selectOccured( Selector a_selector ) ;
/**
+ * Monitors the occurrence of successful select timeouts on a selector
+ *
+ * @param a_selector
+ */
+ void selectTimedOut( Selector a_selector ) ;
+
+ /**
* Monitors bind failures.
*
* @param a_listener the listener whose bind attempt failed
@@ -145,4 +152,11 @@
* @param a_failure the exception resulting from the failure
*/
void failedToSelect( Selector a_selector, IOException a_failure ) ;
+
+ /**
+ * A select call is about to be made.
+ *
+ * @param a_selector the selector on which the select is called
+ */
+ void enteringSelect( Selector a_selector ) ;
}
Modified: incubator/directory/eve/trunk/eve/frontend/listener/spi/src/java/org/apache/eve/listener/ListenerManagerMonitorAdapter.java
==============================================================================
--- incubator/directory/eve/trunk/eve/frontend/listener/spi/src/java/org/apache/eve/listener/ListenerManagerMonitorAdapter.java (original)
+++ incubator/directory/eve/trunk/eve/frontend/listener/spi/src/java/org/apache/eve/listener/ListenerManagerMonitorAdapter.java Sat Feb 14 21:31:43 2004
@@ -164,4 +164,22 @@
public void failedToSelect( Selector a_selector, IOException a_failure )
{
}
+
+
+ /* (non-Javadoc)
+ * @see org.apache.eve.listener.ListenerManagerMonitor#selectTimedOut(
+ * java.nio.channels.Selector)
+ */
+ public void selectTimedOut(Selector a_a_selector)
+ {
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.eve.listener.ListenerManagerMonitor#enteringSelect(
+ * java.nio.channels.Selector)
+ */
+ public void enteringSelect( Selector a_selector )
+ {
+ }
}
Modified: incubator/directory/eve/trunk/eve/frontend/listener/spi/src/java/org/apache/eve/listener/ServerListener.java
==============================================================================
--- incubator/directory/eve/trunk/eve/frontend/listener/spi/src/java/org/apache/eve/listener/ServerListener.java (original)
+++ incubator/directory/eve/trunk/eve/frontend/listener/spi/src/java/org/apache/eve/listener/ServerListener.java Sat Feb 14 21:31:43 2004
@@ -82,11 +82,32 @@
*
* @return the ip address octets as a String i.e. 127.0.0.1
*/
- public String getAddress() ;
+ public byte[] getAddress() ;
+
+ /**
+ * Gets whether or not the listener is for establishing secure connections.
+ *
+ * @return true if ssl is used to secure the connection, false otherwise.
+ */
+ public boolean isSecure() ;
+
+ /**
+ * Get whether or not the transport is reliable or not.
+ *
+ * @return true if it is reliable (TCP), false if it is not.
+ */
+ public boolean isReliable() ;
+
+ /**
+ * Gets the protocol's URL scheme.
+ *
+ * @return the URL scheme for the protocol
+ */
+ public String getProtocolUrlScheme() ;
/**
- * Gets the LDAP URL for this ServerListener using the specified ip address
- * and the tcp port number listened to. The ipaddress is resolved to a host
+ * Gets the URL for this ServerListener using the specified ip address and
+ * the tcp port number listened to. The ipaddress is resolved to a host
* name.
*
* @return the LDAP URL like so ldap://localhost:389