Glassfish4とJavaFX間でJSON形式のデータをWebsocketにてやり取りしてみたのでメモ。
何ページかに分かれているけど実際にJSONのハンドリングをしている箇所はこちら
サーバサイドはこの前HTMLとやり取りしたものとほぼ同じ。
大まかな動きは以下。なお、表示はリスト形式ではなくてラベルの中身を置換していく形式(表示以外はやっていることはHTMLの時とほぼ一緒)
- HTMLからJSONで入力テキストと現在日時を送信。
- GlassfishのWebsocketで受信(&Decode)
- 受け取ったデータに情報(とりあえずユーザ情報代わりのセッションID)を付与し繋がっているクライアント(JavaFX&この前作ったHTML)全体にJSON形式で返信
- JavaFX(またはHTML)で受け取ったデータを表示
データ形式はこの前と同じ。(なので、クライアントはこの前のHTMLとJavaFXで併用できる。)
(JavaFX->glassfishのデータ形式) {"message":"メッセージ","messageTime":時間(ミリ秒)} (glassfish->JavaFXのデータ形式) {"message":"メッセージ","sessionId":"セッションID","messageTime":"HH:mm:ss"} 斜体は変数
Maven
必要な依存関係を追加。(動作確認はeclipse上のM2E)
<dependencies> <!-- JavaFX 2 --> <dependency> <groupId>com.oracle</groupId> <artifactId>javafx</artifactId> <version>2.2</version> <scope>system</scope> <systemPath>${javafx2.home}</systemPath> </dependency> <!-- Websocket (JSR-356) --> <!-- TYRUS-210の対応で1.2にあげている --> <dependency> <groupId>org.glassfish.tyrus</groupId> <artifactId>tyrus-client</artifactId> <version>1.2</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.glassfish.tyrus</groupId> <artifactId>tyrus-container-grizzly</artifactId> <version>1.2</version> <scope>compile</scope> </dependency> <!-- JSON Processing (JSR-353) --> <dependency> <groupId>javax.json</groupId> <artifactId>javax.json-api</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>org.glassfish</groupId> <artifactId>javax.json</artifactId> <version>1.0.2 </version> </dependency> </dependencies>
画面フロー
起動時
開始ボタンしか押せない状態。裏ではWebSocket用のClientEndPointをインスタンス化している。
開始ボタンクリック後(の入力欄に文字入力した状態)
入力欄や送信ボタン・終了ボタンが使えるようになる。
送信ボタンクリック後
入力メッセージと時間がサーバに送信される。そしてデータを受信したサーバにて加工(といってもセッションID文字列を付加しただけ)されたデータがクライアントに送られ、そのデータがラベルに表示される。
終了ボタンクリック後
開始ボタンしか押せない状態になる。
github:https://github.com/epea/test01/tree/WF_JSON_FX_SINGLE