[TYRUS-126] websockets api: improve maxMessage description Created: 11/Mar/13  Updated: 16/Jun/16  Resolved: 16/Jun/16

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: 1.0-b13
Fix Version/s: 1.0

Type: Improvement Priority: Major
Reporter: mikc22 Assignee: Unassigned
Resolution: Invalid Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Description   

The current maxMessageSize annotation javadoc doesn't say when we can use this annotation and what is the behaviour on specified endpoints. E.g. can I supply maxMessageSize for stream as well ?



 Comments   
Comment by mikc22 [ 11/Mar/13 ]

Should go to websocket spec.





[TYRUS-86] Remove @ApplicationConfig and make scanning algorithm compliant with the spec (@HandlesTypes should work correctly) Created: 07/Feb/13  Updated: 16/Jun/16  Resolved: 09/Feb/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0

Type: Bug Priority: Major
Reporter: stepan.kopriva Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified





[TYRUS-113] @PathParam does not work for primitive types and boxed types Created: 28/Feb/13  Updated: 16/Jun/16  Resolved: 06/Mar/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: 1.0-b13
Fix Version/s: 1.0

Type: Bug Priority: Critical
Reporter: jan.supol Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Description   

javadoc of @PathParam says:

The method parameter may be of type String, any Java primitive type or any boxed version thereof.

However, having:

	@OnMessage
	public String echo(byte b, @PathParam("param") byte param) {
		return String.valueOf(b) + String.valueOf(param);
	}

throws:

Exception: java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.glassfish.tyrus.core.AnnotatedEndpoint.callMethod(AnnotatedEndpoint.java:439)
at org.glassfish.tyrus.core.AnnotatedEndpoint.access$000(AnnotatedEndpoint.java:81)
at org.glassfish.tyrus.core.AnnotatedEndpoint$BasicHandler$1.onMessage(AnnotatedEndpoint.java:526)
at org.glassfish.tyrus.core.SessionImpl.notifyMessageHandlers(SessionImpl.java:309)
at org.glassfish.tyrus.core.EndpointWrapper.onMessage(EndpointWrapper.java:440)
at org.glassfish.tyrus.server.TyrusEndpoint.onMessage(TyrusEndpoint.java:163)
at org.glassfish.tyrus.websockets.DefaultWebSocket.onMessage(DefaultWebSocket.java:138)
at org.glassfish.tyrus.websockets.frametypes.TextFrameType.respond(TextFrameType.java:66)
at org.glassfish.tyrus.websockets.DataFrame.respond(DataFrame.java:102)
at org.glassfish.tyrus.servlet.TyrusHttpUpgradeHandler.onDataAvailable(TyrusHttpUpgradeHandler.java:113)
at org.apache.catalina.connector.InputBuffer$ReadHandlerImpl.processDataAvailable(InputBuffer.java:472)
at org.apache.catalina.connector.InputBuffer$ReadHandlerImpl.onDataAvailable(InputBuffer.java:440)
at org.glassfish.grizzly.http.server.io.InputBuffer.append(InputBuffer.java:844)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:210)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:273)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:134)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:820)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544)
at java.lang.Thread.run(Thread.java:722)






[TYRUS-81] AnnotatedClassValidityChecker.checkOnMessageReturnType Created: 04/Feb/13  Updated: 16/Jun/16  Resolved: 04/Feb/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0

Type: Bug Priority: Critical
Reporter: Pavel Bucek Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Description   
  • checks decoders type (instead of encoders)
  • forbids everything else than primitive type


 Comments   
Comment by stepan.kopriva [ 04/Feb/13 ]

AnnotatedClassValidityChecker.checkOnMessageReturnType uses encoders instead of decoders.





[TYRUS-84] Update AnnotatedClassValidityChecker to consider Reader and InputStream parameters in methods annotated with @WebSocketMessage Created: 06/Feb/13  Updated: 16/Jun/16  Resolved: 11/Feb/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0

Type: Bug Priority: Major
Reporter: stepan.kopriva Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified





[TYRUS-87] testSimpleRemoteMT failures Created: 08/Feb/13  Updated: 16/Jun/16  Resolved: 28/Feb/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: 1.0-b10
Fix Version/s: 1.0

Type: Bug Priority: Major
Reporter: Pavel Bucek Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Comments   
Comment by stepan.kopriva [ 28/Feb/13 ]

Used concurrent hash for connection -> webSocketHolder mapping in WebSocektEngine





[TYRUS-88] When n messages from one client are sent to server, WebSocketFiletr.handleRead is invoked more than n times (nondeterministically) Created: 11/Feb/13  Updated: 16/Jun/16  Resolved: 18/Feb/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0

Type: Bug Priority: Major
Reporter: stepan.kopriva Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Comments   
Comment by stepan.kopriva [ 18/Feb/13 ]

Synchronizing Connection -> WebSocketHolder in WebSocketEngine + making buffer in Masker volatile.





[TYRUS-103] WebSocket in GlassFish 4.0 Promoted Build 72: Unable to Inject CDI or EJB beans Created: 22/Feb/13  Updated: 16/Jun/16  Resolved: 05/Mar/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: 1.0-b12
Fix Version/s: 1.0

Type: Bug Priority: Major
Reporter: peter_pilgrim Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified
Environment:

Glassfish Embedded Server Promoted 72 with Gradle


Tags: cdi, container, ejb, endpoint, injection, websocket

 Description   

I am reviewing the WebSockets bundled in the GlassFish 4.0 promoted
build 72. I have successfully got a deployed WAR running in GlassFish
embedded container using Gradle.

Does the WebSockets implementation in this promoted build work
currently against CDI?

I tried the following code:

@ApplicationScoped
class SampleBean {
@PostConstruct public void init() { System.out.printtf("%s.init()
called\n", getClass().getSimpleName() );
public getValue()

{ return "whatever"; }

}

@WebSockedEndpoint( "/test" )
class SampleEndPoint {

@Inject @ApplicationScoped private SampleBean sampleBean;

@PostConstruct public void init()

{ System.out.printtf("%s.init() called\n", getClass().getSimpleName() ); // sampleBean is null }

@WebSocketMessage
public String echo(String message)

{ return "ECHO: " + message + " and CDI injected bean was "+sampleBean; // sampleBean is still null }

}

So far, CDI (or the WELD implementation) does not appear to inject any
type of bean, including Application Scoped beans, in to an Endpoint.
Is this a limitation of the current Tyrus reference implementation? Or
is it part of the Web Socket spec?

In fact, I never see SampleBean being initialised at all in the
console output. Strange.

Running the same code with a Servlet instead of a WebSocketEndPoint is successfully.

I also attempted injecting a @Singleton @Startup EJB instance into the WebSocket that also failed



 Comments   
Comment by peter_pilgrim [ 22/Feb/13 ]

PS: Programmatic JNDI look-up does work with EJB. The Tyrus implementation is missing the appropriate hooks in to CDI and EJB containers for post initialisation of the endpoints.

Comment by Pavel Bucek [ 22/Feb/13 ]

can you please retry with newer glassfish version? please make sure it contains latest stable Tyrus (1.0-b11)

unzip -p ./glassfish4/glassfish/modules/tyrus-core.jar META-INF/MANIFEST.MF | grep ^Bundle-Version

Comment by peter_pilgrim [ 24/Feb/13 ]

I tried with the sample code against the latest GlassFish 4.0 b77
I am getting know a different error.

javax.websocket.DeploymentException: Class javax.websocket.server.DefaultServerConfiguration couldn't be instantiated

The Tyrus container is failing and preventing the webapp being deployed.

Comment by Pavel Bucek [ 24/Feb/13 ]

looks like you might have similar problem as described in http://java.net/jira/browse/TYRUS-102

can you confirm tyrus version as I requested in previous comment? Also can you please make sure that you don't include any related API jar in your war file?

Comment by peter_pilgrim [ 25/Feb/13 ]

You were correct. I had to exclude the Java EE API from the WAR file, for example Gradle

dependencies

{ providedCompile 'org.glassfish.main.extras:glassfish-embedded-all:4.0-b77' providedCompile 'javax:javaee-api:7.0-b77' ... }

I checked that b77 of GlassFish embedded server JAR. Indeed, it does refer to Tyrus 1.0-b11

META-INF/org.glassfish.tyrus.tyrus-client/pom.properties
#Generated by org.apache.felix.bundleplugin
#Tue Feb 12 22:34:00 UTC 2013
version=1.0-b11
groupId=org.glassfish.tyrus
artifactId=tyrus-core

I can confirmed CDI injection is working at last.

Now here is the thing. EJB injection does not work at all. Is it suppose to in the WebSocket specification?

Here is a sample endpoint

@WebSocketEndpoint("/singleton")
public class SingletonEJBWebSocketEndpoint {

@EJB
private SampleSingleton sampleSingleton;

@WebSocketOpen
public void open(Session session) {
System.out.printf("%s.open() called session=%s\n", getClass().getSimpleName(), session );

// This is a work around
System.out.printf(" sampleSingleton = %s BEFORE\n", sampleSingleton );
if ( sampleSingleton == null) {
// Look up the object
Context initialContext = null;
try

{ initialContext = new InitialContext(); Object obj = initialContext.lookup("java:global/mywebapp/SampleSingleton"); System.out.printf(" obj=%s\n", obj); sampleSingleton = (SampleSingleton)obj; }

catch (NamingException e)

{ e.printStackTrace(); }

}
System.out.printf(" sampleSingleton = %s AFTER\n", sampleSingleton );
}

@WebSocketClose
public void close(Session session)

{ System.out.printf("%s.close() called session=%s\n", getClass().getSimpleName(), session); System.out.printf(" sampleSingleton = %s\n", sampleSingleton ); }

@WebSocketMessage
public String generateReply( String message )

{ return String.format("%s - name: %s, counter: %d, message:%s", new Date(), sampleSingleton.getFullName(), sampleSingleton.count(), message.toUpperCase()); }

}

The singleton EJB is:

package je7hb.websocket.basic;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import java.util.concurrent.atomic.AtomicInteger;

@Singleton
@Startup
public class SampleSingleton {
private AtomicInteger counter = new AtomicInteger(5000);
@PostConstruct
public void init()

{ System.out.printf(">>>> %s.init() called\n", getClass().getSimpleName()); }

@PreDestroy
public void destroy()

{ System.out.printf(">>>> %s.destroy() called\n", getClass().getSimpleName()); }

public int count()

{ return counter.getAndAdd(2); }

public String getFullName()

{ return "Peter Pilgrim"; }

}

The output for the standard console is thus:

NFO: mywebapp was successfully deployed in 2,083 milliseconds.

        • Press the ENTER key to stop the server ****
          No valid EE environment for injection of je7hb.websocket.basic.SingletonEJBWebSocketEndpoint
          SingletonEJBWebSocketEndpoint.open() called session=Session(1280588945, true)
          sampleSingleton = null BEFORE
          obj=je7hb.websocket.basic.SampleSingleton@41849a6a
          sampleSingleton = je7hb.websocket.basic.SampleSingleton@41849a6a AFTER
          SingletonEJBWebSocketEndpoint.close() called session=Session(1280588945, true)
          sampleSingleton = je7hb.websocket.basic.SampleSingleton@41849a6a
          > Building > :run

The EJB should inject especially if it is running in the same JVM. For Servlets I check that EJB can inject as well.

@WebServlet("/fake")
public class FakeServlet extends HttpServlet

{ @EJB SampleSingleton sampleSingleton; ... }
Comment by stepan.kopriva [ 05/Mar/13 ]

According to specificitaion: "Websocket endpoints running in the Java EE platform must have full dependency injection support as described in the CDI specification [8]. [WSC-7.1.1-1] Websocket implementations part of the Java EE platform are required to support field, method, and constructor injection using the javax.inject.Inject annotation into all web socket endpoint classes, as well as the use of interceptors for these classes".

We do currently also support EJB annotations on endpoint, so your endpoint could look like this:

@ServerEndpoint(value = "/stateful")
@Stateful
public class StatefulBean {

int counter = 0;
private boolean postConstructCalled = false;

@OnMessage
public String echo(String message)

{ return postConstructCalled ? String.format("%s%s", message, counter++) : "PostConstruct not called."; }

@PostConstruct
public void postConstruct()

{ postConstructCalled = true; }

}

To inject the EJB to an endpoint please use the @Inject annotation.





[TYRUS-107] IlegalStateException logged in server log when CDI interceptor is deployed on GF Created: 25/Feb/13  Updated: 16/Jun/16  Resolved: 20/Mar/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: 1.0-b11
Fix Version/s: 1.0

Type: Bug Priority: Minor
Reporter: stepan.kopriva Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Related
is related to GLASSFISH-19961 ServletContext#addFilter(String, Filt... Resolved

 Description   

Deployed a POJO endpoint as defined at:

@WebSocketEndpoint(value="/websocket-cdi")
@Logging
public class MyEndpointWithCDI {

@Inject MyBean bean;

@WebSocketMessage
public String sayHello(String name)

{ return bean.sayHello(name); }

}

@Logging is a standard CDI interceptor with @AroundInvoke and MyBean is a POJO. Deploying this application throws the following exception:

INFO: Closing down : org.glassfish.tyrus.server.TyrusEndpoint@361cb3dd
INFO: Closing down : org.glassfish.tyrus.server.TyrusEndpoint@23a18c70
SEVERE: Exception during invocation of InjectionManager.destroyManagedObject on org.glassfish.tyrus.servlet.TyrusServletFilter@2add39c5 of web module StandardEngine[glassfish-web].StandardHost[server].StandardContext[/injection]
java.lang.IllegalStateException: Unknown JCDI-enabled managed bean org.glassfish.tyrus.servlet.TyrusServletFilter@2add39c5 of class class org.glassfish.tyrus.servlet.TyrusServletFilter
at com.sun.enterprise.container.common.impl.managedbean.ManagedBeanManagerImpl.destroyManagedBean(ManagedBeanManagerImpl.java:622)
at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.destroyManagedObject(InjectionManagerImpl.java:439)
at com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.destroyManagedObject(InjectionManagerImpl.java:414)
at com.sun.web.server.WebContainerListener.preDestroy(WebContainerListener.java:186)
at com.sun.web.server.WebContainerListener.containerEvent(WebContainerListener.java:151)
at org.apache.catalina.core.ContainerBase.fireContainerEvent(ContainerBase.java:1579)
at org.apache.catalina.core.ApplicationFilterConfig.release(ApplicationFilterConfig.java:334)
at org.apache.catalina.core.StandardContext.filterStop(StandardContext.java:5322)
at org.apache.catalina.core.StandardContext.stop(StandardContext.java:6085)

Invoking the endpoint throws the following message in server.log:

SEVERE: No valid EE environment for injection of org.glassfish.injection.MyEndpointWithCDI
SEVERE: No valid EE environment for injection of org.glassfish.injection.MyBean

However the communication between client and endpoint works as expected.



 Comments   
Comment by arungupta [ 25/Feb/13 ]

Thanks Stepan for filing the issue.

Comment by arungupta [ 28/Feb/13 ]

Tried with b78, even though the following warning messages are still shown:

SEVERE: No valid EE environment for injection of org.glassfish.tyrus.core.NoOpTextCoder
SEVERE: No valid EE environment for injection of org.glassfish.tyrus.core.ReaderDecoder
SEVERE: No valid EE environment for injection of org.glassfish.injection.MyEndpointWithEJB
WARNING: Method destroy defined on class com.sun.ejb.containers.interceptors.SystemInterceptorProxy will not be used for interception, since it is not defined according to the specification. It is annotated with @javax.annotation.PreDestroy, but is defined on the target class and does not have 0 arguments
WARNING: WELD-001450 Interceptor method public java.lang.Object com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundTimeout(javax.interceptor.InvocationContext) throws java.lang.Throwable does not declare that it throws Exception.
WARNING: WELD-001450 Interceptor method public java.lang.Object com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(javax.interceptor.InvocationContext) throws java.lang.Throwable does not declare that it throws Exception.
WARNING: Method init defined on class com.sun.ejb.containers.interceptors.SystemInterceptorProxy will not be used for interception, since it is not defined according to the specification. It is annotated with @javax.annotation.PostConstruct, but is defined on the target class and does not have 0 arguments
WARNING: Method destroy defined on class com.sun.ejb.containers.interceptors.SystemInterceptorProxy will not be used for interception, since it is not defined according to the specification. It is annotated with @javax.annotation.PreDestroy, but is defined on the target class and does not have 0 arguments
WARNING: WELD-001450 Interceptor method public java.lang.Object com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundTimeout(javax.interceptor.InvocationContext) throws java.lang.Throwable does not declare that it throws Exception.
WARNING: WELD-001450 Interceptor method public java.lang.Object com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(javax.interceptor.InvocationContext) throws java.lang.Throwable does not declare that it throws Exception.
WARNING: Method init defined on class com.sun.ejb.containers.interceptors.SystemInterceptorProxy will not be used for interception, since it is not defined according to the specification. It is annotated with @javax.annotation.PostConstruct, but is defined on the target class and does not have 0 arguments
SEVERE: No valid EE environment for injection of org.glassfish.tyrus.core.NoOpTextCoder
SEVERE: No valid EE environment for injection of org.glassfish.tyrus.core.ReaderDecoder
SEVERE: No valid EE environment for injection of org.glassfish.injection.MyEndpointWithCDI
SEVERE: No valid EE environment for injection of org.glassfish.injection.MyBean

But the injection and invocation of injected beans is working.

Comment by stepan.kopriva [ 20/Mar/13 ]

Fixed. TyrusServletFilter is now created via ServletContext#createFilter.

The general problem is being tracked under http://java.net/jira/browse/GLASSFISH-19961





[TYRUS-110] @OnMessage with arguments (byte[], boolean), or (ByteBuffer, boolean) does return any value Created: 27/Feb/13  Updated: 16/Jun/16  Resolved: 01/Mar/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: 1.0-b13
Fix Version/s: 1.0

Type: Bug Priority: Critical
Reporter: jan.supol Assignee: Pavel Bucek
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Description   

WebSocketMessage javadoc says:

The allowed parameters are:
byte[] and boolean pair, or ByteBuffer and boolean pair to receive the message in parts
and an optional Session parameter.

the following method:

	@OnMessage
	public String bytesToString(byte[] array, boolean finito) {
		return new String(array);
	}

or

	@OnMessage
	public String echo(ByteBuffer buf, boolean bol) {
		return new String(buf.array());
	}

does not return any value, although javadoc permits it. This is a binary variant of TYRUS-105



 Comments   
Comment by Pavel Bucek [ 01/Mar/13 ]

already fixed as part of TYRUS-105.

commit relevant to this issue just adds more tests.





[TYRUS-111] @OnMessage with arguments (byte[], Session, boolean) does return any value Created: 27/Feb/13  Updated: 16/Jun/16  Resolved: 05/Mar/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: 1.0-b13
Fix Version/s: 1.0

Type: Bug Priority: Critical
Reporter: jan.supol Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Description   

The following endpoint:

@ServerEndpoint(value = "/partialbytearraysession")
public class WSByteArrayPartialAndSessionServer {

	StringBuffer sb = new StringBuffer();
	
	@OnMessage
	public void bytesToString(byte[] array, Session s, boolean finito) throws IOException {
		sb.append(new String(array)).append("(").append(finito).append(")");
		if (finito){
			s.getBasicRemote().sendText(sb.toString());
			sb = new StringBuffer();
		}
	}
}	

does not respond to

 RemoteEndpoint.Basic.sendBinary( ByteBuffer.wrap("first".getBytes()) , false)
 RemoteEndpoint.Basic.sendBinary( ByteBuffer.wrap("second".getBytes()) , true)

In the gf log, there is:

[#|2013-02-27T19:07:15.349+0100|SEVERE|glassfish 4.0|org.glassfish.tyrus.core.SessionImpl|_ThreadID=86;_ThreadName=http-listener-1(3);_TimeMillis=1361988435349;_LevelValue=1000;|Unhandled text message in EndpointWrapper|#]

It seems there is some binary vs. text message confusion



 Comments   
Comment by stepan.kopriva [ 05/Mar/13 ]

Solved with switching to WebSocket SPEC API v14





[TYRUS-116] Implement proper handling of Reader and InputStream (as params of @OnMessage) Created: 01/Mar/13  Updated: 16/Jun/16  Resolved: 12/Mar/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0

Type: Bug Priority: Critical
Reporter: Pavel Bucek Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Dependency
blocks TYRUS-50 BlockingBinaryTest receiving chunks o... Resolved
Duplicate
is duplicated by TYRUS-43 MessageHandler.CharacterStream onMess... Resolved
Related
is related to TYRUS-114 Implement caching of partial messages... Resolved




[TYRUS-119] Validation algorithm for registering MessageHandlers (also applied to check validity of @OnMessage in annotated cases) does not work as specified in WebSocket API 13 Created: 01/Mar/13  Updated: 16/Jun/16  Resolved: 04/Mar/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0

Type: Bug Priority: Major
Reporter: stepan.kopriva Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Comments   
Comment by stepan.kopriva [ 04/Mar/13 ]

Validation algorithm complies to spec v 13





[TYRUS-147] Falling lifecycle test on Internet Explorer Created: 20/Mar/13  Updated: 16/Jun/16  Resolved: 20/Mar/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0

Type: Bug Priority: Major
Reporter: stepan.kopriva Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Comments   
Comment by stepan.kopriva [ 20/Mar/13 ]

Fixed. The problem was in the test javascript code.





[TYRUS-151] Getting java.nio.BufferUnderflowException or sometimes NPE in InputStream onMessage() communication Created: 20/Mar/13  Updated: 16/Jun/16  Resolved: 21/Mar/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0

Type: Bug Priority: Major
Reporter: mikc22 Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Description   

The following test:

mvn -Dtest=LifeCycleAnnotatedObjectInputStreamTest clean install

is sometimes causing this exception to happen or alternatively NPE thrown @org.glassfish.tyrus.core.InputStreamBuffer.getNextByte(InputStreamBuffer.java:99)

java.nio.BufferUnderflowException
at java.nio.Buffer.nextGetIndex(Buffer.java:492)
at java.nio.HeapByteBuffer.get(HeapByteBuffer.java:135)
at org.glassfish.tyrus.core.InputStreamBuffer.getNextByte(InputStreamBuffer.java:99)
at org.glassfish.tyrus.core.BufferedInputStream.read(BufferedInputStream.java:65)
at java.io.InputStream.read(InputStream.java:179)
at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2283)
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2296)
at java.io.ObjectInputStream$BlockDataInputStream.readUTFBody(ObjectInputStream.java:3036)
at java.io.ObjectInputStream$BlockDataInputStream.readUTF(ObjectInputStream.java:2837)
at java.io.ObjectInputStream.readString(ObjectInputStream.java:1617)
at java.io.ObjectInputStream.readTypeString(ObjectInputStream.java:1419)
at java.io.ObjectStreamClass.readNonProxy(ObjectStreamClass.java:692)
at java.io.ObjectInputStream.readClassDescriptor(ObjectInputStream.java:827)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1583)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1514)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1750)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
at org.glassfish.tyrus.tests.qa.lifecycle.handlers.ObjectInputStreamSessionImpl.onServerMessageHandler(ObjectInputStreamSessionImpl.java:94)
at org.glassfish.tyrus.tests.qa.lifecycle.handlers.ObjectInputStreamSessionImpl.onServerMessageHandler(ObjectInputStreamSessionImpl.java:58)
at org.glassfish.tyrus.tests.qa.lifecycle.SessionLifeCycle.onServerMessage(SessionLifeCycle.java:143)
at org.glassfish.tyrus.tests.qa.lifecycle.handlers.binary.AnnotatedWholeMessageObjectInputStreamSession$Server.onMessage(AnnotatedWholeMessageObjectInputStreamSession.java:85)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.glassfish.tyrus.core.AnnotatedEndpoint.callMethod(AnnotatedEndpoint.java:431)
at org.glassfish.tyrus.core.AnnotatedEndpoint.access$100(AnnotatedEndpoint.java:83)
at org.glassfish.tyrus.core.AnnotatedEndpoint$WholeHandler$1.onMessage(AnnotatedEndpoint.java:518)
at org.glassfish.tyrus.core.InputStreamBuffer$1.run(InputStreamBuffer.java:134)
Mar 20, 2013 7:30:21 PM org.glassfish.tyrus.tests.qa.lifecycle.SessionLifeCycle onServerMessage
SEVERE: null
java.nio.BufferUnderflowException
at java.nio.Buffer.nextGetIndex(Buffer.java:492)
at java.nio.HeapByteBuffer.get(HeapByteBuffer.java:135)
at org.glassfish.tyrus.core.InputStreamBuffer.getNextByte(InputStreamBuffer.java:99)
at org.glassfish.tyrus.core.BufferedInputStream.read(BufferedInputStream.java:65)
at java.io.InputStream.read(InputStream.java:179)
at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2283)
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2296)
at java.io.ObjectInputStream$BlockDataInputStream.readUTFBody(ObjectInputStream.java:3036)
at java.io.ObjectInputStream$BlockDataInputStream.readUTF(ObjectInputStream.java:2837)
at java.io.ObjectInputStream.readString(ObjectInputStream.java:1617)
at java.io.ObjectInputStream.readTypeString(ObjectInputStream.java:1419)
at java.io.ObjectStreamClass.readNonProxy(ObjectStreamClass.java:692)
at java.io.ObjectInputStream.readClassDescriptor(ObjectInputStream.java:827)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1583)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1514)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1750)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
at org.glassfish.tyrus.tests.qa.lifecycle.handlers.ObjectInputStreamSessionImpl.onServerMessageHandler(ObjectInputStreamSessionImpl.java:94)
at org.glassfish.tyrus.tests.qa.lifecycle.handlers.ObjectInputStreamSessionImpl.onServerMessageHandler(ObjectInputStreamSessionImpl.java:58)
at org.glassfish.tyrus.tests.qa.lifecycle.SessionLifeCycle.onServerMessage(SessionLifeCycle.java:143)
at org.glassfish.tyrus.tests.qa.lifecycle.handlers.binary.AnnotatedWholeMessageObjectInputStreamSession$Server.onMessage(AnnotatedWholeMessageObjectInputStreamSession.java:85)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.glassfish.tyrus.core.AnnotatedEndpoint.callMethod(AnnotatedEndpoint.java:431)
at org.glassfish.tyrus.core.AnnotatedEndpoint.access$100(AnnotatedEndpoint.java:83)
at org.glassfish.tyrus.core.AnnotatedEndpoint$WholeHandler$1.onMessage(AnnotatedEndpoint.java:518)
at org.glassfish.tyrus.core.InputStreamBuffer$1.run(InputStreamBuffer.java:134)



 Comments   
Comment by stepan.kopriva [ 21/Mar/13 ]

Fixed by synchronizing InputStreamBuffer





Implement all setable timeouts (TYRUS-130)

[TYRUS-139] Implement timeout on Session Created: 14/Mar/13  Updated: 16/Jun/16  Resolved: 18/Mar/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0

Type: Sub-task Priority: Major
Reporter: stepan.kopriva Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified





[TYRUS-64] Get rid of @ApplicationConfig once http://java.net/jira/browse/GLASSFISH-19551 is solved Created: 18/Jan/13  Updated: 16/Jun/16  Resolved: 09/Feb/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0

Type: Task Priority: Major
Reporter: stepan.kopriva Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Dependency
depends on GLASSFISH-19551 ServletContainerInitializer#onStartup... Resolved




[TYRUS-174] Create documentation for samples (in readme) Created: 22/Apr/13  Updated: 16/Jun/16  Resolved: 22/Apr/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0

Type: Task Priority: Major
Reporter: stepan.kopriva Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified





[TYRUS-13] No error report reported if subprotocol not supported Created: 16/Oct/12  Updated: 08/Aug/13  Resolved: 07/Feb/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0

Type: Bug Priority: Major
Reporter: arungupta Assignee: Pavel Bucek
Resolution: Invalid Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Description   

An endpoint is created as:

@WebSocketEndpoint(path="/endpoint", subprotocols="myProtocol")

and the client initiates the connection as

var websocket = new WebSocket(wsUri, "myProtocol2");

The WebSocket on the client is correctly not initialized. But no error is thrown on the server-side to indicate what went wrong.

The app is deployed on GlassFish build 57.



 Comments   
Comment by Pavel Bucek [ 07/Feb/13 ]

from websocket rfc:

   Additional header fields are used to select options in the WebSocket
   Protocol.  Typical options available in this version are the
   subprotocol selector (|Sec-WebSocket-Protocol|), list of extensions
   support by the client (|Sec-WebSocket-Extensions|), |Origin| header
   field, etc.  The |Sec-WebSocket-Protocol| request-header field can be
   used to indicate what subprotocols (application-level protocols
   layered over the WebSocket Protocol) are acceptable to the client.
   *****The server selects one or none***** of the acceptable protocols and echoes
   that value in its handshake to indicate that it has selected that
   protocol.

you can intercept response headers (see ClientEndpointConfiguration#afterResponse(HandshakeResponse hr)).

No error needs to be reported, closing as invalid.





[TYRUS-128] Please provide a way how to set the extension list Created: 11/Mar/13  Updated: 11/Jul/13  Resolved: 11/Jul/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: 1.0-b13
Fix Version/s: 1.0

Type: Bug Priority: Major
Reporter: mikc22 Assignee: Pavel Bucek
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Description   

Currently there's no way in Tyrus how to set the extension list, please provide a way how to do this in 1) GlassFish 2) Tyrus



 Comments   
Comment by Pavel Bucek [ 11/Jul/13 ]

you need to implement https://tyrus.java.net/apidocs/1.0/javax/websocket/server/ServerEndpointConfig.html#getExtensions()





[TYRUS-68] Possibility to deploy Endpoint instances Created: 21/Jan/13  Updated: 19/Jun/13  Resolved: 19/Jun/13

Status: Closed
Project: tyrus
Component/s: None
Affects Version/s: 1.0-b10
Fix Version/s: 1.0

Type: Task Priority: Minor
Reporter: boereck Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Description   

As of version 1.0-b09 it is not possible anymore to pass Endpoint instances to DefaultServerConfiguration objects. This makes it impossible to pass Endpoint instances to a server. Currently it is only possible to provide the server with Endpoint classes which then get instantiated by the server. This is problematic in situations where Endpoints need to be configured before being deployed.
If it is not intended to pass Endpoint instances to the ServerConfiguration, the user should be able to register objects that take care of Endpoint instantiation or configuration after instantiation by the server.



 Comments   
Comment by stepan.kopriva [ 19/Jun/13 ]

Server currenty allows to be created with configuration, which extends javax.websocket.server.ServerEndpointConfig. In the method ServerEndpointConfig$Configurator#getEndpointInstance(Class<T> endpointClass) throws InstantiationException the user may affect the endpoint instance creation.





[TYRUS-50] BlockingBinaryTest receiving chunks out of order Created: 26/Oct/12  Updated: 18/Mar/13  Resolved: 18/Mar/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b14, 1.0

Type: Bug Priority: Major
Reporter: Martin Matula Assignee: Pavel Bucek
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Dependency
depends on TYRUS-116 Implement proper handling of Reader a... Resolved

 Description   

I had to ignore this test since it is receiving chunks of message parts in a different order than they were sent - this is because AsyncBinaryToOutputStreamAdapter spawns a new thread for each message part so the order is not guaranteed. For now I have added @Ignore to the test.



 Comments   
Comment by dannycoward [ 30/Oct/12 ]

I can't reproduce this in my own workspace, but will look into it further now I have the Hudson builds.

I've corrected the number of threads issue. Now exactly one is spawned. I suspect this only occurs when the server calls back the client on the same callback thread it resulting from a client call.

The same issue will hold for the BlockingTextStream and PingPong tests too.

Comment by Pavel Bucek [ 08/Mar/13 ]

obsolete; test needs to be updated & un@Ignored

Comment by Pavel Bucek [ 18/Mar/13 ]

already fixed





[TYRUS-43] MessageHandler.CharacterStream onMessage method called for every received partial string Created: 23/Oct/12  Updated: 08/Mar/13  Resolved: 08/Mar/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b13, 1.0

Type: Bug Priority: Critical
Reporter: Martin Matula Assignee: Pavel Bucek
Resolution: Duplicate Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Dependency
depends on TYRUS-82 Reader support Resolved
Duplicate
duplicates TYRUS-116 Implement proper handling of Reader a... Resolved

 Description   

see BlockingStreamingTextTest - it is currently ignored, as it breaks due to this bug.

The client sends partial strings, and on the server side, it seems that for every partial string received, a new call to onMessage() method is made. I believe this is wrong (flawed) as the CharacterStream.onMessage() method has no means to determine when the last part of the string came - so IMO should receive the full string (i.e. keep receiving string parts until the last is received) rather than invoking new handler for every part.

Once this bug is fixed, the @Ignore annotation should be removed from the test so that it runs as part of the build.



 Comments   
Comment by dannycoward [ 26/Oct/12 ]

The endpointwrapper was creating a new blocking adapter for each partial message. Now this is fixed.

The same issue held for blocking binary data, which the fix for this also fixes.

I am holding off closing this issue until I've seen it work in hudson. Its working great in local and workspace tests.

Comment by Pavel Bucek [ 05/Feb/13 ]

still not resolved in trunk.





[TYRUS-9] Servlet integration Created: 11/Oct/12  Updated: 08/Mar/13  Resolved: 08/Mar/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b13, 1.0

Type: New Feature Priority: Blocker
Reporter: Martin Matula Assignee: Pavel Bucek
Resolution: Fixed Votes: 0
Labels: None
Σ Remaining Estimate: Not Specified Remaining Estimate: Not Specified
Σ Time Spent: Not Specified Time Spent: Not Specified
Σ Original Estimate: Not Specified Original Estimate: Not Specified

Sub-Tasks:
Key
Summary
Type
Status
Assignee
TYRUS-40 Verify ability to touch HTTP session ... Sub-task Resolved jitu  
TYRUS-41 Verify the security model Sub-task Resolved jitu  

 Comments   
Comment by Pavel Bucek [ 08/Mar/13 ]

already done (version 1.0-b09 or something like that).





Servlet integration (TYRUS-9)

[TYRUS-41] Verify the security model Created: 17/Oct/12  Updated: 08/Mar/13  Resolved: 08/Mar/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b13, 1.0

Type: Sub-task Priority: Blocker
Reporter: Martin Matula Assignee: jitu
Resolution: Invalid Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Comments   
Comment by Pavel Bucek [ 08/Mar/13 ]

obsolete





Servlet integration (TYRUS-9)

[TYRUS-40] Verify ability to touch HTTP session (to make sure it does not expire - to keep it alive) Created: 17/Oct/12  Updated: 08/Mar/13  Resolved: 08/Mar/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b13, 1.0

Type: Sub-task Priority: Blocker
Reporter: Martin Matula Assignee: jitu
Resolution: Invalid Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Comments   
Comment by Pavel Bucek [ 08/Mar/13 ]

obsolete





[TYRUS-51] Encoding binary return types is throwing EncodeException Created: 10/Nov/12  Updated: 20/Feb/13  Resolved: 20/Feb/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b12, 1.0

Type: Bug Priority: Major
Reporter: arungupta Assignee: Pavel Bucek
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Description   

I have an annotation-driven endpoint with the following method:

    @WebSocketMessage
    public ByteBuffer echoBinary(ByteBuffer data) {
        System.out.println("echoBinary: " + data);
        for (byte b : data.array()) {
            System.out.print(b);
        }
        return data;
    }

The JavaScript sends binary data as:

function echoBinary() {
                var buffer = new ArrayBuffer(myField2.value.length);
                var bytes = new Uint8Array(buffer);
                for (var i=0; i<bytes.length; i++) {
                    bytes[i] = i;
                }
                websocket.send(buffer);
                writeToScreen("SENT (binary): " + buffer.byteLength + " bytes");
            }

The inbound payload in the POJO method is decoded and displayed correctly. But sending a response back throws the following exception:

SEVERE: java.lang.RuntimeException: Error trying to send the response.
	at org.glassfish.tyrus.AnnotatedEndpoint$Binary$1.onMessage(AnnotatedEndpoint.java:364)
	at org.glassfish.tyrus.SessionImpl.notifyMessageHandlers(SessionImpl.java:315)
	at org.glassfish.tyrus.EndpointWrapper.onMessage(EndpointWrapper.java:312)
	at org.glassfish.tyrus.grizzly.GrizzlyEndpoint.onMessage(GrizzlyEndpoint.java:139)
	at org.glassfish.grizzly.websockets.DefaultWebSocket.onMessage(DefaultWebSocket.java:157)
	at org.glassfish.grizzly.websockets.frametypes.BinaryFrameType.respond(BinaryFrameType.java:52)
	at org.glassfish.grizzly.websockets.DataFrame.respond(DataFrame.java:104)
	at org.glassfish.grizzly.websockets.WebSocketFilter.handleRead(WebSocketFilter.java:221)
	at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:265)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:134)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
	at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
	at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:781)
	at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)
	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:578)
	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:558)
	at java.lang.Thread.run(Thread.java:722)
Caused by: javax.net.websocket.EncodeException: Unable to encode 
	at org.glassfish.tyrus.EndpointWrapper.doEncode(EndpointWrapper.java:266)
	at org.glassfish.tyrus.RemoteEndpointWrapper.sendPolymorphic(RemoteEndpointWrapper.java:173)
	at org.glassfish.tyrus.RemoteEndpointWrapper.sendObject(RemoteEndpointWrapper.java:114)
	at org.glassfish.tyrus.AnnotatedEndpoint$Binary$1.onMessage(AnnotatedEndpoint.java:362)
	... 21 more

If the POJO implementation is changed to:

    @WebSocketMessage
    public void echoBinary(ByteBuffer data, Session session) throws IOException {
        System.out.println("echoBinary: " + data);
        for (byte b : data.array()) {
            System.out.print(b);
        }
        session.getRemote().sendBytes(data);
    }

the a response is received on the client as a Blob.



 Comments   
Comment by Pavel Bucek [ 20/Feb/13 ]

cannot reproduce.

feel free to reopen with reproducible testcase.





[TYRUS-27] EJB integration Created: 17/Oct/12  Updated: 05/Feb/13  Resolved: 05/Feb/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b11, 1.0

Type: New Feature Priority: Blocker
Reporter: Martin Matula Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Σ Remaining Estimate: Not Specified Remaining Estimate: Not Specified
Σ Time Spent: Not Specified Time Spent: Not Specified
Σ Original Estimate: Not Specified Original Estimate: Not Specified

Sub-Tasks:
Key
Summary
Type
Status
Assignee
TYRUS-30 Investigate the EJB integration (look... Sub-task Resolved stepan.kopriva  
TYRUS-31 Implementation Sub-task Resolved  




EJB integration (TYRUS-27)

[TYRUS-31] Implementation Created: 17/Oct/12  Updated: 05/Feb/13  Resolved: 05/Feb/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b11, 1.0

Type: Sub-task Priority: Blocker
Reporter: Martin Matula Assignee: Unassigned
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified





[TYRUS-26] CDI integration Created: 17/Oct/12  Updated: 05/Feb/13  Resolved: 05/Feb/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b11, 1.0

Type: New Feature Priority: Blocker
Reporter: Martin Matula Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Σ Remaining Estimate: Not Specified Remaining Estimate: Not Specified
Σ Time Spent: Not Specified Time Spent: Not Specified
Σ Original Estimate: Not Specified Original Estimate: Not Specified

Sub-Tasks:
Key
Summary
Type
Status
Assignee
TYRUS-28 Use CDI extension mechanism to enable... Sub-task Resolved stepan.kopriva  
TYRUS-29 Enable injection of types defined by ... Sub-task Resolved stepan.kopriva  




CDI integration (TYRUS-26)

[TYRUS-29] Enable injection of types defined by the spec (Session, ServerContainer, websocket endpoints?, etc.) using CDI. Created: 17/Oct/12  Updated: 05/Feb/13  Resolved: 04/Feb/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b11, 1.0

Type: Sub-task Priority: Blocker
Reporter: Martin Matula Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified





[TYRUS-42] Method not invoked if String and byte[] payloads are used as parameters Created: 18/Oct/12  Updated: 03/Feb/13  Resolved: 03/Feb/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b11, 1.0

Type: Bug Priority: Major
Reporter: arungupta Assignee: Pavel Bucek
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Description   

Endpoint implementation looks like:

@WebSocketEndpoint(path="/hello")
public class HelloBean {

@WebSocketMessage
public String sayHello(String name)

{ return "Hello " + name + "!"; }

@WebSocketMessage
public byte[] sayHello2(byte[] data)

{ return data; }

}

The application is deployed in GlassFish 4 build 57. A JavaScript client invoking sayHello works fine for the first time. But subsequent invocations does not dispatch the request to any method in the endpoint. And, as expected, no response is returned back. If the "sayHello2" method is commented then everything works as expected.



 Comments   
Comment by Pavel Bucek [ 01/Feb/13 ]

String/test messages are working as expected

binary messages work when ByteBuffer is used; byte[] needs to be fixed.





[TYRUS-36] Implement correct lifecycle of endpoints, encoders, decoders Created: 17/Oct/12  Updated: 01/Feb/13  Resolved: 01/Feb/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b11, 1.0

Type: New Feature Priority: Blocker
Reporter: Martin Matula Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Description   

Endpoint:

  • singleton

Encoder/Decoder:

  • per endpoint





EJB integration (TYRUS-27)

[TYRUS-30] Investigate the EJB integration (look at how Jersey does it) Created: 17/Oct/12  Updated: 01/Feb/13  Resolved: 01/Feb/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b11, 1.0

Type: Sub-task Priority: Blocker
Reporter: Martin Matula Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified





CDI integration (TYRUS-26)

[TYRUS-28] Use CDI extension mechanism to enable injection of CDI-managed beans to web socket endpoints Created: 17/Oct/12  Updated: 01/Feb/13  Resolved: 01/Feb/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b11, 1.0

Type: Sub-task Priority: Blocker
Reporter: Martin Matula Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified





[TYRUS-4] Modularize the workspace, make sure each module has proper OSGi metadata Created: 11/Oct/12  Updated: 01/Feb/13  Resolved: 01/Feb/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b09, 1.0

Type: New Feature Priority: Blocker
Reporter: Martin Matula Assignee: Pavel Bucek
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified





[TYRUS-38] Add end to end tests module (maven) and set up hudson job to run it Created: 17/Oct/12  Updated: 18/Jan/13  Resolved: 18/Jan/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b09, 1.0

Type: New Feature Priority: Blocker
Reporter: Martin Matula Assignee: Pavel Bucek
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified





[TYRUS-33] Container SPI - common container layer + servlet and grizzly impl. Created: 17/Oct/12  Updated: 18/Jan/13  Resolved: 18/Jan/13

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b09, 1.0

Type: New Feature Priority: Blocker
Reporter: Martin Matula Assignee: Pavel Bucek
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified





[TYRUS-39] Proper implementation of the handshake on the client side Created: 17/Oct/12  Updated: 17/Dec/12  Resolved: 17/Dec/12

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.x-backlog, 1.0

Type: New Feature Priority: Blocker
Reporter: Martin Matula Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified





[TYRUS-34] Annotation-based client Created: 17/Oct/12  Updated: 10/Dec/12  Resolved: 10/Dec/12

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.x-backlog, 1.0

Type: New Feature Priority: Critical
Reporter: Martin Matula Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified





[TYRUS-54] Get rid of dependency on grizzly-websocket module - take that code into tyrus and add another layer which can depend on grizzly - prepare for servlet 3.1 integration Created: 10/Dec/12  Updated: 10/Dec/12  Resolved: 10/Dec/12

Status: Closed
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b09, 1.0

Type: New Feature Priority: Blocker
Reporter: Pavel Bucek Assignee: Pavel Bucek
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified





[TYRUS-25] Implement FrameHandler. Created: 17/Oct/12  Updated: 12/Nov/12  Resolved: 12/Nov/12

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b08, 1.0

Type: New Feature Priority: Major
Reporter: stepan.kopriva Assignee: Unassigned
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified





[TYRUS-24] Implement FrameBuilder Interface. Created: 17/Oct/12  Updated: 12/Nov/12  Resolved: 12/Nov/12

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b08, 1.0

Type: New Feature Priority: Major
Reporter: stepan.kopriva Assignee: Unassigned
Resolution: Won't Fix Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified





[TYRUS-23] Implement Frame Interface. Created: 17/Oct/12  Updated: 12/Nov/12  Resolved: 12/Nov/12

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b08, 1.0

Type: New Feature Priority: Major
Reporter: stepan.kopriva Assignee: Unassigned
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified





[TYRUS-22] Implement Extension Interface. Created: 17/Oct/12  Updated: 12/Nov/12  Resolved: 12/Nov/12

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b08, 1.0

Type: New Feature Priority: Major
Reporter: stepan.kopriva Assignee: Unassigned
Resolution: Won't Fix Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified





[TYRUS-7] Hudson job for continuous build of the workspace, pushing SNAPSHOT to maven Created: 11/Oct/12  Updated: 12/Nov/12  Resolved: 26/Oct/12

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b08, 1.0

Type: New Feature Priority: Blocker
Reporter: Martin Matula Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified





[TYRUS-44] Binary data not handled correctly by a WebSocket endpoint Created: 23/Oct/12  Updated: 12/Nov/12  Resolved: 30/Oct/12

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b08, 1.0

Type: Bug Priority: Major
Reporter: arungupta Assignee: Unassigned
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Description   

Sending binary data to a WebSocket endpoint as:

function sendBinary() {
blob = new Blob([nameField2.value],

{type: "application/octet-stream"}

);
websocket.send(blob);
writeToScreen("SENT (binary): " + nameField2.value);
}

The method signatures is:

@WebSocketMessage
public byte[] sayHello2(byte[] data)

{ System.out.println("sayHello2"); return data; }

The exception thrown is:

INFO: Request URI: /HelloWebSocket/hello
SEVERE: java.lang.Exception
at org.glassfish.tyrus.platform.EndpointWrapper.processCompleteMessage(EndpointWrapper.java:285)
at org.glassfish.tyrus.platform.EndpointWrapper.onMessage(EndpointWrapper.java:220)
at org.glassfish.tyrus.spi.grizzlyprovider.GrizzlyEndpoint.onMessage(GrizzlyEndpoint.java:89)
at org.glassfish.grizzly.websockets.DefaultWebSocket.onMessage(DefaultWebSocket.java:157)
at org.glassfish.grizzly.websockets.frametypes.BinaryFrameType.respond(BinaryFrameType.java:52)
at org.glassfish.grizzly.websockets.DataFrame.respond(DataFrame.java:104)
at org.glassfish.grizzly.websockets.WebSocketFilter.handleRead(WebSocketFilter.java:221)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:265)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:134)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:781)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:578)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:558)
at java.lang.Thread.run(Thread.java:722)

SEVERE: at org.glassfish.tyrus.platform.EndpointWrapper.processCompleteMessage(EndpointWrapper.java:285)
SEVERE: at org.glassfish.tyrus.platform.EndpointWrapper.onMessage(EndpointWrapper.java:220)
SEVERE: at org.glassfish.tyrus.spi.grizzlyprovider.GrizzlyEndpoint.onMessage(GrizzlyEndpoint.java:89)
SEVERE: at org.glassfish.grizzly.websockets.DefaultWebSocket.onMessage(DefaultWebSocket.java:157)
SEVERE: at org.glassfish.grizzly.websockets.frametypes.BinaryFrameType.respond(BinaryFrameType.java:52)
SEVERE: at org.glassfish.grizzly.websockets.DataFrame.respond(DataFrame.java:104)
SEVERE: at org.glassfish.grizzly.websockets.WebSocketFilter.handleRead(WebSocketFilter.java:221)
SEVERE: at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
SEVERE: at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:265)
SEVERE: at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
SEVERE: at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:134)
SEVERE: at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
SEVERE: at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
SEVERE: at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:781)
SEVERE: at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
SEVERE: at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)
SEVERE: at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55)
SEVERE: at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)
SEVERE: at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:578)
SEVERE: at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:558)
SEVERE: at java.lang.Thread.run(Thread.java:722)
INFO: Grizzly endpoint onClose

This is with b06 integrated in latest GlassFish build.



 Comments   
Comment by dannycoward [ 30/Oct/12 ]

This is fixed in the latest promoted build - happy Blobbing !





[TYRUS-1] Proper implementation of a handshake on the server side Created: 11/Oct/12  Updated: 12/Nov/12  Resolved: 12/Nov/12

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b07, 1.0

Type: New Feature Priority: Blocker
Reporter: Martin Matula Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Σ Remaining Estimate: 0 minutes Remaining Estimate: Not Specified
Σ Time Spent: 9 hours Time Spent: Not Specified
Σ Original Estimate: Not Specified Original Estimate: Not Specified

Sub-Tasks:
Key
Summary
Type
Status
Assignee
TYRUS-10 implement URI matching (exact and tem... Sub-task Resolved Pavel Bucek  
TYRUS-11 implement selection of sub-protocol d... Sub-task Resolved stepan.kopriva  
TYRUS-19 Implement the extension negotiation Sub-task Resolved stepan.kopriva  
TYRUS-20 Implement origin check. Sub-task Resolved stepan.kopriva  




Implement 3 modes of message processing (sync/async/streaming) (TYRUS-2)

[TYRUS-49] Implement binary send of text and binary messages in parts e.g. sendPartialString(String fragment, boolean isLast) Created: 24/Oct/12  Updated: 30/Oct/12  Resolved: 30/Oct/12

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b07, 1.0

Type: Sub-task Priority: Major
Reporter: dannycoward Assignee: dannycoward
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Comments   
Comment by dannycoward [ 30/Oct/12 ]

fixed as part of Tyrus-2.





Implement 3 modes of message processing (sync/async/streaming) (TYRUS-2)

[TYRUS-48] Implement MessageHandler.AsyncText, MessageHandler.AsyncBinary Created: 24/Oct/12  Updated: 30/Oct/12  Resolved: 30/Oct/12

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b07, 1.0

Type: Sub-task Priority: Major
Reporter: dannycoward Assignee: dannycoward
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Comments   
Comment by dannycoward [ 30/Oct/12 ]

fixed as part of Tyrus-2.





Implement 3 modes of message processing (sync/async/streaming) (TYRUS-2)

[TYRUS-18] Implement Pong MessageHandler Created: 17/Oct/12  Updated: 30/Oct/12  Resolved: 30/Oct/12

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b07, 1.0

Type: Sub-task Priority: Blocker
Reporter: stepan.kopriva Assignee: dannycoward
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Comments   
Comment by dannycoward [ 30/Oct/12 ]

fixed as part of Tyrus-2.





Implement 3 modes of message processing (sync/async/streaming) (TYRUS-2)

[TYRUS-17] Implement CharacterStream MessageHandler Created: 17/Oct/12  Updated: 30/Oct/12  Resolved: 30/Oct/12

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b07, 1.0

Type: Sub-task Priority: Blocker
Reporter: stepan.kopriva Assignee: dannycoward
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Comments   
Comment by dannycoward [ 30/Oct/12 ]

fixed as part of Tyrus-2.





Implement 3 modes of message processing (sync/async/streaming) (TYRUS-2)

[TYRUS-16] Implement BinaryStream MessageHandler Created: 17/Oct/12  Updated: 30/Oct/12  Resolved: 30/Oct/12

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b07, 1.0

Type: Sub-task Priority: Blocker
Reporter: stepan.kopriva Assignee: dannycoward
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified





Implement 3 modes of message processing (sync/async/streaming) (TYRUS-2)

[TYRUS-47] Implement async sending of text binary and object messages Created: 24/Oct/12  Updated: 30/Oct/12  Resolved: 30/Oct/12

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b07, 1.0

Type: Sub-task Priority: Major
Reporter: dannycoward Assignee: dannycoward
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Comments   
Comment by dannycoward [ 30/Oct/12 ]

fixed as part of Tyrus-2.





[TYRUS-2] Implement 3 modes of message processing (sync/async/streaming) Created: 11/Oct/12  Updated: 30/Oct/12  Resolved: 30/Oct/12

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b07, 1.0

Type: New Feature Priority: Blocker
Reporter: Martin Matula Assignee: dannycoward
Resolution: Fixed Votes: 0
Labels: None
Σ Remaining Estimate: Not Specified Remaining Estimate: Not Specified
Σ Time Spent: Not Specified Time Spent: Not Specified
Σ Original Estimate: Not Specified Original Estimate: Not Specified

Sub-Tasks:
Key
Summary
Type
Status
Assignee
TYRUS-16 Implement BinaryStream MessageHandler Sub-task Resolved dannycoward  
TYRUS-17 Implement CharacterStream MessageHandler Sub-task Resolved dannycoward  
TYRUS-18 Implement Pong MessageHandler Sub-task Resolved dannycoward  
TYRUS-47 Implement async sending of text binar... Sub-task Resolved dannycoward  
TYRUS-48 Implement MessageHandler.AsyncText, M... Sub-task Resolved dannycoward  
TYRUS-49 Implement binary send of text and bin... Sub-task Resolved dannycoward  

 Comments   
Comment by dannycoward [ 30/Oct/12 ]

This is implemented now.

There is a remaining threading issue with the blocking stream modes which is being tracked in bug Tyrus-50.

As far as I can tell, it occurs only when the server calls the client back on the thread the server listener thread.





[TYRUS-45] Implement correct ordering and selection of decoders/encoders Created: 24/Oct/12  Updated: 29/Oct/12  Resolved: 29/Oct/12

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b07, 1.0

Type: New Feature Priority: Blocker
Reporter: Martin Matula Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Description   
  • application (i.e. user-specified) encoders/decoders take precedence over system ones

Encoders:

  • select the first (based on the order specified by the user) that can encode the same class or super class

Decoders:

  • select the first (based on the order and willDecode()) that can decode the same class or sub class





[TYRUS-37] Implement the correct threading model Created: 17/Oct/12  Updated: 26/Oct/12  Resolved: 26/Oct/12

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b07, 1.0

Type: New Feature Priority: Blocker
Reporter: Martin Matula Assignee: Martin Matula
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified





[TYRUS-3] Container bootstrap implementation Created: 11/Oct/12  Updated: 26/Oct/12  Resolved: 26/Oct/12

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b07, 1.0

Type: New Feature Priority: Blocker
Reporter: Martin Matula Assignee: Martin Matula
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified





[TYRUS-46] Rewrite annotations support to work on top of the programmatic API Created: 24/Oct/12  Updated: 26/Oct/12  Resolved: 26/Oct/12

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b07, 1.0

Type: New Feature Priority: Blocker
Reporter: Martin Matula Assignee: Martin Matula
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified





[TYRUS-12] Support for @WebSocketPathParam annotation. Created: 11/Oct/12  Updated: 26/Oct/12  Resolved: 26/Oct/12

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b07, 1.0

Type: New Feature Priority: Blocker
Reporter: Martin Matula Assignee: Pavel Bucek
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: 0 minutes
Time Spent: 4 hours
Original Estimate: Not Specified





Proper implementation of a handshake on the server side (TYRUS-1)

[TYRUS-19] Implement the extension negotiation Created: 17/Oct/12  Updated: 25/Oct/12  Resolved: 25/Oct/12

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b07, 1.0

Type: Sub-task Priority: Blocker
Reporter: stepan.kopriva Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified





Proper implementation of a handshake on the server side (TYRUS-1)

[TYRUS-20] Implement origin check. Created: 17/Oct/12  Updated: 25/Oct/12  Resolved: 25/Oct/12

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b07, 1.0

Type: Sub-task Priority: Blocker
Reporter: stepan.kopriva Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified





Proper implementation of a handshake on the server side (TYRUS-1)

[TYRUS-11] implement selection of sub-protocol during the handshake Created: 11/Oct/12  Updated: 25/Oct/12  Resolved: 25/Oct/12

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b07, 1.0

Type: Sub-task Priority: Blocker
Reporter: Martin Matula Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified





Proper implementation of a handshake on the server side (TYRUS-1)

[TYRUS-10] implement URI matching (exact and template-based) Created: 11/Oct/12  Updated: 25/Oct/12  Resolved: 25/Oct/12

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b07, 1.0

Type: Sub-task Priority: Blocker
Reporter: Martin Matula Assignee: Pavel Bucek
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: 0 minutes
Time Spent: 9 hours
Original Estimate: Not Specified





[TYRUS-6] Push samples to maven Created: 11/Oct/12  Updated: 17/Oct/12  Resolved: 17/Oct/12

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b06, 1.0

Type: New Feature Priority: Blocker
Reporter: Martin Matula Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified





[TYRUS-8] Hudson job for releasing milestone builds (pushing to maven) Created: 11/Oct/12  Updated: 17/Oct/12  Resolved: 17/Oct/12

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b06, 1.0

Type: New Feature Priority: Blocker
Reporter: Martin Matula Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified





[TYRUS-5] Publish src and javadoc on maven (along with binaries) Created: 11/Oct/12  Updated: 17/Oct/12  Resolved: 17/Oct/12

Status: Resolved
Project: tyrus
Component/s: None
Affects Version/s: None
Fix Version/s: 1.0-b06, 1.0

Type: New Feature Priority: Blocker
Reporter: Martin Matula Assignee: stepan.kopriva
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified





Generated at Wed Sep 28 15:02:48 UTC 2016 using JIRA 6.2.3#6260-sha1:63ef1d6dac3f4f4d7db4c1effd405ba38ccdc558.