[Java] Tyrus 1.6

原文はこちら。
https://blogs.oracle.com/PavelBucek/entry/tyrus_1_6

すてきな機能やバグ修正を含むTyrus 1.6を今週リリースしたことを発表できうれしく思います。最も重要な点をご紹介しましょう。

What’s new?

まず大きなものとして、JDK Client Transportを追加しました。これまで、クライアント側でトランスポート層を処理するためだけにGrizzlyフレームワークを使用していましたが、このリリースで、JDK1.7ベースのトランスポートへ切り替えるオプションを提供します。主な利点は、jarファイルのサイズと個数が減った、ということです。デフォルトのトランスポートはまだGrizzlyベースゆえ、JDK 1.7 AIOを試したい場合は、明示的に有効にする必要があります。詳細はTyrusのマニュアルの、JDK7のクライアントの章をご覧下さい。この機能は、Tyrusチームの新メンバーであるPetr Janouchが実装しました。
Grizzly
https://grizzly.java.net/
8.9. JDK 7 client (Tyrus 1.6 User Guide)
https://tyrus.java.net/documentation/1.6/user-guide.html#d0e1280
もう一つの重要な機能は、サーバー再度リソースの利用状況を監視し、この情報をJMX beanで統計情報を公開する、というものです。現在利用可能な統計情報はほとんど送受信メッセージの件数や種類に関するものであったり、展開されているエンドポイントのリストや同時接続クライアント数を提供するといった、よりハイレベルなものです。この機能を使ってみたい場合は、TyrusユーザーガイドのJMX Monitoringの章に設定方法の詳細が記載されています。この機能もまたPetr Janouchがやってくれました。
8.10. JMX Monitoring (Tyrus 1.6 User Guide)
https://tyrus.java.net/documentation/1.6/user-guide.html#d0e1322
次は、JSR 356での問題に関連して変更した内容です。
Session.addMessageHandler(MessageHandler) cannot work with lambda expressions.
https://java.net/jira/browse/WEBSOCKET_SPEC-226
現在のSessionインターフェースでは、メッセージハンドラ登録時にLambda expressionを使うことができますが、期待したように動作しません。APIにより、実行時にgeneric typeの情報を取得するよう実装しなければなりませんが、これはJavaの場合、いつも利用可能とは限りません。ほとんどのユースケースは問題なく動作しますが、匿名クラス実装をLambda式で置き換える場合、型情報が失われてしまいます。Tyrusは現在提案された解決策を実装していますが、言及したメソッドにアクセスできるようにするには、SessionをTyrusSessionにキャストする必要があります。その後、メッセージハンドラ(java.lang.Class)とハンドラ自体の型を提供する必要があります。型情報が分離しているので、メッセージハンドラ・インスタンスから情報を取得する必要はありません。こうすることで任意の表現で動作するはずです。現在この修正をWebSocket APIに移植しているところです。詳細はしばしお待ちください。

最後の、最も小さな機能はWSADLです。何かわからなくても心配しないでください。誰も知りませんから :)。 WSADLはデプロイ対象のアプリケーションのXML Descriptor(現在のところ)で、(登録されたメッセージ·ハンドラのように他の情報は、クライアントがエンドポイントに接続する前に取得することが容易ではなく、セッションごとに変化する可能性があるという主にそういう理由で)現在のところ展開されているエンドポイントのセットだけを提供しています。 WSADLとはWebSocket Application Descriptor Languageの略で、RESTful WebサービスにとってのWADLやSOAP WebサービスにとってのWSDLのようなものです。この機能を試してみたい場合は、WSADL_SUPPORTを有効にし(もしくは以下のテストコードを参照)、デプロイしたTyrusアプリケーションでGET /contextPath/application.wsadlを発行してください。
Tyrus 1.6 API - WSADL_SUPPORT (Class TyrusWebSocketEngine)
https://tyrus.java.net/apidocs/1.6/org/glassfish/tyrus/core/TyrusWebSocketEngine.html#WSADL_SUPPORT
tyrus-project/tyrus (GitHub)
Wsadl - WebSocket application desciption language
https://github.com/tyrus-project/tyrus/blob/master/tests/e2e/non-deployable/src/test/java/org/glassfish/tyrus/test/e2e/non_deployable/WsadlTest.java

Complete list of changes

  • TYRUS-301 Custom String encoder is not used
  • TYRUS-305 Add support for multiple client container to TestContainer
  • TYRUS-311 Session timeout on client does not work when set in onOpen method
  • TYRUS-312 TyrusFuture.get(long,TimeUnit) does not honor Future.get(long,TimeUnit) contract
  • TYRUS-293 Automatic heartbeat PING
  • TYRUS-259 Should produce a warning during deployment when OnMessage#maxMessageSize is larger than the value of org.glassfish.tyrus.servlet.incoming-buffer-size
  • TYRUS-308 JDK Client transport – SSL support
  • TYRUS-309 JDK Client transport – Proxy support
  • TYRUS-318 Writer returned from BasicRemote.getSendWriter() throws NPE when flush is called more than once.
  • TYRUS-314 Create WADL-like descriptor per deployed app
  • TYRUS-317 Allow server configuration using WebSocketContainer or WebSocketAddOn
  • TYRUS-302 Java 8 Lambda
  • TYRUS-214 Expose monitoring API/statistics
  • TYRUS-299 Missing tyrus-container-grizzly-server in the release package WebSocket RI archive
  • TYRUS-233 Provide client transport based on plain JDK
  • TYRUS-310 When max idle timeout is reset to 0, every received message or sent ping or pong causes an empty task to be scheduled and executed

Links

疑問やコメント、Tyrusに関連することで聞きたいことがあれば、メーリングリスト users [at] tyrus.java.net に投稿するのが一番簡単です。

0 件のコメント:

コメントを投稿