JSR-356 - Changing to ServerContainer access.

+ Using technique as outlined in JSR-356 spec, Section 6.4
This commit is contained in:
Joakim Erdfelt 2013-07-26 11:08:24 -07:00
parent 89be2de57f
commit ca23911075
9 changed files with 72 additions and 13 deletions

View File

@ -112,6 +112,8 @@ public class JsrAnnotatedEventDriver extends AbstractJsrEventDriver implements E
LOG.debug("Binary Message InputStream");
final MessageInputStream stream = new MessageInputStream(session.getConnection());
activeMessage = stream;
// Always dispatch streaming read to another thread.
dispatch(new Runnable()
{
@Override
@ -279,6 +281,7 @@ public class JsrAnnotatedEventDriver extends AbstractJsrEventDriver implements E
final MessageReader stream = new MessageReader(new MessageInputStream(session.getConnection()));
activeMessage = stream;
// Always dispatch streaming read to another thread.
dispatch(new Runnable()
{
@Override

View File

@ -59,7 +59,7 @@ import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class PrimitiveEchoTest
public class EchoTest
{
private static final List<EchoCase[]> TESTCASES = new ArrayList<>();
@ -172,12 +172,21 @@ public class PrimitiveEchoTest
// PathParam based
EchoCase.add(TESTCASES,IntParamTextSocket.class).requestPath("/echo/primitives/integer/params/5678")
.addMessage(1234).expect("1234|5678");
// Reader based
/* NOT WORKING YET
EchoCase.add(TESTCASES,ReaderSocket.class).addMessage("Hello World").expect("Hello World");
EchoCase.add(TESTCASES,ReaderParamSocket.class).requestPath("/echo/streaming/readerparam/OhNo")
.addMessage("Hello World").expect("Hello World|OnNo");
EchoCase.add(TESTCASES,StringReturnReaderParamSocket.class).requestPath("/echo/streaming/readerparam2/OhMy")
.addMessage("Hello World").expect("Hello World|OhMy");
*/
}
@BeforeClass
public static void startServer() throws Exception
{
File testdir = MavenTestingUtils.getTargetTestingDir(PrimitiveEchoTest.class.getName());
File testdir = MavenTestingUtils.getTargetTestingDir(EchoTest.class.getName());
server = new WSServer(testdir,"app");
server.copyWebInf("empty-web.xml");
@ -217,7 +226,7 @@ public class PrimitiveEchoTest
private EchoCase testcase;
public PrimitiveEchoTest(EchoCase testcase)
public EchoTest(EchoCase testcase)
{
this.testcase = testcase;
System.err.println(testcase);

View File

@ -25,8 +25,6 @@ import javax.websocket.Endpoint;
import javax.websocket.server.ServerContainer;
import javax.websocket.server.ServerEndpointConfig;
import org.eclipse.jetty.websocket.jsr356.server.WebSocketConfiguration;
/**
* Example of adding a server WebSocket (extending {@link Endpoint}) programmatically via config
*/
@ -41,7 +39,7 @@ public class BasicEchoEndpointConfigContextListener implements ServletContextLis
@Override
public void contextInitialized(ServletContextEvent sce)
{
ServerContainer container = (ServerContainer)sce.getServletContext().getAttribute(WebSocketConfiguration.JAVAX_WEBSOCKET_SERVER_CONTAINER);
ServerContainer container = (ServerContainer)sce.getServletContext().getAttribute(ServerContainer.class.getName());
// Build up a configuration with a specific path
String path = "/echo";
ServerEndpointConfig.Builder builder = ServerEndpointConfig.Builder.create(BasicEchoEndpoint.class,path);

View File

@ -20,7 +20,6 @@ package org.eclipse.jetty.websocket.jsr356.server.samples.echo;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.websocket.ContainerProvider;
import javax.websocket.DeploymentException;
import javax.websocket.Endpoint;
import javax.websocket.server.ServerContainer;
@ -41,7 +40,7 @@ public class BasicEchoEndpointContextListener implements ServletContextListener
@Override
public void contextInitialized(ServletContextEvent sce)
{
ServerContainer container = (ServerContainer)ContainerProvider.getWebSocketContainer();
ServerContainer container = (ServerContainer)sce.getServletContext().getAttribute(ServerContainer.class.getName());
try
{
// Should fail as there is no path associated with this endpoint

View File

@ -20,7 +20,6 @@ package org.eclipse.jetty.websocket.jsr356.server.samples.echo;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.websocket.ContainerProvider;
import javax.websocket.DeploymentException;
import javax.websocket.Endpoint;
import javax.websocket.server.ServerContainer;
@ -40,7 +39,7 @@ public class BasicEchoSocketConfigContextListener implements ServletContextListe
@Override
public void contextInitialized(ServletContextEvent sce)
{
ServerContainer container = (ServerContainer)ContainerProvider.getWebSocketContainer();
ServerContainer container = (ServerContainer)sce.getServletContext().getAttribute(ServerContainer.class.getName());
// Build up a configuration with a specific path
// Intentionally using alternate path in config (which differs from @ServerEndpoint declaration)
String path = "/echo-alt";

View File

@ -20,7 +20,6 @@ package org.eclipse.jetty.websocket.jsr356.server.samples.echo;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.websocket.ContainerProvider;
import javax.websocket.DeploymentException;
import javax.websocket.server.ServerContainer;
@ -38,7 +37,7 @@ public class BasicEchoSocketContextListener implements ServletContextListener
@Override
public void contextInitialized(ServletContextEvent sce)
{
ServerContainer container = (ServerContainer)ContainerProvider.getWebSocketContainer();
ServerContainer container = (ServerContainer)sce.getServletContext().getAttribute(ServerContainer.class.getName());
try
{
container.addEndpoint(BasicEchoSocket.class);

View File

@ -0,0 +1,51 @@
//
// ========================================================================
// Copyright (c) 1995-2013 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.samples.streaming;
import java.io.IOException;
import java.io.Reader;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import org.eclipse.jetty.util.IO;
import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.log.Logger;
import org.eclipse.jetty.websocket.jsr356.server.StackUtil;
@ServerEndpoint("/echo/streaming/reader")
public class ReaderSocket
{
private static final Logger LOG = Log.getLogger(ReaderSocket.class);
@OnMessage
public String onReader(Reader reader) throws IOException
{
return IO.toString(reader);
}
@OnError
public void onError(Session session, Throwable cause) throws IOException
{
LOG.warn("Error",cause);
session.getBasicRemote().sendText("Exception: " + StackUtil.toString(cause));
}
}

View File

@ -32,7 +32,7 @@ import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.log.Logger;
import org.eclipse.jetty.websocket.jsr356.server.StackUtil;
@ServerEndpoint("/stringreaderparam/{param}")
@ServerEndpoint("/echo/streaming/readerparam2/{param}")
public class StringReturnReaderParamSocket
{
private static final Logger LOG = Log.getLogger(StringReturnReaderParamSocket.class);

View File

@ -2,6 +2,7 @@ org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog
org.eclipse.jetty.LEVEL=WARN
# org.eclipse.jetty.websocket.LEVEL=DEBUG
org.eclipse.jetty.websocket.LEVEL=INFO
# org.eclipse.jetty.websocket.LEVEL=WARN
# org.eclipse.jetty.websocket.common.io.LEVEL=DEBUG