Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2009-04-24 12:41:02 +0000
committerEike Stepper2009-04-24 12:41:02 +0000
commitfcc3470ceb938a4d571c70a49b8ba527046411ac (patch)
tree3eb7527dd033755df4edb4532178d1bd956c6380 /plugins/org.eclipse.net4j/src
parentf17010ba0dcf1ee78f30945f89c13119db076e27 (diff)
downloadcdo-fcc3470ceb938a4d571c70a49b8ba527046411ac.tar.gz
cdo-fcc3470ceb938a4d571c70a49b8ba527046411ac.tar.xz
cdo-fcc3470ceb938a4d571c70a49b8ba527046411ac.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/org.eclipse.net4j/src')
-rw-r--r--plugins/org.eclipse.net4j/src/org/eclipse/net4j/ITransportConfigAware.java6
-rw-r--r--plugins/org.eclipse.net4j/src/org/eclipse/net4j/Net4jUtil.java14
-rw-r--r--plugins/org.eclipse.net4j/src/org/eclipse/net4j/acceptor/IAcceptor.java1
-rw-r--r--plugins/org.eclipse.net4j/src/org/eclipse/spi/net4j/Acceptor.java3
-rw-r--r--plugins/org.eclipse.net4j/src/org/eclipse/spi/net4j/ChannelMultiplexer.java3
-rw-r--r--plugins/org.eclipse.net4j/src/org/eclipse/spi/net4j/Connector.java28
-rw-r--r--plugins/org.eclipse.net4j/src/org/eclipse/spi/net4j/InternalChannelMultiplexer.java3
7 files changed, 31 insertions, 27 deletions
diff --git a/plugins/org.eclipse.net4j/src/org/eclipse/net4j/ITransportConfigAware.java b/plugins/org.eclipse.net4j/src/org/eclipse/net4j/ITransportConfigAware.java
index d294a41ad6..036cd93a84 100644
--- a/plugins/org.eclipse.net4j/src/org/eclipse/net4j/ITransportConfigAware.java
+++ b/plugins/org.eclipse.net4j/src/org/eclipse/net4j/ITransportConfigAware.java
@@ -16,7 +16,13 @@ package org.eclipse.net4j;
*/
public interface ITransportConfigAware
{
+ /**
+ * Returns the current transport configuration if there is one, a new empty one otherwise.
+ */
public ITransportConfig getConfig();
+ /**
+ * Sets a new transport configuration by <b>copying</b> the given one.
+ */
public void setConfig(ITransportConfig config);
}
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 aefd7a5917..d606ee6b83 100644
--- a/plugins/org.eclipse.net4j/src/org/eclipse/net4j/Net4jUtil.java
+++ b/plugins/org.eclipse.net4j/src/org/eclipse/net4j/Net4jUtil.java
@@ -19,6 +19,7 @@ import org.eclipse.net4j.util.container.IManagedContainer;
import org.eclipse.net4j.util.security.RandomizerFactory;
import org.eclipse.internal.net4j.ExecutorServiceFactory;
+import org.eclipse.internal.net4j.TransportConfig;
import org.eclipse.internal.net4j.buffer.BufferFactory;
import org.eclipse.internal.net4j.buffer.BufferPool;
import org.eclipse.internal.net4j.buffer.BufferProviderFactory;
@@ -142,4 +143,17 @@ public final class Net4jUtil
return -1;
}
+
+ /**
+ * @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;
+ }
}
diff --git a/plugins/org.eclipse.net4j/src/org/eclipse/net4j/acceptor/IAcceptor.java b/plugins/org.eclipse.net4j/src/org/eclipse/net4j/acceptor/IAcceptor.java
index 782c2c3744..1b8833f8b2 100644
--- a/plugins/org.eclipse.net4j/src/org/eclipse/net4j/acceptor/IAcceptor.java
+++ b/plugins/org.eclipse.net4j/src/org/eclipse/net4j/acceptor/IAcceptor.java
@@ -10,6 +10,7 @@
*/
package org.eclipse.net4j.acceptor;
+import org.eclipse.net4j.ILocationAware.Location;
import org.eclipse.net4j.connector.IConnector;
import org.eclipse.net4j.util.collection.Closeable;
import org.eclipse.net4j.util.container.IContainer;
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 954eb6e701..94535234fe 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
@@ -11,6 +11,7 @@
package org.eclipse.spi.net4j;
import org.eclipse.net4j.ITransportConfig;
+import org.eclipse.net4j.Net4jUtil;
import org.eclipse.net4j.connector.IConnector;
import org.eclipse.net4j.util.WrappedException;
import org.eclipse.net4j.util.container.Container;
@@ -63,7 +64,7 @@ public abstract class Acceptor extends Container<IConnector> implements Internal
public synchronized void setConfig(ITransportConfig config)
{
- this.config = config;
+ this.config = Net4jUtil.copyTransportConfig(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 93c413c4b7..880b7b2b49 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
@@ -11,6 +11,7 @@
package org.eclipse.spi.net4j;
import org.eclipse.net4j.ITransportConfig;
+import org.eclipse.net4j.Net4jUtil;
import org.eclipse.net4j.buffer.IBuffer;
import org.eclipse.net4j.channel.ChannelException;
import org.eclipse.net4j.channel.IChannel;
@@ -76,7 +77,7 @@ public abstract class ChannelMultiplexer extends Container<IChannel> implements
public synchronized void setConfig(ITransportConfig config)
{
checkInactive();
- this.config = config;
+ this.config = Net4jUtil.copyTransportConfig(config);
}
public long getOpenChannelTimeout()
diff --git a/plugins/org.eclipse.net4j/src/org/eclipse/spi/net4j/Connector.java b/plugins/org.eclipse.net4j/src/org/eclipse/spi/net4j/Connector.java
index 4c8de374e9..02ae26d792 100644
--- a/plugins/org.eclipse.net4j/src/org/eclipse/spi/net4j/Connector.java
+++ b/plugins/org.eclipse.net4j/src/org/eclipse/spi/net4j/Connector.java
@@ -10,7 +10,6 @@
*/
package org.eclipse.spi.net4j;
-import org.eclipse.net4j.ITransportConfig;
import org.eclipse.net4j.buffer.IBuffer;
import org.eclipse.net4j.channel.ChannelException;
import org.eclipse.net4j.connector.ConnectorException;
@@ -27,7 +26,6 @@ import org.eclipse.net4j.util.security.INegotiationContext;
import org.eclipse.net4j.util.security.INegotiator;
import org.eclipse.net4j.util.security.NegotiationException;
-import org.eclipse.internal.net4j.TransportConfig;
import org.eclipse.internal.net4j.bundle.OM;
import java.text.MessageFormat;
@@ -44,8 +42,6 @@ public abstract class Connector extends ChannelMultiplexer implements InternalCo
private String userID;
- private ITransportConfig config;
-
private transient ConnectorState connectorState = ConnectorState.DISCONNECTED;
@ExcludeFromDump
@@ -64,24 +60,6 @@ public abstract class Connector extends ChannelMultiplexer implements InternalCo
{
}
- @Override
- public synchronized ITransportConfig getConfig()
- {
- if (config == null)
- {
- config = new TransportConfig();
- }
-
- return config;
- }
-
- @Override
- public synchronized void setConfig(ITransportConfig config)
- {
- checkInactive();
- this.config = config;
- }
-
public INegotiator getNegotiator()
{
return getConfig().getNegotiator();
@@ -378,9 +356,11 @@ public abstract class Connector extends ChannelMultiplexer implements InternalCo
protected void doBeforeActivate() throws Exception
{
super.doBeforeActivate();
- if (getConfig().getBufferProvider() == null)
+ checkState(getConfig().getBufferProvider(), "getConfig().getBufferProvider()");
+
+ if (userID != null && getConfig().getNegotiator() == null)
{
- throw new IllegalStateException("getConfig().getBufferProvider() == null");
+ throw new IllegalStateException("A UserID on this connector requires a negotiator to be configured");
}
}
diff --git a/plugins/org.eclipse.net4j/src/org/eclipse/spi/net4j/InternalChannelMultiplexer.java b/plugins/org.eclipse.net4j/src/org/eclipse/spi/net4j/InternalChannelMultiplexer.java
index 0666265408..6354d6e3d0 100644
--- a/plugins/org.eclipse.net4j/src/org/eclipse/spi/net4j/InternalChannelMultiplexer.java
+++ b/plugins/org.eclipse.net4j/src/org/eclipse/spi/net4j/InternalChannelMultiplexer.java
@@ -10,6 +10,7 @@
*/
package org.eclipse.spi.net4j;
+import org.eclipse.net4j.ITransportConfigAware;
import org.eclipse.net4j.buffer.IBufferProvider;
import org.eclipse.net4j.channel.IChannel;
import org.eclipse.net4j.channel.IChannelMultiplexer;
@@ -18,7 +19,7 @@ import org.eclipse.net4j.channel.IChannelMultiplexer;
* @author Eike Stepper
* @since 2.0
*/
-public interface InternalChannelMultiplexer extends IChannelMultiplexer, IBufferProvider
+public interface InternalChannelMultiplexer extends IChannelMultiplexer, IBufferProvider, ITransportConfigAware
{
/**
* Called by an {@link IChannel} each time a new buffer is available for multiplexing. This or another buffer can be

Back to the top