Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoakim Erdfelt2015-01-30 22:13:35 +0000
committerJoakim Erdfelt2015-03-12 17:09:52 +0000
commit87246263b8ae726a61cb9cef20f5d10c1c054458 (patch)
treed6a6c8950ca999e7a37470e824d233f9351ab264 /jetty-websocket/javax-websocket-server-impl
parente213c4488ea6ae83d440c5e53920be96187d860f (diff)
downloadorg.eclipse.jetty.project-87246263b8ae726a61cb9cef20f5d10c1c054458.tar.gz
org.eclipse.jetty.project-87246263b8ae726a61cb9cef20f5d10c1c054458.tar.xz
org.eclipse.jetty.project-87246263b8ae726a61cb9cef20f5d10c1c054458.zip
453834 - CDI Support for WebSocket
+ Verifying ServletContextHandler behavior of Decorators + Marking old ServletContextHandler methods as deprecated + Updates to DecoratedObjectFactory + Removing customized weld scopes/context (for now) + Deferring JSR356 ServerContainer endpoint init till Container.doStart() to allow weld to init properly first + Removing JSR356 BasicServerEndpointConfigurator in favor of ContainerDefaultEndpointConfigurator + Only decorating server endpoints if they were created by ContainerDefaultEndpointConfigurator, all others are trusted to be complete and injected already.
Diffstat (limited to 'jetty-websocket/javax-websocket-server-impl')
-rw-r--r--jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/AnnotatedServerEndpointConfig.java3
-rw-r--r--jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/BasicServerEndpointConfig.java4
-rw-r--r--jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/BasicServerEndpointConfigurator.java57
-rw-r--r--jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/ContainerDefaultConfigurator.java2
-rw-r--r--jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/JsrCreator.java9
-rw-r--r--jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/ServerContainer.java70
-rw-r--r--jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/deploy/WebSocketServerContainerInitializer.java2
7 files changed, 74 insertions, 73 deletions
diff --git a/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/AnnotatedServerEndpointConfig.java b/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/AnnotatedServerEndpointConfig.java
index f6ae65b3e3..3dc14762dc 100644
--- a/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/AnnotatedServerEndpointConfig.java
+++ b/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/AnnotatedServerEndpointConfig.java
@@ -122,7 +122,7 @@ public class AnnotatedServerEndpointConfig implements ServerEndpointConfig
}
else
{
- cfgr = new BasicServerEndpointConfigurator(containerScope);
+ cfgr = new ContainerDefaultConfigurator();
}
}
else
@@ -144,7 +144,6 @@ public class AnnotatedServerEndpointConfig implements ServerEndpointConfig
// Make sure all Configurators obtained are decorated
this.configurator = containerScope.getObjectFactory().decorate(cfgr);
-
}
@Override
diff --git a/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/BasicServerEndpointConfig.java b/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/BasicServerEndpointConfig.java
index 28f16ce107..1156917350 100644
--- a/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/BasicServerEndpointConfig.java
+++ b/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/BasicServerEndpointConfig.java
@@ -51,7 +51,7 @@ public class BasicServerEndpointConfig implements ServerEndpointConfig
this.subprotocols = new ArrayList<>();
this.extensions = new ArrayList<>();
this.userProperties = new HashMap<>();
- this.configurator = new BasicServerEndpointConfigurator(containerScope);
+ this.configurator = new ContainerDefaultConfigurator();
}
public BasicServerEndpointConfig(WebSocketContainerScope containerScope, ServerEndpointConfig copy)
@@ -73,7 +73,7 @@ public class BasicServerEndpointConfig implements ServerEndpointConfig
}
else
{
- cfgr = new BasicServerEndpointConfigurator(containerScope);
+ cfgr = new ContainerDefaultConfigurator();
}
// Make sure all Configurators obtained are decorated
diff --git a/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/BasicServerEndpointConfigurator.java b/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/BasicServerEndpointConfigurator.java
deleted file mode 100644
index 71000af8fd..0000000000
--- a/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/BasicServerEndpointConfigurator.java
+++ /dev/null
@@ -1,57 +0,0 @@
-//
-// ========================================================================
-// Copyright (c) 1995-2015 Mort Bay Consulting Pty. Ltd.
-// ------------------------------------------------------------------------
-// All rights reserved. This program and the accompanying materials
-// are made available under the terms of the Eclipse Public License v1.0
-// and Apache License v2.0 which accompanies this distribution.
-//
-// The Eclipse Public License is available at
-// http://www.eclipse.org/legal/epl-v10.html
-//
-// The Apache License v2.0 is available at
-// http://www.opensource.org/licenses/apache2.0.php
-//
-// You may elect to redistribute this code under either of these licenses.
-// ========================================================================
-//
-
-package org.eclipse.jetty.websocket.jsr356.server;
-
-import org.eclipse.jetty.util.DecoratedObjectFactory;
-import org.eclipse.jetty.util.log.Log;
-import org.eclipse.jetty.util.log.Logger;
-import org.eclipse.jetty.websocket.common.scopes.WebSocketContainerScope;
-
-/**
- * The Basic Configurator
- */
-public class BasicServerEndpointConfigurator extends ContainerDefaultConfigurator
-{
- private static final Logger LOG = Log.getLogger(BasicServerEndpointConfigurator.class);
- private final DecoratedObjectFactory objectFactory;
-
- public BasicServerEndpointConfigurator(WebSocketContainerScope containerScope)
- {
- super();
- this.objectFactory = containerScope.getObjectFactory();
- }
-
- @Override
- public <T> T getEndpointInstance(Class<T> endpointClass) throws InstantiationException
- {
- if (LOG.isDebugEnabled())
- {
- LOG.debug(".getEndpointInstance({})",endpointClass);
- }
-
- try
- {
- return objectFactory.createInstance(endpointClass);
- }
- catch (IllegalAccessException e)
- {
- throw new InstantiationException(String.format("%s: %s",e.getClass().getName(),e.getMessage()));
- }
- }
-} \ No newline at end of file
diff --git a/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/ContainerDefaultConfigurator.java b/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/ContainerDefaultConfigurator.java
index 07d8a26771..4d0168811f 100644
--- a/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/ContainerDefaultConfigurator.java
+++ b/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/ContainerDefaultConfigurator.java
@@ -35,7 +35,7 @@ import org.eclipse.jetty.websocket.api.util.QuoteUtil;
*
* @see ServiceLoader behavior of {@link ServerEndpointConfig.Configurator}
*/
-public class ContainerDefaultConfigurator extends Configurator
+public final class ContainerDefaultConfigurator extends Configurator
{
private static final Logger LOG = Log.getLogger(ContainerDefaultConfigurator.class);
private static final String NO_SUBPROTOCOL = "";
diff --git a/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/JsrCreator.java b/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/JsrCreator.java
index 93d6659771..1d32ed3f31 100644
--- a/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/JsrCreator.java
+++ b/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/JsrCreator.java
@@ -25,6 +25,7 @@ import java.util.List;
import javax.websocket.Extension;
import javax.websocket.Extension.Parameter;
import javax.websocket.server.ServerEndpointConfig;
+import javax.websocket.server.ServerEndpointConfig.Configurator;
import org.eclipse.jetty.util.StringUtil;
import org.eclipse.jetty.util.log.Log;
@@ -137,7 +138,13 @@ public class JsrCreator implements WebSocketCreator
try
{
Class<?> endpointClass = config.getEndpointClass();
- Object endpoint = config.getConfigurator().getEndpointInstance(endpointClass);
+ Configurator configr = config.getConfigurator();
+ Object endpoint = configr.getEndpointInstance(endpointClass);
+ if (configr instanceof ContainerDefaultConfigurator)
+ {
+ // default impl always decorates (custom ones do not)
+ endpoint = containerScope.getObjectFactory().decorate(endpoint);
+ }
PathSpec pathSpec = hsreq.getRequestPathSpec();
if (pathSpec instanceof WebSocketPathSpec)
{
diff --git a/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/ServerContainer.java b/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/ServerContainer.java
index 6955bef201..e1932d2a83 100644
--- a/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/ServerContainer.java
+++ b/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/ServerContainer.java
@@ -18,6 +18,8 @@
package org.eclipse.jetty.websocket.jsr356.server;
+import java.util.ArrayList;
+import java.util.List;
import java.util.concurrent.Executor;
import javax.websocket.DeploymentException;
@@ -43,16 +45,19 @@ public class ServerContainer extends ClientContainer implements javax.websocket.
private final MappedWebSocketCreator mappedCreator;
private final WebSocketServerFactory webSocketServerFactory;
+ private List<Class<?>> deferredEndpointClasses;
+ private List<ServerEndpointConfig> deferredEndpointConfigs;
public ServerContainer(MappedWebSocketCreator creator, WebSocketServerFactory factory, Executor executor)
{
- super();
+ super(factory);
this.mappedCreator = creator;
this.webSocketServerFactory = factory;
EventDriverFactory eventDriverFactory = this.webSocketServerFactory.getEventDriverFactory();
eventDriverFactory.addImplementation(new JsrServerEndpointImpl());
eventDriverFactory.addImplementation(new JsrServerExtendsEndpointImpl());
this.webSocketServerFactory.addSessionFactory(new JsrSessionFactory(this,this));
+ addBean(webSocketServerFactory);
}
public EndpointInstance newClientEndpointInstance(Object endpoint, ServerEndpointConfig config, String path)
@@ -76,11 +81,22 @@ public class ServerContainer extends ClientContainer implements javax.websocket.
@Override
public void addEndpoint(Class<?> endpointClass) throws DeploymentException
{
- ServerEndpointMetadata metadata = getServerEndpointMetadata(endpointClass,null);
- addEndpoint(metadata);
+ if (isStarted() || isStarting())
+ {
+ ServerEndpointMetadata metadata = getServerEndpointMetadata(endpointClass,null);
+ addEndpoint(metadata);
+ }
+ else
+ {
+ if (deferredEndpointClasses == null)
+ {
+ deferredEndpointClasses = new ArrayList<Class<?>>();
+ }
+ deferredEndpointClasses.add(endpointClass);
+ }
}
- public void addEndpoint(ServerEndpointMetadata metadata) throws DeploymentException
+ private void addEndpoint(ServerEndpointMetadata metadata) throws DeploymentException
{
JsrCreator creator = new JsrCreator(this,metadata,webSocketServerFactory.getExtensionFactory());
mappedCreator.addMapping(new WebSocketPathSpec(metadata.getPath()),creator);
@@ -89,12 +105,50 @@ public class ServerContainer extends ClientContainer implements javax.websocket.
@Override
public void addEndpoint(ServerEndpointConfig config) throws DeploymentException
{
- if (LOG.isDebugEnabled())
+ if (isStarted() || isStarting())
+ {
+ if (LOG.isDebugEnabled())
+ {
+ LOG.debug("addEndpoint({}) path={} endpoint={}",config,config.getPath(),config.getEndpointClass());
+ }
+ ServerEndpointMetadata metadata = getServerEndpointMetadata(config.getEndpointClass(),config);
+ addEndpoint(metadata);
+ }
+ else
+ {
+ if (deferredEndpointConfigs == null)
+ {
+ deferredEndpointConfigs = new ArrayList<ServerEndpointConfig>();
+ }
+ deferredEndpointConfigs.add(config);
+ }
+ }
+
+ @Override
+ protected void doStart() throws Exception
+ {
+ // Proceed with Normal Startup
+ super.doStart();
+
+ // Process Deferred Endpoints
+ if (deferredEndpointClasses != null)
{
- LOG.debug("addEndpoint({}) path={} endpoint={}",config,config.getPath(),config.getEndpointClass());
+ for (Class<?> endpointClass : deferredEndpointClasses)
+ {
+ addEndpoint(endpointClass);
+ }
+ }
+
+ if (deferredEndpointConfigs != null)
+ {
+ for (ServerEndpointConfig config : deferredEndpointConfigs)
+ {
+ addEndpoint(config);
+ }
}
- ServerEndpointMetadata metadata = getServerEndpointMetadata(config.getEndpointClass(),config);
- addEndpoint(metadata);
+
+ deferredEndpointClasses.clear();
+ deferredEndpointConfigs.clear();
}
public ServerEndpointMetadata getServerEndpointMetadata(final Class<?> endpoint, final ServerEndpointConfig config) throws DeploymentException
diff --git a/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/deploy/WebSocketServerContainerInitializer.java b/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/deploy/WebSocketServerContainerInitializer.java
index b389ab0f27..76bd63d1bb 100644
--- a/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/deploy/WebSocketServerContainerInitializer.java
+++ b/jetty-websocket/javax-websocket-server-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/server/deploy/WebSocketServerContainerInitializer.java
@@ -58,7 +58,6 @@ public class WebSocketServerContainerInitializer implements ServletContainerInit
WebSocketUpgradeFilter filter = WebSocketUpgradeFilter.configureContext(context);
// Create the Jetty ServerContainer implementation
- filter.getFactory().init(context);
ServerContainer jettyContainer = new ServerContainer(filter,filter.getFactory(),context.getServer().getThreadPool());
context.addBean(jettyContainer);
@@ -79,7 +78,6 @@ public class WebSocketServerContainerInitializer implements ServletContainerInit
WebSocketUpgradeFilter filter = WebSocketUpgradeFilter.configureContext(context);
// Create the Jetty ServerContainer implementation
- filter.getFactory().init(context);
ServerContainer jettyContainer = new ServerContainer(filter,filter.getFactory(),jettyContext.getServer().getThreadPool());
jettyContext.addBean(jettyContainer);

Back to the top