You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by tr...@apache.org on 2006/09/20 09:55:48 UTC
svn commit: r448115 - in
/directory/trunks/mina/core/src/main/java/org/apache/mina: common/
common/support/ transport/socket/nio/ transport/socket/nio/support/
Author: trustin
Date: Wed Sep 20 00:55:47 2006
New Revision: 448115
URL: http://svn.apache.org/viewvc?view=rev&rev=448115
Log:
* Added DatagramServiceConfig
* Moved IoServiceConfig.sessionRecycler to DatagramServiceConfig
Added:
directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramServiceConfig.java
Modified:
directory/trunks/mina/core/src/main/java/org/apache/mina/common/IoServiceConfig.java
directory/trunks/mina/core/src/main/java/org/apache/mina/common/support/BaseIoServiceConfig.java
directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramAcceptorConfig.java
directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramConnectorConfig.java
directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java
directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java
directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java
Modified: directory/trunks/mina/core/src/main/java/org/apache/mina/common/IoServiceConfig.java
URL: http://svn.apache.org/viewvc/directory/trunks/mina/core/src/main/java/org/apache/mina/common/IoServiceConfig.java?view=diff&rev=448115&r1=448114&r2=448115
==============================================================================
--- directory/trunks/mina/core/src/main/java/org/apache/mina/common/IoServiceConfig.java (original)
+++ directory/trunks/mina/core/src/main/java/org/apache/mina/common/IoServiceConfig.java Wed Sep 20 00:55:47 2006
@@ -82,19 +82,6 @@
void setThreadModel( ThreadModel threadModel );
/**
- * Sets the {@link IoSessionRecycler} for this service. Please note that this
- * recycler will only be applied to connectionless transports.
- *
- * @param sessionRecycler <tt>null</tt> to use the default recycler
- */
- void setSessionRecycler( IoSessionRecycler sessionRecycler );
-
- /**
- * Returns the {@link IoSessionRecycler} for this service.
- */
- IoSessionRecycler getSessionRecycler();
-
- /**
* Returns a deep clone of this configuration.
*/
Object clone();
Modified: directory/trunks/mina/core/src/main/java/org/apache/mina/common/support/BaseIoServiceConfig.java
URL: http://svn.apache.org/viewvc/directory/trunks/mina/core/src/main/java/org/apache/mina/common/support/BaseIoServiceConfig.java?view=diff&rev=448115&r1=448114&r2=448115
==============================================================================
--- directory/trunks/mina/core/src/main/java/org/apache/mina/common/support/BaseIoServiceConfig.java (original)
+++ directory/trunks/mina/core/src/main/java/org/apache/mina/common/support/BaseIoServiceConfig.java Wed Sep 20 00:55:47 2006
@@ -22,11 +22,9 @@
import java.lang.reflect.Method;
import org.apache.mina.common.DefaultIoFilterChainBuilder;
-import org.apache.mina.common.ExpiringSessionRecycler;
+import org.apache.mina.common.ExecutorThreadModel;
import org.apache.mina.common.IoFilterChainBuilder;
import org.apache.mina.common.IoServiceConfig;
-import org.apache.mina.common.ExecutorThreadModel;
-import org.apache.mina.common.IoSessionRecycler;
import org.apache.mina.common.ThreadModel;
/**
@@ -37,8 +35,6 @@
*/
public abstract class BaseIoServiceConfig implements IoServiceConfig, Cloneable
{
- private static final IoSessionRecycler DEFAULT_RECYCLER = new ExpiringSessionRecycler();
-
/**
* Current filter chain builder.
*/
@@ -54,11 +50,6 @@
*/
private ThreadModel threadModel = defaultThreadModel;
- /**
- * Current session recycler
- */
- private IoSessionRecycler sessionRecycler = DEFAULT_RECYCLER;
-
public BaseIoServiceConfig()
{
super();
@@ -107,21 +98,6 @@
this.threadModel = threadModel;
}
- // FIXME There can be a problem if a user changes the recycler after the service is activated.
- public void setSessionRecycler( IoSessionRecycler sessionRecycler )
- {
- if( sessionRecycler == null )
- {
- sessionRecycler = DEFAULT_RECYCLER;
- }
- this.sessionRecycler = sessionRecycler;
- }
-
- public IoSessionRecycler getSessionRecycler()
- {
- return sessionRecycler;
- }
-
public Object clone()
{
BaseIoServiceConfig ret;
Modified: directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramAcceptorConfig.java
URL: http://svn.apache.org/viewvc/directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramAcceptorConfig.java?view=diff&rev=448115&r1=448114&r2=448115
==============================================================================
--- directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramAcceptorConfig.java (original)
+++ directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramAcceptorConfig.java Wed Sep 20 00:55:47 2006
@@ -20,8 +20,10 @@
package org.apache.mina.transport.socket.nio;
+import org.apache.mina.common.ExpiringSessionRecycler;
import org.apache.mina.common.IoAcceptorConfig;
import org.apache.mina.common.IoSessionConfig;
+import org.apache.mina.common.IoSessionRecycler;
import org.apache.mina.common.RuntimeIOException;
import org.apache.mina.common.support.BaseIoAcceptorConfig;
import org.apache.mina.transport.socket.nio.support.DatagramSessionConfigImpl;
@@ -32,8 +34,15 @@
* @author The Apache Directory Project (mina-dev@directory.apache.org)
* @version $Rev$, $Date$
*/
-public class DatagramAcceptorConfig extends BaseIoAcceptorConfig implements IoAcceptorConfig
+public class DatagramAcceptorConfig extends BaseIoAcceptorConfig implements DatagramServiceConfig
{
+ private static final IoSessionRecycler DEFAULT_RECYCLER = new ExpiringSessionRecycler();
+
+ /**
+ * Current session recycler
+ */
+ private IoSessionRecycler sessionRecycler = DEFAULT_RECYCLER;
+
private DatagramSessionConfig sessionConfig = new DatagramSessionConfigImpl();
/**
@@ -51,6 +60,21 @@
return sessionConfig;
}
+ public IoSessionRecycler getSessionRecycler()
+ {
+ return sessionRecycler;
+ }
+
+ // FIXME There can be a problem if a user changes the recycler after the service is activated.
+ public void setSessionRecycler( IoSessionRecycler sessionRecycler )
+ {
+ if( sessionRecycler == null )
+ {
+ sessionRecycler = DEFAULT_RECYCLER;
+ }
+ this.sessionRecycler = sessionRecycler;
+ }
+
public Object clone()
{
DatagramAcceptorConfig ret = ( DatagramAcceptorConfig ) super.clone();
Modified: directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramConnectorConfig.java
URL: http://svn.apache.org/viewvc/directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramConnectorConfig.java?view=diff&rev=448115&r1=448114&r2=448115
==============================================================================
--- directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramConnectorConfig.java (original)
+++ directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramConnectorConfig.java Wed Sep 20 00:55:47 2006
@@ -19,8 +19,10 @@
*/
package org.apache.mina.transport.socket.nio;
+import org.apache.mina.common.ExpiringSessionRecycler;
import org.apache.mina.common.IoConnectorConfig;
import org.apache.mina.common.IoSessionConfig;
+import org.apache.mina.common.IoSessionRecycler;
import org.apache.mina.common.RuntimeIOException;
import org.apache.mina.common.support.BaseIoConnectorConfig;
import org.apache.mina.transport.socket.nio.support.DatagramSessionConfigImpl;
@@ -31,9 +33,16 @@
* @author The Apache Directory Project (mina-dev@directory.apache.org)
* @version $Rev$, $Date$
*/
-public class DatagramConnectorConfig extends BaseIoConnectorConfig
+public class DatagramConnectorConfig extends BaseIoConnectorConfig implements DatagramServiceConfig
{
- private final DatagramSessionConfig sessionConfig = new DatagramSessionConfigImpl();
+ private static final IoSessionRecycler DEFAULT_RECYCLER = new ExpiringSessionRecycler();
+
+ /**
+ * Current session recycler
+ */
+ private IoSessionRecycler sessionRecycler = DEFAULT_RECYCLER;
+
+ private DatagramSessionConfig sessionConfig = new DatagramSessionConfigImpl();
/**
* Creates a new instance.
@@ -49,5 +58,27 @@
public IoSessionConfig getSessionConfig()
{
return sessionConfig;
+ }
+
+ public IoSessionRecycler getSessionRecycler()
+ {
+ return sessionRecycler;
+ }
+
+ // FIXME There can be a problem if a user changes the recycler after the service is activated.
+ public void setSessionRecycler( IoSessionRecycler sessionRecycler )
+ {
+ if( sessionRecycler == null )
+ {
+ sessionRecycler = DEFAULT_RECYCLER;
+ }
+ this.sessionRecycler = sessionRecycler;
+ }
+
+ public Object clone()
+ {
+ DatagramConnectorConfig ret = ( DatagramConnectorConfig ) super.clone();
+ ret.sessionConfig = ( DatagramSessionConfig ) this.sessionConfig.clone();
+ return ret;
}
}
Added: directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramServiceConfig.java
URL: http://svn.apache.org/viewvc/directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramServiceConfig.java?view=auto&rev=448115
==============================================================================
--- directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramServiceConfig.java (added)
+++ directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/DatagramServiceConfig.java Wed Sep 20 00:55:47 2006
@@ -0,0 +1,37 @@
+/*
+ * 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.mina.transport.socket.nio;
+
+import org.apache.mina.common.IoSessionRecycler;
+
+public interface DatagramServiceConfig
+{
+ /**
+ * Returns the {@link IoSessionRecycler} for this service.
+ */
+ IoSessionRecycler getSessionRecycler();
+
+ /**
+ * Sets the {@link IoSessionRecycler} for this service.
+ *
+ * @param sessionRecycler <tt>null</tt> to use the default recycler
+ */
+ void setSessionRecycler( IoSessionRecycler sessionRecycler );
+}
Modified: directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java
URL: http://svn.apache.org/viewvc/directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java?view=diff&rev=448115&r1=448114&r2=448115
==============================================================================
--- directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java (original)
+++ directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramAcceptorDelegate.java Wed Sep 20 00:55:47 2006
@@ -35,17 +35,19 @@
import org.apache.mina.common.ByteBuffer;
import org.apache.mina.common.ExceptionMonitor;
import org.apache.mina.common.IoAcceptor;
-import org.apache.mina.common.IoFilter.WriteRequest;
import org.apache.mina.common.IoHandler;
import org.apache.mina.common.IoServiceConfig;
import org.apache.mina.common.IoSession;
import org.apache.mina.common.IoSessionRecycler;
+import org.apache.mina.common.IoFilter.WriteRequest;
import org.apache.mina.common.support.BaseIoAcceptor;
import org.apache.mina.common.support.IoServiceListenerSupport;
import org.apache.mina.transport.socket.nio.DatagramAcceptorConfig;
+import org.apache.mina.transport.socket.nio.DatagramServiceConfig;
import org.apache.mina.transport.socket.nio.DatagramSessionConfig;
import org.apache.mina.util.NamePreservingRunnable;
import org.apache.mina.util.Queue;
+
import edu.emory.mathcs.backport.java.util.concurrent.Executor;
/**
@@ -215,7 +217,7 @@
RegistrationRequest req = ( RegistrationRequest ) key.attachment();
IoSession session;
- IoSessionRecycler sessionRecycler = req.config.getSessionRecycler();
+ IoSessionRecycler sessionRecycler = getSessionRecycler( req );
synchronized ( sessionRecycler )
{
session = sessionRecycler.recycle( localAddress, remoteAddress);
@@ -232,7 +234,7 @@
datagramSession.setRemoteAddress( remoteAddress );
datagramSession.setSelectionKey( key );
- req.config.getSessionRecycler().put( datagramSession );
+ getSessionRecycler( req ).put( datagramSession );
session = datagramSession;
}
@@ -247,6 +249,20 @@
}
return session;
+ }
+
+ private IoSessionRecycler getSessionRecycler( RegistrationRequest req )
+ {
+ IoSessionRecycler sessionRecycler;
+ if( req.config instanceof DatagramServiceConfig )
+ {
+ sessionRecycler = ( ( DatagramServiceConfig ) req.config ).getSessionRecycler();
+ }
+ else
+ {
+ sessionRecycler = defaultConfig.getSessionRecycler();
+ }
+ return sessionRecycler;
}
public IoServiceListenerSupport getListeners()
Modified: directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java
URL: http://svn.apache.org/viewvc/directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java?view=diff&rev=448115&r1=448114&r2=448115
==============================================================================
--- directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java (original)
+++ directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramConnectorDelegate.java Wed Sep 20 00:55:47 2006
@@ -28,23 +28,25 @@
import java.util.Iterator;
import java.util.Set;
-import edu.emory.mathcs.backport.java.util.concurrent.Executor;
import org.apache.mina.common.ByteBuffer;
import org.apache.mina.common.ConnectFuture;
import org.apache.mina.common.ExceptionMonitor;
import org.apache.mina.common.IoConnector;
-import org.apache.mina.common.IoFilter.WriteRequest;
import org.apache.mina.common.IoHandler;
import org.apache.mina.common.IoServiceConfig;
import org.apache.mina.common.IoSession;
import org.apache.mina.common.IoSessionRecycler;
+import org.apache.mina.common.IoFilter.WriteRequest;
import org.apache.mina.common.support.BaseIoConnector;
import org.apache.mina.common.support.DefaultConnectFuture;
import org.apache.mina.transport.socket.nio.DatagramConnectorConfig;
+import org.apache.mina.transport.socket.nio.DatagramServiceConfig;
import org.apache.mina.transport.socket.nio.DatagramSessionConfig;
import org.apache.mina.util.NamePreservingRunnable;
import org.apache.mina.util.Queue;
+import edu.emory.mathcs.backport.java.util.concurrent.Executor;
+
/**
* {@link IoConnector} for datagram transport (UDP/IP).
*
@@ -413,7 +415,7 @@
private DatagramSessionImpl getRecycledSession( IoSession session )
{
- IoSessionRecycler sessionRecycler = session.getServiceConfig().getSessionRecycler();
+ IoSessionRecycler sessionRecycler = getSessionRecycler( session );
DatagramSessionImpl replaceSession = null;
if ( sessionRecycler != null )
@@ -433,6 +435,21 @@
}
return null;
+ }
+
+ private IoSessionRecycler getSessionRecycler( IoSession session )
+ {
+ IoServiceConfig config = session.getServiceConfig();
+ IoSessionRecycler sessionRecycler;
+ if( config instanceof DatagramServiceConfig )
+ {
+ sessionRecycler = ( ( DatagramServiceConfig ) config ).getSessionRecycler();
+ }
+ else
+ {
+ sessionRecycler = defaultConfig.getSessionRecycler();
+ }
+ return sessionRecycler;
}
private void readSession( DatagramSessionImpl session )
Modified: directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java
URL: http://svn.apache.org/viewvc/directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java?view=diff&rev=448115&r1=448114&r2=448115
==============================================================================
--- directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java (original)
+++ directory/trunks/mina/core/src/main/java/org/apache/mina/transport/socket/nio/support/DatagramSessionImpl.java Wed Sep 20 00:55:47 2006
@@ -36,6 +36,7 @@
import org.apache.mina.common.WriteFuture;
import org.apache.mina.common.IoFilter.WriteRequest;
import org.apache.mina.common.support.BaseIoSession;
+import org.apache.mina.transport.socket.nio.DatagramServiceConfig;
import org.apache.mina.transport.socket.nio.DatagramSessionConfig;
import org.apache.mina.util.Queue;
@@ -146,7 +147,11 @@
protected void close0()
{
- getServiceConfig().getSessionRecycler().remove( this );
+ IoServiceConfig config = getServiceConfig();
+ if( config instanceof DatagramServiceConfig )
+ {
+ ( ( DatagramServiceConfig ) config ).getSessionRecycler().remove( this );
+ }
filterChain.fireFilterClose( this );
}