X

Pavel Bucek's Weblog

  • March 9, 2013

Tyrus 1.0-b13 released

Tyrus 1.0-b13 is out and it brings new WebSocket API 1.0-rc1, which
contains some bigger renames and additions, like the last time. Since it
is going to affect almost all code written using previous API, I'll
again try to summarize changes to make transition as easy as possible.

Renames

OriginalNew
EndpointConfigurationEndpointConfig
ServerEndpointConfigurationServerEndpointConfig
ClientEndpointConfigurationClientEndpointConfig
ServerEndpointConfiguratorServerEndpointConfig.Configurator
ClientEndpointConfiguratorClientEndpointConfig.Configurator
ServerApplicationConfigurationServerApplicationConfig
ServerEndpointConfigurationBuilderServerEndpointConfig.Builder
ClientEndpointConfigurationBuilderClientEndpointConfig.Builder
MessageHandler.BasicMessageHandler.Whole
MessageHandler.AsyncMessageHandler.Partial

New Features

Encoder and Decoder interface got two new methods - init(EndpointConfig) and destroy(). As you most likely guessed out already, init is called when Encoder/Decoder is initiated and destroy
when it is going to be destroyed or no longer used. Lifecycle of these
objects changed from singleton to per session. Additionally Encoder.Adapter and Decoder.Adapter were added with empty impl of mentioned methods to ease implementing custom coders which do not rely on newly added methods.

ServerContainer and ServerContainerProvider
have been introduced, but there is still open discussion about
functionality they should provide, so some changes might happen here. ServerContainer allows users to "dynamically"
add some endpoints during deployment, but its functionality is limited
only to Servlet deployment phase. See javadoc for more information or
check out test on Tyrus workspace - tests/servlet/dynamic-deploy or download from maven central - dynamic-deploy sample.

WebSocketContainer connectToServer(...) methods which take endpoint instance are back, enjoy ;)

EndpointConfig now has getters for sets of Encoder/Decoder
classes instead of instances (it relies to scope change mentioned in 3
paragraphs above). It also nicely matches annotated case (see @ServerEndpoint and @ClientEndpoint).

ServerEndpointConfig.Configurator (used to be ServerEndpointConfigurator) has one new method getEndpointInstance(Class<T> clazz),
which can be overridden and will be used to create new instances of all
endpoints. So you can easily influence scoping of created instances.
But beware, you won't be able to do anything more granular than one
endpoint instance per session. Container provided implementation should
support EJB and CDI, check out our CDI sample.

I
hope that covers all bigger changes, other things are minor
modifications mostly, like changing thrown exceptions etc. This short
post is not supposed to be complete list of changes, if you want to see
them all, please check API is javadoc and spec document: http://java.net/projects/websocket-spec/downloads/directory/Spec%20javadoc%20Drafts/Proposed%20Final%20Draft . And as always, you can always ask us! Tyrus (implementation): users@tyrus.java.net ; API: users@websocket-spec.java.net.

Be the first to comment

Comments ( 0 )
Please enter your name.Please provide a valid email address.Please enter a comment.CAPTCHA challenge response provided was incorrect. Please try again.