Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2009-04-24 13:01:06 +0000
committerEike Stepper2009-04-24 13:01:06 +0000
commita69935665fcc370c23d3a557a81530f53d62fbd2 (patch)
tree9c5020e5cde15073c9b1414e377127c2613250e0 /plugins
parent396783f7a5897c8fbb4ec4a22c7b85018e72d9f7 (diff)
downloadcdo-a69935665fcc370c23d3a557a81530f53d62fbd2.tar.gz
cdo-a69935665fcc370c23d3a557a81530f53d62fbd2.tar.xz
cdo-a69935665fcc370c23d3a557a81530f53d62fbd2.zip
[273577] Add lifecycle check in the negotiator setter of a Connector.
https://bugs.eclipse.org/bugs/show_bug.cgi?id=273577
Diffstat (limited to 'plugins')
-rw-r--r--plugins/org.eclipse.net4j.tests/src/org/eclipse/net4j/tests/TCPConnectorTest.java47
-rw-r--r--plugins/org.eclipse.net4j/src/org/eclipse/internal/net4j/TransportConfig.java26
-rw-r--r--plugins/org.eclipse.net4j/src/org/eclipse/net4j/ITransportConfig.java9
-rw-r--r--plugins/org.eclipse.net4j/src/org/eclipse/net4j/Net4jUtil.java13
-rw-r--r--plugins/org.eclipse.net4j/src/org/eclipse/spi/net4j/Acceptor.java4
-rw-r--r--plugins/org.eclipse.net4j/src/org/eclipse/spi/net4j/ChannelMultiplexer.java4
6 files changed, 90 insertions, 13 deletions
diff --git a/plugins/org.eclipse.net4j.tests/src/org/eclipse/net4j/tests/TCPConnectorTest.java b/plugins/org.eclipse.net4j.tests/src/org/eclipse/net4j/tests/TCPConnectorTest.java
index 8a1a9d554f..f1d3eb5fcf 100644
--- a/plugins/org.eclipse.net4j.tests/src/org/eclipse/net4j/tests/TCPConnectorTest.java
+++ b/plugins/org.eclipse.net4j.tests/src/org/eclipse/net4j/tests/TCPConnectorTest.java
@@ -455,4 +455,51 @@ public class TCPConnectorTest extends AbstractOMTest
assertEquals(true, ex.getCause() instanceof IllegalStateException);
}
}
+
+ public void testNegotiatorTooLate() throws Exception
+ {
+ threadPool = Executors.newCachedThreadPool();
+ LifecycleUtil.activate(threadPool);
+
+ bufferPool = Net4jUtil.createBufferPool();
+ LifecycleUtil.activate(bufferPool);
+
+ selector = new TCPSelector();
+ selector.activate();
+
+ acceptor = new TCPAcceptor();
+ acceptor.setStartSynchronously(true);
+ acceptor.setSynchronousStartTimeout(TIMEOUT);
+ acceptor.getConfig().setBufferProvider(bufferPool);
+ acceptor.getConfig().setReceiveExecutor(threadPool);
+ acceptor.setSelector(selector);
+ acceptor.setAddress("0.0.0.0");
+ acceptor.setPort(2036);
+ acceptor.activate();
+
+ connector = new TCPClientConnector();
+ connector.getConfig().setBufferProvider(bufferPool);
+ connector.getConfig().setReceiveExecutor(threadPool);
+ connector.setSelector(selector);
+ connector.setHost("localhost");
+ connector.setPort(2036);
+ connector.connect();
+
+ credentialsProvider = new PasswordCredentialsProvider(CREDENTIALS);
+ LifecycleUtil.activate(credentialsProvider);
+
+ responseNegotiator = new ResponseNegotiator();
+ responseNegotiator.setCredentialsProvider(credentialsProvider);
+ responseNegotiator.activate();
+
+ try
+ {
+ connector.getConfig().setNegotiator(responseNegotiator);
+ fail("IllegalStateException expected");
+ }
+ catch (IllegalStateException ex)
+ {
+ OM.LOG.info("Expected IllegalStateException:", ex);
+ }
+ }
}
diff --git a/plugins/org.eclipse.net4j/src/org/eclipse/internal/net4j/TransportConfig.java b/plugins/org.eclipse.net4j/src/org/eclipse/internal/net4j/TransportConfig.java
index 8cf5bbb2c0..1aa47841d6 100644
--- a/plugins/org.eclipse.net4j/src/org/eclipse/internal/net4j/TransportConfig.java
+++ b/plugins/org.eclipse.net4j/src/org/eclipse/internal/net4j/TransportConfig.java
@@ -14,6 +14,8 @@ import org.eclipse.net4j.ITransportConfig;
import org.eclipse.net4j.buffer.IBufferProvider;
import org.eclipse.net4j.channel.IChannel;
import org.eclipse.net4j.protocol.IProtocolProvider;
+import org.eclipse.net4j.util.lifecycle.ILifecycle;
+import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
import org.eclipse.net4j.util.security.INegotiator;
import java.text.MessageFormat;
@@ -24,6 +26,8 @@ import java.util.concurrent.ExecutorService;
*/
public class TransportConfig implements ITransportConfig
{
+ private transient ILifecycle lifecycle;
+
private IBufferProvider bufferProvider;
/**
@@ -41,15 +45,31 @@ public class TransportConfig implements ITransportConfig
{
}
- public TransportConfig(ExecutorService receiveExecutor, IBufferProvider bufferProvider,
+ public TransportConfig(ILifecycle lifecycle)
+ {
+ this.lifecycle = lifecycle;
+ }
+
+ public TransportConfig(ILifecycle lifecycle, ExecutorService receiveExecutor, IBufferProvider bufferProvider,
IProtocolProvider protocolProvider, INegotiator negotiator)
{
+ this(lifecycle);
this.receiveExecutor = receiveExecutor;
this.bufferProvider = bufferProvider;
this.protocolProvider = protocolProvider;
this.negotiator = negotiator;
}
+ public ILifecycle getLifecycle()
+ {
+ return lifecycle;
+ }
+
+ public void setLifecycle(ILifecycle lifecycle)
+ {
+ this.lifecycle = lifecycle;
+ }
+
public ExecutorService getReceiveExecutor()
{
return receiveExecutor;
@@ -57,6 +77,7 @@ public class TransportConfig implements ITransportConfig
public void setReceiveExecutor(ExecutorService receiveExecutor)
{
+ LifecycleUtil.checkInactive(lifecycle);
this.receiveExecutor = receiveExecutor;
}
@@ -67,6 +88,7 @@ public class TransportConfig implements ITransportConfig
public void setBufferProvider(IBufferProvider bufferProvider)
{
+ LifecycleUtil.checkInactive(lifecycle);
this.bufferProvider = bufferProvider;
}
@@ -77,6 +99,7 @@ public class TransportConfig implements ITransportConfig
public void setProtocolProvider(IProtocolProvider protocolProvider)
{
+ LifecycleUtil.checkInactive(lifecycle);
this.protocolProvider = protocolProvider;
}
@@ -87,6 +110,7 @@ public class TransportConfig implements ITransportConfig
public void setNegotiator(INegotiator negotiator)
{
+ LifecycleUtil.checkInactive(lifecycle);
this.negotiator = negotiator;
}
diff --git a/plugins/org.eclipse.net4j/src/org/eclipse/net4j/ITransportConfig.java b/plugins/org.eclipse.net4j/src/org/eclipse/net4j/ITransportConfig.java
index bd926c9137..f71a8517ca 100644
--- a/plugins/org.eclipse.net4j/src/org/eclipse/net4j/ITransportConfig.java
+++ b/plugins/org.eclipse.net4j/src/org/eclipse/net4j/ITransportConfig.java
@@ -12,6 +12,7 @@ package org.eclipse.net4j;
import org.eclipse.net4j.buffer.IBufferProvider;
import org.eclipse.net4j.protocol.IProtocolProvider;
+import org.eclipse.net4j.util.lifecycle.ILifecycle;
import org.eclipse.net4j.util.security.INegotiatorAware;
import java.util.concurrent.ExecutorService;
@@ -22,6 +23,14 @@ import java.util.concurrent.ExecutorService;
*/
public interface ITransportConfig extends INegotiatorAware
{
+ public ILifecycle getLifecycle();
+
+ /**
+ * Sets the lifecycle delegate to be used for inactivity checks in the setter implementations of this transport
+ * configuration.
+ */
+ public void setLifecycle(ILifecycle lifecycle);
+
public IBufferProvider getBufferProvider();
public void setBufferProvider(IBufferProvider bufferProvider);
diff --git a/plugins/org.eclipse.net4j/src/org/eclipse/net4j/Net4jUtil.java b/plugins/org.eclipse.net4j/src/org/eclipse/net4j/Net4jUtil.java
index d606ee6b83..38c012544f 100644
--- a/plugins/org.eclipse.net4j/src/org/eclipse/net4j/Net4jUtil.java
+++ b/plugins/org.eclipse.net4j/src/org/eclipse/net4j/Net4jUtil.java
@@ -16,6 +16,7 @@ import org.eclipse.net4j.buffer.IBufferProvider;
import org.eclipse.net4j.connector.IConnector;
import org.eclipse.net4j.util.StringUtil;
import org.eclipse.net4j.util.container.IManagedContainer;
+import org.eclipse.net4j.util.lifecycle.ILifecycle;
import org.eclipse.net4j.util.security.RandomizerFactory;
import org.eclipse.internal.net4j.ExecutorServiceFactory;
@@ -147,13 +148,9 @@ public final class Net4jUtil
/**
* @since 2.0
*/
- public static ITransportConfig copyTransportConfig(ITransportConfig source)
- {
- TransportConfig result = new TransportConfig();
- result.setBufferProvider(source.getBufferProvider());
- result.setProtocolProvider(source.getProtocolProvider());
- result.setReceiveExecutor(source.getReceiveExecutor());
- result.setNegotiator(source.getNegotiator());
- return result;
+ public static ITransportConfig copyTransportConfig(ILifecycle lifecycle, ITransportConfig source)
+ {
+ return new TransportConfig(lifecycle, source.getReceiveExecutor(), source.getBufferProvider(), source
+ .getProtocolProvider(), source.getNegotiator());
}
}
diff --git a/plugins/org.eclipse.net4j/src/org/eclipse/spi/net4j/Acceptor.java b/plugins/org.eclipse.net4j/src/org/eclipse/spi/net4j/Acceptor.java
index 94535234fe..06eadebf38 100644
--- a/plugins/org.eclipse.net4j/src/org/eclipse/spi/net4j/Acceptor.java
+++ b/plugins/org.eclipse.net4j/src/org/eclipse/spi/net4j/Acceptor.java
@@ -56,7 +56,7 @@ public abstract class Acceptor extends Container<IConnector> implements Internal
{
if (config == null)
{
- config = new TransportConfig();
+ config = new TransportConfig(this);
}
return config;
@@ -64,7 +64,7 @@ public abstract class Acceptor extends Container<IConnector> implements Internal
public synchronized void setConfig(ITransportConfig config)
{
- this.config = Net4jUtil.copyTransportConfig(config);
+ this.config = Net4jUtil.copyTransportConfig(this, config);
}
public INegotiator getNegotiator()
diff --git a/plugins/org.eclipse.net4j/src/org/eclipse/spi/net4j/ChannelMultiplexer.java b/plugins/org.eclipse.net4j/src/org/eclipse/spi/net4j/ChannelMultiplexer.java
index 880b7b2b49..144b44506a 100644
--- a/plugins/org.eclipse.net4j/src/org/eclipse/spi/net4j/ChannelMultiplexer.java
+++ b/plugins/org.eclipse.net4j/src/org/eclipse/spi/net4j/ChannelMultiplexer.java
@@ -68,7 +68,7 @@ public abstract class ChannelMultiplexer extends Container<IChannel> implements
{
if (config == null)
{
- config = new TransportConfig();
+ config = new TransportConfig(this);
}
return config;
@@ -77,7 +77,7 @@ public abstract class ChannelMultiplexer extends Container<IChannel> implements
public synchronized void setConfig(ITransportConfig config)
{
checkInactive();
- this.config = Net4jUtil.copyTransportConfig(config);
+ this.config = Net4jUtil.copyTransportConfig(this, config);
}
public long getOpenChannelTimeout()

Back to the top