JavaFX and GlassFish

Post on 16-May-2015

3,389 views 6 download

Tags:

transcript

JavaFX with GlassFish

HASUNUMA KenjiGlassFish Community

khasunuma@java.net Twitter: @khasunuma

December 13, 2013

Contents• Introduction to LightFish

• Revival of rich clients by JavaFX

• SOAP, REST and WebSocket

• Using JAX-RS and WebSocket in JavaFX

• Some plan how to combine JavaFX and GlassFish

Introduction to LightFishLightFish is a performance monitor for GlassFish using JavaFX UI

LightFish is since 2012 by Adam Bien, a Java Champion in Germany !It’s an open source software licensed by Apache License 2.0

JavaFX UI (LightView)

HTML5 UI (JavaServer Faces)

How to run LightFish?

How to run LightFish?

Learn more about LightFish

• Java EE Telemetry (LightFish’s Official Site)http://lightfish.adam-bien.com

• GitHub / AdamBien / LightFish (Source Code)https://github.com/AdamBien/lightfish

• Adam Bien’s Weblog http://www.adam-bien.com/roller/abien/

• And more …

Revival of rich clients by JavaFX

JavaFX is innovation in Java Technology it may change the relationship between application servers and clients.

SOAP, REST and WebSocket

The history of revival of rich clients. There are several Web services, SOAP, REST and WebSocket.

• Webアプリケーションのはじまり : NCSA HTTP ServerのCGI (Common Gateway Interface)

• Javaの世界ではServlet/JSP、さらに基幹業務への展開を狙いJ2EE(現Java EE)へ発展

• UIはWebブラウザのみ - 2000年代初めのクライアント環境は非力で、アプリケーション・サーバーへの集中は合理的な判断

• Web UIの限界 - 標準のJavaServer Facesをはじめ様々なフレームワークが誕生したが、かつてのリッチUIには敵わず

• クライアント環境の進化 - 2013年現在、普段使用しているPCは「2ちゃんねる」サーバー1機よりも高性能

• UI処理を再びクライアントへ - クライアントとサーバーの役割分担見直し、リッチ・クライアント復活

• リッチ・クライアントとアプリケーション・サーバーの連携は、2005年前後から

• 当時はSOAPによるWebサービスが流行

• SOAPはHTTPとXMLベースであり、CORBAやDCOM (ActiveX)よりシンプルでトラブルが少ない

• あらゆるものをSOAPで繋ごうという動きまで…

• SOAPはXMLベースだが、トランザクションやセキュリティなどの拡張機能により複雑化

• HTTP仕様そのものをメッセージング・フレームワークに見立てたRESTが台頭

• RESTの強みは「シンプル」であること

• SOAP vs. RESTのバトルが勃発、現状を見る限りではRESTの圧勝か?

• サーバーからの状態変更通知は、ポーリングによる確認が中心だった

• RESTはステートレスでシンプルなことが売り、しかしポーリング時には毎回の再接続が裏目に

• ロング・ポーリングなどの工夫により再接続のコストは下がったが、RESTのシンプルさは失われた

• ポーリングに頼らず、サーバー通知を行う手段は?

• RESTやロング・ポーリングの問題を抜本的に解決するため、WebSocketが制定

• WebSocketは、HTTPの基盤を生かした、けれどもHTTPとは異なるプロトコル

• WebSocketでは一度接続した後は切断するまでクライアントとサーバーの間で自由にメッセージをやり取りできる

• サーバー通知もWebSocketなら簡単に実現可能

• Javaでは、SOAP、REST、WebSocketのいずれも規格化が完了 ([ ]内はGlassFishの実装)

• SOAP : JSR 224 (JAX-WS) [Metro]

• REST : JSR 339 (JAX-RS) [Jersey]

• WebSocket : JSR 356 [Tyrus]

• いずれもJava SE用クライアントを用意 : JavaFXでRESTやWebSocketが利用できる!

Using JAX-RS and WebSocket in JavaFX

Now, we should use JAX-RS and/or WebSocket for connect JavaFX to GlassFish because of these simplify. In this chapter, I’ll show some information it’s not important for Java EE but requirement for Java SE and Java FX.

JSR 339 : JAX-RS 2.0

• JAX-RS 1.1 (JSR 311) is so useful API.

• JAX-RS 2.0 (JSR 339) is the extend specification of JAX-RS 1.1. It added many useful features to JAX-RS 1.0.

• It specifies the Client API using both Java SE and EE.

• Jersey 2.0 (RI) is now avaliable: https://jersey.java.net/

JAX-RS 2.0 message processing

JAX-RS Client API Usage

// Initialize Client object // It needs many resource but it is reusable Client client = ClientBuilder.newClient(); !// send GET request to TARGET_URI // and receive the response as String class WebTarget target = client.target(TARGET_URI); String message = target.request() .accept(“text/plain”).get(String.class);

Sample code for REST client (incl. JavaFX)

Jersey 2.0 dependenciesartifactId library

jersey-client

javax.ws.rs-api-2.0.jarjersey-client-2.0.jar

jersey-common-2.0.jarjavax.annotation-api-1.2.jarosgi-resource-locator-1.0.jar

guava-14.0.1.jarhk2-api-2.1.88.jarhk2-utils-2.1.88.jar

javax.inject-2.1.88.jarhk2-locator-2.1.88.jar

asm-all-repackaged-2.1.88.jarcglib-2.1.88.jar

JSR 356 : Java API for WebSocket• JSR 356 is the API that is easy for us to use WebSocket on both

Java EE and Java SE.

• In past times, many application servers implement WebSocket features by its original way. JSR 356 has some useful features not included in the other way.

• Tyrus (RI) is now available: https://tyrus.java.net

Tyrus 1.1 dependenciesartifactId library

tyrus-client

javax.websocket-api-1.0.jar

tyrus-client-1.1.jar

tyrus-core-1.1.jar

tyrus-spi-1.1.jar

tyrus-websocket-core-1.1.jar

tyrus-container-grizzly

tyrus-container-grizzly-1.1.jar

grizzly-framework-2.3.3.jar

grizzly-http-server-2.3.3.jar

grizzly-http-2.3.3.jar

grizzly-rcm-2.3.3.jar

Some plan how to combine JavaFX and GlassFishIn this chapter, we’ll think some plan how to combine JavaFX and GlassFish based on actual practices.

Simple JavaFX Application

Rich client and server

Remarks: LightFish is same pattern

JavaFX Application with Embedded GlassFish

JavaFX with GlassFish

HASUNUMA Kenjikhasunuma@java.net

December 13, 2013