diff options
author | Eike Stepper | 2009-04-24 13:01:06 +0000 |
---|---|---|
committer | Eike Stepper | 2009-04-24 13:01:06 +0000 |
commit | a69935665fcc370c23d3a557a81530f53d62fbd2 (patch) | |
tree | 9c5020e5cde15073c9b1414e377127c2613250e0 /plugins | |
parent | 396783f7a5897c8fbb4ec4a22c7b85018e72d9f7 (diff) | |
download | cdo-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')
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() |