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



