NetBeans8 と GlassFish v4.1 ではじめる Java EE 7 ハンズオン ラボ Version 1.2
|
|
|
- さゆり よせ
- 6 years ago
- Views:
Transcription
1 NetBeans8 と GlassFish v4.1 ではじめる Java EE 7 ハンズオン ラボ Version 1.2
2 Table of Contents 1.0 はじめに NetBeans と GlassFish の動作確認 JavaServer Faces アプリケーションの作成 JMS アプリケーションの作成 WebSocket アプリケーションの作成 GlassFish クラスタ環境の構築と動作確認 ボーナス演習 :jbatch アプリケーションの作成 参考資料 補足
3 1.0 はじめに Java EE 7 は Java EE 6 をベースに 3 つの新しいテーマ ( 開発生産性の向上 HTML 5 対応 エンタープライズ ニーズへの対応 ) を提供し 4 つの新機能が追加されました 本ハンズオン ラボでは新機能の一つである WebSocket にフォーカスをあて より現実的な WebSocket アプリケーションの構築を行います 本ハンズオン ラボを終了することで セキュアでより大規模な WebSocket アプリケーションの構築ができるようになります 本ハンズオン ラボでは 図の右側に位置する情報提供者が入力したデータを メッセージ プロバイダを通じて一元管理し WebSocket のサーバ エンドポイントに接続する全情報受信者に対して同一メッセージを配信するアプリケーションを作成します 本アプリケーションは複数台のマシンから構成されるクラスタ環境に対応します 図 1: ハンズオン アプリケーションの概念図 本ハンズオン ラボは Java EE 7 に含まれる下記の技術を使用します Java Message Service 2.0 (JSR 343) JavaServer Faces 2.2 (JSR 344) Enterprise Java Beans(JSR 345) o Singleton EJB o Message-Driven Bean Contexts and Dependency Injection 1.1 (JSR 346) Java API for WebSocket 1.0 (JSR 356) Batch Applications for the Java Platform (JSR 352)< ボーナス演習 > 3
4 これらの API を使用することでより大規模でセキュアな WebSocket アプリケーションの構築ができます なお この演習で Java コードや HTML の入力が多い部分については この PDF ファイルから随時コピー ペーストを行って下さい 必須ソフトウェア 最新の JDK 8 を入手してインストールしてください ml 下図は Java SE 8u40 のダウンロードページですが ご利用時点でリリースされている最新の Java SE 8 をご利用下さい 図 2:JDK のダウンロード 4
5 NetBeans 以降を入手してインストールしてください NetBeans のダウンロードサイトより Java EE もしくは すべて のパッケージを選択し ダウンロード ボタンを押下してください Java EE すべて を選択した場合 本ハンズオンの動作に必要な GlassFish v4.1 がバンドルされています 図 3:GlassFish バンドル版のダウンロード なお NetBeans インストール時に GlassFish v4.1 をインストールするか否かを選択するダイアログが表示されるので 下図のようにインストールするように選択して下さい 図 3B:NetBeans インストール時の GlassFish インストール指定 5
6 2.0 NetBeans と GlassFish の動作確認 NetBeans をインストールしたのち アイコンをダブル クリックし NetBeans を起動してください 起動すると下記のような画面が表示されます 図 4:NetBeans の起動画面 ここで NetBeans と GlassFish が正しく連携できているかを確認するため 新しくプロジェクトを作成してください メニューから ファイル (F) 新規プロジェクト (W)... を選択してください 図 5: 新規プロジェクト作成 6
7 新規プロジェクト (W)... を選択すると下記のウィンドウが表示されます カテゴリ (C) : より Java Web を選択し プロジェクト (P): より Web アプリケーション を選択し 次 > ボタンを押下してください 図 6: 新規プロジェクト作成 次 > ボタンを押下すると下記のウィンドウが表示されます プロジェクト名 : に WebSocket-HoL と入力し 次 > ボタンを押下してください 図 7: 新規 Web アプリケーション 7
8 次 > ボタンを押下すると下記の画面が表示されます コンテキスト パス (P): の変更は今回不要なので そのまま 次 > ボタンを押下してください 図 8: 新規 Web アプリケーション 次 > ボタンを押下すると 下記のウィンドウが表示されます 使用するフレームワークとして JavaServer Faces を選択し 最後に 終了 (F) ボタンを押下してください 図 9: 新規 Web アプリケーション 8
9 終了 (F) ボタンを押下すると下記の画面が表示されます 図 10: プロジェクト作成完了画面 今回作成するアプリケーションに必要なライブラリをプロジェクトに追加します はじめにプロジェクトをマウスで選択してください 選択したのち 右クリックし プロパティ を選択してください 図 10-A: ライブラリの追加 9
10 選択すると 下記のウィンドウが表示されます ここで カテゴリ (C): より ライブラリ を選択し 右側にある ライブラリの追加 (L)... ボタンを押下してください 図 10-B: プロジェクトプロパティのライブラリ画面 ボタンを押下すると下記のウィンドウが表示されます ここでは Java EE 7 API ライブラリ を選択して ライブラリの追加 ボタンを押下して下さい 図 10-C: ライブラリの追加画面 10
11 ボタンを押下すると下記のウィンドウが表示されます コンパイル時ライブラリ に Java EE 7 API ライブラリ が追加されていることを確認し OK ボタンを押下して下さい 図 10-D: プロジェクトプロパティのライブラリ画面 ( ライブラリ追加後 ) 新規プロジェクトを設定したので このプロジェクトを実行します プロジェクトを実行するために 図 11:NetBeans ツールバー に示す NetBeans のツールバーより プロジェクトを実行 (F6) ボタンを押下してください 図 11:NetBeans ツールバー 11
12 もしくは NetBeans のメニューから プロジェクトを実行 (R) を選択し実行してください 図 12:NetBeans プロジェクトの実行 プロジェクトを実行するとブラウザが自動的に起動しデフォルトのページが表示されます 図 13:NetBeans の実行結果 12
13 3.0 JavaServer Faces アプリケーションの作成 本章より実装をはじめていきます まず 情報提供者が Web アプリケーションに対して情報を登録する画面を JavaServer Faces( 以降 JSF) で実装します 図 14:JSF アプリケーションの概念図 JSF は Web アプリケーションを構築するための標準 Web フレームワークで Visual Basic や JavaFX などのリッチクライアント開発に取り入れられているコンポーネント指向開発を取り入れています 図 15:JSF の内部アーキテクチャ 13
14 JSF は MVC アーキテクチャに基づき実装を行うことが可能で JSF の実行環境が提供する FacesServlet が MVC におけるコントローラの役割を担います FacesServlet は事前設定ファイル (faces-config.xml) を読み込み クライアントからのリクエストに対して適切な処理へマッピングする役割を持っています 開発者は基本的に コントローラである FacesServlet に対して設定ファイルの修正以外 特に処理を追加実装する必要はありません 開発者が JSF のアプリケーションで実際に実装する箇所はビューとモデル部分になり ビューは Facelets(xhtml) と EL 式 モデルは Context Dependency Injection ( 以降 CDI) を用いて実装します Facelets では HTML で提供されている HTML タグと 1 対 1 で対応する独自タグを xhtml ファイル中に記載していきます 例えばテキスト フィールドを表す HTML タグは <INPUT TYPE= TEXT value= > ですが Facelets では <h:inputtext id= *** value= /> で表します 図 16:Facelets タグの利用例 ご参考 :JSF 2.2 で利用可能な Facelets タグの一覧は下記に記載されています Facelets タグを用いて画面デザインを作成し 画面デザイン完了後 画面の入力データ等をプログラム内で扱えるように致します 14
15 図 17:Facelets + EL 式と CDI のバインディング テキスト フィールド内に入力された値をプログラム内で取得するためには Facelets 内に定義する EL 式 ( 上記の図では #{indexmanage.message と記載されている箇所 ) を用いて CDI で実装したクラス ( 上記の図では IndexPageMgdBean クラス ) にバインディング ( 結びつけ ) します 画面デザインに示すような HTML のテキスト フィールドを表現するために Facelets では <h:inputtext /> タグを定義します ここでタグ内の value に記載する箇所 #{indexmanage.message が EL のアノテーションを付加した CDI のクラス (IndexPageMgdBean) にバインドし ドットで連結し フィールド (message) にバインドしています バインドされた値を取得するためには CDI で別途定義するゲッター メソッド ( 上記の場合 getmessage() メソッド ) を呼び出し取得することが可能です このように JSF は HTML コンポーネントの値を POJO の Java クラスに対してバインドして簡単にデータを取り出す仕組みを提供し Web アプリケーションの簡易化をはかっています JSF は 実装内部ロジックは多少複雑ですが Web アプリケーションの開発者にその内部アーキテクチャの複雑さを隠蔽し かんたんに開発ができる仕組みを提供しています 本ハンズオンでは JSF の Facelets タグと EL 式 CDI を利用して簡単な JSF アプリケーションの作成を行います このハンズオンではかんたんに実装するために 画面遷移 入力データ検証 Ajax 化などは行いません ユーザから入力されたデータをサーバ側で受けて処理をする JSF アプリケーションを作成します 15
16 まず JSF の管理対象 Bean を Context Dependency Injection ( 以降 CDI) で実装するため CDI を有効にします 次に JSF のパラメータで日本語データを扱うことができるように GlassFish で UTF-8 の文字コードを扱う設定を行います はじめにプロジェクトをマウスで選択してください 選択したのち 右クリックし 新規... その他... を選択してください 図 18:CDI の有効化 選択すると下記のウィンドウが表示されます ここで カテゴリ (C): より コンテキストと依存性の注入 を選択し ファイル タイプ (F): より beans.xml (CDI 構成ファイル ) を選択し 次 > ボタンを押下してください 16
17 図 19: 新規ファイル ボタンを押下すると下記のウィンドウが表示されます ここではデフォルトの設定のまま 終了 (F) ボタンを押下してください 図 20:New beans.xml (CDI 構成ファイル ) ウィンドウ ボタンを押下すると 構成ファイル 配下に下記の beans.xml ファイルが自動的に生成されます 17
18 <?xml version="1.0" encoding="utf-8"?> <beans xmlns=" xmlns:xsi=" xsi:schemalocation=" bean-discovery-mode="annotated"> </beans> ここで デフォルトで記載されている bean-discoverymode="annotated" の箇所を bean-discovery-mode="all" 1 に修正してください 修正後は下記になります <?xml version="1.0" encoding="utf-8"?> <beans xmlns=" xmlns:xsi=" xsi:schemalocation=" bean-discovery-mode="all"> </beans> 次に GlassFish で UTF-8 の文字エンコードを扱う設定を行います プロジェクトをマウスで選択し右クリックし 新規 その他... を選択してください 図 21: 新規 GlassFish ディスクリプタの作成 次に 1 bean-discovery-mode は all, annotated, none のいずれかを指定できます annotated を指定した場合 アノテーションが付加されたクラスに対してのみインジェクション可能です all を指定した場合 全てのクラスに対してインジェクション可能となります 18
19 カテゴリ (C): より GlassFish を選択し ファイル タイプ (F): より GlassFish ディスクリプタ を選択し 次 > ボタンを押下してください 図 22: 新規 GlassFish ディスクリプタの作成 ボタンを押下すると下記のウィンドウが表示されます ここではデフォルトの設定のまま 終了 (F) ボタンを押下してください 図 23: 新規 GlassFish ディスクリプタの作成 19
20 ボタンを押下すると下記の画面が表示されますが OK ボタンを選択します 図 23-A: 新規 GlassFish ディスクリプタの作成時のエラーダイアログ OK ボタンを選択すると下記の画面が表示されます ここで XML ボタンを押下してください 図 24:sun-web.xml の編集画面 押下すると下記の XML ファイルが表示されます <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD GlassFish Application Server 3.0 Servlet 3.0//EN" " <sun-web-app error-url=""> <class-loader delegate="true"/> <jsp-config> <property name="keepgenerated" value="true"> <description>keep a copy of the generated servlet class' java code.</description> </property> </jsp-config> </sun-web-app> 20
21 ここで GlassFish でデフォルトで UTF-8 文字エンコードを扱うために <parameter-encoding default-charset="utf-8" /> の 1 行を追加してください 追加すると下記になります <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD GlassFish Application Server 3.0 Servlet 3.0//EN" " <sun-web-app error-url=""> <class-loader delegate="true"/> <jsp-config> <property name="keepgenerated" value="true"> <description>keep a copy of the generated servlet class' java code.</description> </property> </jsp-config> <parameter-encoding default-charset="utf-8" /> </sun-web-app> 以上で CDI と UTF-8 の文字エンコードが利用可能になりました プロジェクトの 構成ファイル ディレクトリ配下を確認すると下記のファイルが含まれていることを確認してください 図 25: 構成ファイルの確認 21
22 次に JSF ページのバックエンド処理を行う JSF 管理対象 Bean を CDI 管理対象 Bean として作成します プロジェクトを選択し 右クリックした後 新規 その他... を選択してください 図 26: 新規 JSF バッキングビーンの作成 選択すると 下記のウィンドウが表示されます ここで カテゴリ (C): より JavaServer Faces を選択し ファイル タイプ (F): より JSF 管理対象 Bean を選択した後 次 > ボタンを押下してください 図 27: 新規 JSF 管理対象ビーン 22
23 ボタンを押下すると下記のウィンドウが表示されます ここで クラス名 (N): に IndexPageMgdBean を入力し パッケージ (K): に jp.co.oracle.cdis スコープ : を dependent から request に変更し 最後に 終了 (F) ボタンを押下してください 図 28:New JSF 管理対象 Bean ボタンを押下すると下記のコードが自動的に生成されます /* * To change this license header, choose License Headers in * Project Properties. * To change this template file, choose Tools Templates * and open the template in the editor. */ package jp.co.oracle.cdis; import javax.inject.named; import javax.enterprise.context.requestscoped; /** * ********** = public class IndexPageMgdBean { /** * Creates a new instance of IndexPageMgdBean */ public IndexPageMgdBean() { 23
24 ここで CDI 管理対象 Bean = indexpagemgdbean ) = indexmanage ) に修正してください また 情報提供者から入力された文字をプログラムにバインド ( 結びつけ ) する変数を定義します private String message; を定義してください /* * To change this license header, choose License Headers in * Project Properties. * To change this template file, choose Tools Templates * and open the template in the editor. */ package jp.co.oracle.cdis; import javax.inject.named; import javax.enterprise.context.requestscoped; /** * ********** = public class IndexPageMgdBean { private String message; /** * Creates a new instance of IndexPageMgdBean */ public IndexPageMgdBean() { 24
25 次に NetBeans のメニューより リファクタリング フィールドをカプセル化... を選択してください 図 29: フィールドのカプセル化 選択すると下記のウィンドウが表示されます ここで カプセル化するフィールド一覧 (L): から 取得メソッドを作成 設定メソッドを作成 のそれぞれに含まれる getmessage setmessage にチェックし リファクタリング (R) ボタンを押下してください 図 30: フィールドをカプセル化 25
26 ボタン押下すると下記のコードが自動的に生成されます /* * To change this license header, choose License Headers in * Project Properties. * To change this template file, choose Tools Templates * and open the template in the editor. */ package jp.co.oracle.cdis; import javax.inject.named; import javax.enterprise.context.requestscoped; /** * ********** = public class IndexPageMgdBean { private String message; /** * Creates a new instance of IndexPageMgdBean */ public IndexPageMgdBean() { /** the message */ public String getmessage() { return message; /** message the message to set */ public void setmessage(string message) { this.message = message; 上記のバインド変数を定義する事により Expression Language(EL) 式を通じて JSF のページ内からデータ参照 データ設定ができるようになります 2 次に データが入力された際に行う実際の処理を実装します ここではページ内でボタンを一つ用意しボタンが押下された際に処理する内容を実装します 今回は JSF の振る舞いを簡単に理解するために ボタンを押下された際に 2 JSF の Facelets でデータ バインドに EL 式 #{indexmanage.message を定義できるようになります 例えば テキスト フィールドで message を参照 設定するためには JSF タグ <h:inputtext id="textfield" value="#{indexmanage.message"/> を記入します 26
27 pushsendbutton() メソッドを呼び出し 入力された文字をそのまま標準出力に表示する処理を実装します クラスに対して下記のメソッドを追加してください 3 public String pushsendbutton() { System.out.println(getMessage()); return ""; 実装した全ソースコードは下記となります package jp.co.oracle.cdis; import javax.inject.named; import javax.enterprise.context.requestscoped; /** * ********* = public class IndexPageMgdBean { private String message; /** * Creates a new instance of IndexPageMgdBean */ public IndexPageMgdBean() { /** the message */ public String getmessage() { return message; /** message the message to set */ public void setmessage(string message) { this.message = message; public String pushsendbutton() { System.out.println(getMessage()); return ""; 3 JSF のページからこのメソッドを実行するためには ボタンタグで action に EL 式を定義します <h:commandbutton value="send Message" action="#{indexmanage.pushsendbutton()"/> ボタンが押下された際に pushsendbutton() メソッドが実行されます またアクションを実行した際 そのメソッドの戻り値が画面遷移先を表します メソッドの返り値を空文字 としているのは本処理を実行した後 画面遷移を行わないため空文字 としています 27
28 次に 管理者が接続するページを JSF の Facelets で作成します プロジェクトを選択したのち 右クリックし 新規 その他... を選択してください 図 31: 新規 Web ページの作成 選択すると下記のウィンドウが表示されます ここで カテゴリ (C): より その他 を選択し ファイル タイプ (F): から フォルダ を選択して 次 > ボタンを押下してください 図 32: 新規フォルダの作成 28
29 ボタンを押下すると下記のウィンドウが表示されます ここで フォルダ名 (N): に admin 親フォルダ (R) に web を記載し 最後に 終了 (F) ボタンを押下してください 図 33:New フォルダ作成 ボタンを押下すると プロジェクトの Web ページ ディレクトリ配下に admin ディレクトリが作成されます 図 34: ディレクトリ構成 29
30 次に 作成した admin ディレクトリをマウスで選択した後 右クリックしてください 右クリックした後 新規 その他... を選択してください 図 35: 新規 Web ページ作成 選択すると下記のウィンドウが表示されます ここで カテゴリ (C) : より JavaServer Faces を選択し ファイル タイプ (F) : から JSF ページ を選択し 次 > ボタンを押下してください 図 36: 新規 JSF ページの作成 30
31 ボタンを押下すると下記のウィンドウが表示されます ここで ファイル名 : に index を入力し 最後に 終了 (F) ボタンを押下してください 図 37:New JSF ページ ボタンを押下すると自動的に下記のファイルが生成されます <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " transitional.dtd"> <html xmlns=" xmlns:h=" <h:head> <title>facelet Title</title> </h:head> <h:body> Hello from Facelets </h:body> </html> 31
32 次に プロジェクトを実行した際に この作成したページがデフォルトで表示されるようにプロジェクトの設定を修正します プロジェクトの 構成ファイル ディレクトリ配下に存在する web.xml ファイルをダブル クリックしてください 図 38: 構成ファイルの修正 ダブル クリックすると web.xml ファイルの設定ウィンドウが表示されます ここで ソース ボタンを押下すると下記のような画面が表示されます 図 39:web.xml の設定画面 32
33 ここで XML 要素 <welcome-file> の項目を 下記のように修正し admin 配下の index.xhtml が呼び出されるように修正してください <welcome-file-list> <welcome-file>faces/admin/index.xhtml</welcome-file> </welcome-file-list> 上記設定完了後 プロジェクトを実行すると デフォルトで admin ディレクトリ配下の index.xhtml が呼び出されるようになります 図 40: 設定完了後の実行画面 それでは 実際に Web ページを作成していきます 今回は JSF の Facelets で作成する画面のイメージは下記になります 図 41: 画面完成イメージ 33
34 上記の画面で Send Message のボタンが押下された際 テキスト フィールドに入力された文字列をサーバ側に送信するコードを実装します admin フォルダにある自動生成された index.xhtml ファイルを下記のように修正してください <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " <html xmlns=" xmlns:h=" <h:head> <title>message Transfer Admin Console</title> </h:head> <h:body> <h:form> <h:inputtext id="textfield" value="#{indexmanage.message"/> <h:commandbutton value="send Message" action="#{indexmanage.pushsendbutton()"/><br/> </h:form> </h:body> </html> 実装した後 NetBeans のプロジェクトを実行してください 図 42:NetBeans プロジェクトの実行 34
35 プロジェクトを実行すると下記の画面が表示されます 図 43: 実行画面 テキスト フィールドに こんにちは と入力し Enter キー もしくは Send Message ボタンを押下してください 35
36 図 44: アプリケーションの実行 実行後 NetBeans の GlassFish 4.1 のコンソールを確認すると こんにちは の文字列が表示されている 4 ことを確認できます 図 45:GlassFish コンソールの確認 以上で JSF の Facelets によるアプリケーションの作成は完了です JSF では上記のように CDI と EL 式を組み合わせることで かんたんにユーザの入力をサーバ側で取り扱えます 4 本来は Web アプリケーションのため標準出力ではなく Web 画面上に結果を表示すべきですが 今回はボタン action の動作確認を簡単にするため標準出力に結果を表示しています 36
37 4.0 JMS アプリケーションの作成 次に 情報提供者が JSF のアプリケーションで入力した文字を Java Message Service ( 以降 JMS) を利用してメッセージ プロバイダ 5 に送信し 送信された文字列を取り出すアプリケーションを実装します 今回 メッセージ プロバイダとして GlassFish v4.1 にバンドルされている OpenMQ を利用します 6 そこで別途メッセージ プロバイダをインストールする必要はありません JMS のアプリケーションを実際に作成していく前に JMS の仕組みについて簡単に紹介します JMS は Java 用の Message Oriented Middleware(MOM) の API を提供し メッセージを送受信するための機能を提供します 図 46:JMS アプリケーションの概念図 JMS のアプリケーションを実際に作成していく前に JMS の仕組みについて簡単に紹介します JMS は Java 用の Message Oriented Middleware(MOM) の API を提供し メッセージを送受信するための機能を提供します JMS を利用する事でシステム間の疎結合を実現することができます JMS では下記に示す 2 種類の実装モデル (Point-to-Point, Publish/Subscriber) を提供しています 5 JMS のインターフェースを実装した MOM の実行環境で メッセージプロバイダとして Apache ActiveMQ, OpenMQ などがある 6 GlassFish v4.1 は Full Java EE Platform をインストールした場合 Open MQ ( が GlassFish にバンドルされています 今回は GlassFish にバンドルされている Open MQ をメッセージ プロバイダとして利用します Open MQ より Open MQ 単体で WebSocket をサポートしていますが 今回は Java EE アプリケーションとして実装するため GlassFish 経由で OpenMQ を使用します 37
38 図 47:Point to Point モデル Point To Point では 送信側と受信側で 1 対 1 の関係を持ち メッセージ プロバイダ上に存在する Queue を通じてメッセージをコンシュマーにメッセージを届けます 1 対 1 と記載していますが 実際には送信側は複数のプロデューサーがメッセージを送信する事も可能です 一方で受信側は必ず 1 になります このモデルではメッセージがコンシュマー ( 受信側 ) に届くまで もしくはメッセージ自身の有効期限が切れるまでメッセージは Queue に残り続けます 図 48:Publish/Subscriber モデル 38
39 一方で Publish/Subscriber モデルでは送信側と受信側で 1 対多の関係を持つ事ができます メッセージの送信者であるパブリッシャはメッセージ プロバイダに存在する Topic に対してメッセージを送信します Topic に対してパブリッシュされたメッセージは複数のクライアントがメッセージを受信する事ができるようになります 送信側は受信側の台数やシステム構成等を意図する事なく Topic に配信することができ また受信側は 実際のパブリッシャ ( 送信側 ) を意識する事なく興味のあるメッセージを受信できます 今回のアプリケーションは 大規模環境を想定しクラスタ環境における複数のインスタンスで同一メッセージを受信できるようにするため Publish/Subscriber のモデルを使用して実装します このモデルを使用する事でシステムに対する負荷が増大した場合もソースコードに一切手を加えることなく クラスタのインスタンスを追加するだけシステムを柔軟に拡張できるようになります 39
40 次に JMS アプリケーションの作成方法 7 について説明します まず アプリケーション サーバ側でメッセージ プロバイダ (OpenMQ) に対する接続ファクトリと宛先の設定を行います 図 49: メッセージ プロバイダの設定 GlassFish v4.1 で JMS リソースで Topic 用の 接続ファクトリ を作成するためには コマンドプロンプトから下記の asadmin コマンドを実行します 8 ( 実際は 下記のコマンドは 1 行で実行します ) > asadmin create-jms-resource --restype javax.jms.topicconnectionfactory jms/topiccon Connector resource jms/topiccon created. Command create-jms-resource executed successfully. つづいて Topic の物理的な 宛先リソース を作成します 下記のコマンドを実行してください ( 実際は 下記のコマンドは 1 行で実行します ) > asadmin create-jms-resource --restype javax.jms.topic --property Name=phisicaltopic jms/inforegtopic Administered object jms/inforegtopic created. Command create-jms-resource executed successfully. 7 JMS のアプリケーションは Java EE 環境だけでなく Java SE 環境でも実装する事ができます 8 asadmin コマンドは GlassFish のインストール ディレクトリ配下の bin ディレクトリに存在します GlassFish を C:\glassfish-4.1 にインストールした場合 C:\glassfish-4.1\bin に存在します 40
41 下記のコマンドを実行し 接続ファクトリである jms/topiccon と宛先リソースである jms/inforegtopic が表示されることを確認してください > asadmin list-jms-resources jms/inforegtopic jms/ defaultconnectionfactory jms/topiccon Command list-jms-resources executed successfully. 以上でメッセージ プロバイダの JMS リソースの作成は終了です 次のページに進んで下さい 参考情報 JMS リソースを asadmin コマンドで設定する方法以外に GlassFish の管理コンソールを使用して下記のように GUI で設定を行うことも可能です 管理コンソールで JMS リソースを作成する方法は 当資料の 参考資料 補足 にある JMS リソースの GUI による設定方法 をご参照下さい ( すでに asadmin コマンドで JMS リソース設定が完了している場合 この JMS リソースの GUI による設定方法 の手順を実施する必要はありません ) なお GlassFish の管理コンソールは ブラウザより下記 URL を指定することでアクセスできます URL を指定すると 下記のページが表示されます 図 50:GlassFish 管理コンソール
42 アプリケーション サーバの設定が完了したので アプリケーションの実装を行います Java EE コンテナ上で JMS のアプリケーションを実装する場合 アプリケーション サーバのリソースをインジェクトして実装を行います i 図 51:JMS アプリケーションの構築概念図 現在 アプリケーション サーバ上で設定されている内容は下記です 設定項目 JMS 接続ファクトリ JMS 宛先 設定値 jms/topiccon jms/inforegtopic 上記設定内容を元にプログラム側から JMS リソースをインジェクトしてメッセージ プロバイダに存在する Topic の宛先 (jms/inforegtopic) に対してメッセージをパブリッシュ 9 する実装を行います JSF のマネージド Bean として実装した IndexPageMgdBean クラスに対して下記のコードを追加してください package jp.co.oracle.cdis; import javax.annotation.resource; import javax.inject.named; import javax.enterprise.context.requestscoped; import javax.inject.inject; import javax.jms.jmsconnectionfactory; import javax.jms.jmscontext; import javax.jms.topic; 9 メッセージのパブリッシュはメッセージ送信を意味します 42
43 @Named(value = public class JMSContext = "jms/inforegtopic") Topic topic; private String message; public IndexPageMgdBean() { public String getmessage() { return message; public void setmessage(string message) { this.message = message; public String pushsendbutton() { context.createproducer().send(topic, getmessage()); return ""; メッセージのパブリッシュ ( 送信用 ) のコードは以上です JMSContext は Java EE 7 から追加されたクラスで このクラスを利用することで JMS アプリケーションの実装がとてもかんたんになります JMSContext を利用できるようにするために アプリケーション アノテーションでインジェクトします また Topic に対する JMS 宛先リソース アノテーションでインジェクトします メッセージを送信するためには JMSContext#createProducer() メソッドを呼び出して JMSProducer クラスのオブジェクトを生成し メッセージを送信します 上記のように Java EE 7 に含まれる JMS 2.0 ではメッセージ送信 (Queue, Topi 共に ) に必要な実装コードはとても短く またとてもかんたんに実装できます 43
44 続いてメッセージ受信用のコードを Message-Driven Bean (MDB) として実装します プロジェクトを選択したのち 右クリックし 新規 その他... を選択してください 図 52: 新規メッセージ駆動型 Bean の作成 選択すると下記のウィンドウが表示されます ここで カテゴリ (C): より Enterprise JavaBeans を選択し ファイル タイプ (F): より メッセージ駆動型 Bean を選択し 次 > ボタンを押下してください 図 53: 新規メッセージ駆動型 Bean の作成 44
45 ボタンを押下すると下記のウィンドウが表示されます ここで EJB 名 (N): に MessageListenerMDBImpl を入力し パッケージ (K) : に jp.co.oracle.ejbs を選択してください また サーバの宛先 (S): の部分で jms/inforegtopic を選択し最後に 次 > ボタンを押下してください 図 54:New メッセージ駆動型 Bean の作成 ボタンを押下すると下記のウィンドウが表示されます ここではデフォルトの設定のまま 終了 (F): ボタンを押下してください 図 55:New メッセージ駆動型 Bean の作成 45
46 ボタンを押下すると下記のコードが自動生成されます /* * To change this license header, choose License Headers in Project * Properties. * To change this template file, choose Tools Templates * and open the template in the editor. */ package jp.co.oracle.ejbs; import javax.ejb.activationconfigproperty; import javax.ejb.messagedriven; import javax.jms.message; import javax.jms.messagelistener; /** * *********** = = "destinationtype", propertyvalue = = "destinationlookup", propertyvalue = = "subscriptiondurability", propertyvalue = = "clientid", propertyvalue = = "subscriptionname", propertyvalue = "jms/inforegtopic") ) public class MessageListenerMDBImpl implements MessageListener { public MessageListenerMDBImpl() public void onmessage(message message) { コードを下記のように修正してください 下記の MDB は メッセージ プロバイダに存在する Topic (jms/inforegtopic) をサブスクライブ ( 購読 ) し Topic にテキスト メッセージがパブリッシュ ( 送信 ) された場合 onmessage () でそのメッセージを消費 ( 受信 ) し 受信したメッセージを標準出力に出力しています package jp.co.oracle.ejbs; import java.util.logging.level; import java.util.logging.logger; import javax.ejb.activationconfigproperty; import javax.ejb.messagedriven; import javax.jms.jmsexception; import javax.jms.message; import javax.jms.messagelistener; 46
47 import = = "destinationtype", propertyvalue = = "destinationlookup", propertyvalue = = "subscriptiondurability", propertyvalue = = "clientid", propertyvalue = = "subscriptionname", propertyvalue = "jms/inforegtopic") ) public class MessageListenerMDBImpl implements MessageListener { private static final Logger logger = Logger.getLogger( MessageListenerMDBImpl.class.getPackage().getName()); public MessageListenerMDBImpl() public void onmessage(message message) { TextMessage textmessage = (TextMessage) message; try { String text = textmessage.gettext(); System.out.println(text); catch (JMSException ex) { logger.log(level.severe, "recieve message failed :", ex); ソースコードの補足 10 上記でメッセージ受信の実装は完了です 10 MDB の activationconfig の設定で clientid", propertyvalue = "${com.sun.aas.instancename の項目があります これはクラスタ環境で 複数台のマシンで運用する場合 clientid に対して固有の名前を割り当てる必要があるため GlassFish 固有の設定を使用しています 実際にはインスタンス名がここに代入されます また subscriptiondurability の値がデフォルトで durable となっており NetBeans の自動生成コードのバグと思われます 実際には Durable ですので変更してください 47
48 ここで GlassFish が起動している場合 再起動を行います NetBeans 画面下部の 出力 で GlassFish Server 4.1 タブを選択します 下記の サーバーを停止 の 印アイコンが選択できる場合 起動状態になっています その場合 印アイコンを選択して GlassFish を停止して下さい GlassFish が停止していることを確認し プロジェクトを実行してください 図 56:NetBeans プロジェクトの実行 48
49 実行すると 下記の画面が表示されます テキスト フィールドに文字列を入力し Enter キーを押下するか もしくは Send Message ボタンを押下してください 図 57:Web ページに文字列を入力 NetBeans の 出力 ウィンドウの GlassFish Server 4.1 タブを選択すると GlassFish のログが出力されています ボタンを押下すると JSF の Web ページに入力した文字と同じ文字がログに出力されます 同じ文字が表示されていればメッセージ プロバイダを通じて メッセージの送受信が正常に行われています 図 58:GlassFish のログ出力 以上で JSF と JMS のアプリケーションの連携は完了です 49
50 5.0 WebSocket アプリケーションの作成 次に WebSocket アプリケーションを作成します WebSocket は HTTP をアップグレードした TCP ベースのプロトコルで 双方向 全二重の通信ができます また WebSocket プロトコルの仕様は RFC 6455 で定義され API は W3C によって定義されています 図 59:WebSocket について WebSocket はライフサイクル ( コネクションの接続 切断 メッセージ受信 エラー発生 ) を持ち それぞれのサイクルに対応した実装を行います 図 60:WebSocket のライフサイクル Java EE 7 では JSR 356 として Java API for WebSocket が新たに追加され 下記に示すアノテーションを使ってかんたんに WebSocket のエンドポイントの 50
51 実装ができます アノテーションは クライアント側の実装かサーバ側の実装化を識別するために用意された 11 ) アノテーションと WebSocket @OnError) のアノテーションは特別で RESTful Web サービスのように WebSocket のリクエスト URI パスの一部をパラメータとして扱う為に指定するアノテーションです 図 61:WebSocket のアノテーション 今回のアプリケーションはサーバ エンドポイント ( サーバ側 ) の実装行います JSR 356 の API を使用して簡単に WebSocket のサーバ エンドポイントが実装できることを確認してください 11 Java EE はサーバ サイドのテクノロジーを取り扱いますが JSR 356 準拠の実行環境はクライアント側の実装も提供します クライアントの API を利用することで JavaFX 等の Java クライアントから WebSocket サーバ エンドポイントへ接続するアプリケーションも実装できるようになります 51
52 この WebSocket アプリケーションは まず 情報受信者 ( クライアント エンドポイント ) が WebSocket のサーバ エンドポイントに接続し サーバ側で 情報受信者 の接続 切断情報を管理します 次に 前章で実装した MDB がメッセージ プロバイダの Topic を監視し メッセージを受信した際に接続されている全情報受信者に対して情報を発信します 図 62:WebSocket アプリケーションの概念図 まず WebSocket のサーバ エンドポイントを作成します プロジェクトをマウスで選択し右クリックしてください 次に 新規 その他... を選択してください 図 63:WebSocket サーバ エンドポイントの作成 選択すると下記のウィンドウが表示されます カテゴリ (C): より Web を選択し ファイル タイプ (F): より WebSocket エンドポイント を選択して 次 > ボタンを押下してください 52
53 図 64:WebSocket エンドポイントの作成 ボタンを押下すると下記のウィンドウが表示されます ここで クラス名 (N): に InfoTransServerEndopoint を入力し パッケージ (K): に jp.co.oracle.websockets WebSocket URI(U): に /infotrans を入力した後 最後に 終了 (F) ボタンを押下してください 図 65:New WebSocket エンドポイント 53
54 ボタンを押下すると下記のコードが自動的に生成されます /* * To change this license header, choose License Headers in Project * Properties. * To change this template file, choose Tools Templates * and open the template in the editor. */ package jp.co.oracle.websockets; import javax.websocket.onmessage; import javax.websocket.server.serverendpoint; /** * *********** public class InfoTransServerEndpoint public String onmessage(string message) { return null; 今回のアプリケーションでは WebSocket サーバ エンドポイントでは接続 切断の管理だけをおこない のメソッドを実装してください package jp.co.oracle.websockets; import javax.websocket.onclose; import javax.websocket.onopen; import javax.websocket.session; import public class InfoTransServerEndpoint public void initopen(session session) { System.out.println(" 接続 public void closewebsocket(session session) { System.out.println(" 切断 "); 54
55 次にこのサーバ エンドポイントに接続する HTML ファイルを作成します まず プロジェクト作成時に自動生成された index.xhtml ファイルを削除します 対象のファイルを選択し右クリックしてください メニューより 削除 を選択してください ここで削除するファイルは admin/index.xhtml ではありません 図 66: 既存ファイルの削除 削除を選択すると下記のダイアログ ウィンドウが表示されます ここで はい ボタンを押下してください 図 67: オブジェクト削除の確認 55
56 次に HTML ファイルを作成します プロジェクトを選択し右クリックしてください 次に 新規 その他... を選択してください 図 68: 新規 HTML ファイルの作成 選択すると下記のウィンドウが表示されます カテゴリ (C): より HTML5 を選択し ファイル タイプ (F): より HTML ファイル を選択し 次 > ボタンを押下してください 図 69: 新規 HTML ファイルの作成 56
57 ボタンを押下すると下記のウィンドウが表示されます ファイル名 (N): に client-endpoint を入力し フォルダ (L): に web を入力した後最後に 終了 (F) ボタンを押下してください 図 70: 新規 HTML ファイルの作成 ボタンを押下すると下記のコードが自動生成されます <!DOCTYPE html> <!-- To change this license header, choose License Headers in Project Properties. To change this template file, choose Tools Templates and open the template in the editor. --> <html> <head> <title>todo supply a title</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> </head> <body> <div>todo write content</div> </body> </html> 57
58 上記コードを WebSocket サーバ エンドポイントに接続するコードに修正します HTML に下記のコードを実装してください 下記のコードは WebSocket のサーバ エンドポイントを示す下記の URL に接続し ws://localhost:8080/websocket-hol/infotrans WebSocket の各ライフサイクルの実装を JavaScript で実装しています また WebSocket のサーバ エンドポイントに接続されている時は Connect ボタンを非表示にし DisConnect のボタンを表示します 逆に切断されている時は DisConnect ボタンを非表示にし Connect ボタンを表示しています <!DOCTYPE html> <html> <head> <title>websocket RealTime Infomation Transfer</title> <meta http-equiv="content-type" content="text/html; charset=utf- 8"/> <style type="text/css"> table,td,th { width: 700px; font-size: medium; border-collapse: collapse; border: 1px black solid; </style> <script language="javascript" type="text/javascript"> var websocket = null; var numberofmessage; function init() { numberofmessage = 0; document.getelementbyid("close").style.display = "none"; function closeserverendpoint() { websocket.close(4001, "Close connection from client"); document.getelementbyid("connect").style.display = "block"; document.getelementbyid("close").style.display = "none"; document.getelementbyid("server-port").disabled = false; function connectserverendpoint() { var host = document.getelementbyid("server-port").value; var wsuri = "ws://" + host + "/WebSocket-HoL/infotrans"; if ("WebSocket" in window) { websocket = new WebSocket(wsUri); else if ("MozWebSocket" in window) { websocket = new MozWebSocket(wsUri); else { websocket = new WebSocket(wsUri); websocket.onopen = function(evt) { onopen(evt); ; websocket.onmessage = function(evt) { onmessage(evt); ; websocket.onerror = function(evt) { 58
59 onerror(evt); ; websocket.onclose = function(evt) { closeserverendpoint(); ; document.getelementbyid("connect").style.display = "none"; document.getelementbyid("close").style.display = "block"; document.getelementbyid("server-port").disabled = true; function onopen(evt) { ; function onmessage(evt) { writetoscreen(evt.data); numberofmessage++; function onerror(evt) { writetoscreen("error: " + evt.data); function writetoscreen(messages) { var table = document.getelementbyid("tbl"); var row = table.insertrow(0); var cell1 = row.insertcell(0); cell1.style.color = "WHITE"; var textnode = document.createtextnode(messages); var z = numberofmessage % 2; if (z == 1) { cell1.style.backgroundcolor = "#669900"; else { cell1.style.backgroundcolor = "#ED9B09"; cell1.appendchild(textnode); window.addeventlistener("load", init, false); </script> </head> <body> <h2>websocket RealTime Infomation Transfer Sample Application!</h2> サーバ接続ポート番号 :<input id="server-port" type="text" value=""/> <input id="connect" type="button" value="connect" onclick="connectserverendpoint();"> <input id="close" type="button" value="disconnect" onclick="closeserverendpoint();"> <br/> <TABLE BORDER="1" ID="TBL"> </TABLE> </body> </html> 上記のコードを修正した後 NetBean のプロジェクトを実行してください 59
60 図 71:NetBeans プロジェクトの実行 NetBeans 実行したのち ブラウザより下記の URL にアクセスしてください アクセスすると下記の画面が表示されます 図 72:WebSocket クライアント エンドポイント 次に サーバ接続ポート番号 に localhost:8080 と入力し Connect DisConnect のボタンを数度押下してください ボタンを押下した際 GlassFish Server 4.1 のログを確認するとボタンの押下の度に 接続 切断 メッセージが繰り返し出力されている事が確認できます 図 73:GlassFish のログ確認 60
61 次に WebSocket のクライアント エンドポイントの情報をアプリケーション内で一元管理する Singleton EJB を作成します プロジェクトを選択し右クリックしてください 次に 新規 その他... を選択します 図 74: 新規 Singleton EJB の作成 選択すると下記のウィンドウが表示されます ここで カテゴリ (C): より Enterprise JavaBeans を選択し ファイル タイプ (F): より セッション Bean を選択し 次 > ボタンを押下してください 図 75: 新規 Singleton EJB の作成 61
62 ボタンを押下すると下記のウィンドウが表示されます ここで EJB 名 (N): に ClientManageSinglEJB パッケージ (K): に jp.co.oracle.ejbs が記入されている事を確認し セッションのタイプ : のラジオボタンに シングルトン を選択し 最後に 終了 (F) ボタンを押下してください 図 76:New セッション Bean ボタンを押下すると自動的に下記のコードが生成されます /* * To change this license header, choose License Headers in Project * Properties. * To change this template file, choose Tools Templates * and open the template in the editor. */ package jp.co.oracle.ejbs; import javax.ejb.singleton; import javax.ejb.localbean; /** * public class ClientManageSinglEJB { // Add business logic below. (Right-click in editor and choose // "Insert Code > Add Business Method") 62
63 今回 このシングルトンの EJB ではアプリケーションの起動時に EJB を初期化するため を付加しています この EJB では WebSocket のクライアント エンドポイントから接続された際にクライアントの Session 情報をコレクションに追加し (addclient) 切断された際にコレクションから削除 (removeclient) します 全クライアント情報は Set<Session> peers に含まれ 接続済みの全 WebSocket クライアント エンドポイントに対してメッセージを同期で送信するために sendmessage() メソッドを実装しています package jp.co.oracle.ejbs; import java.io.ioexception; import java.util.collections; import java.util.hashset; import java.util.set; import java.util.logging.level; import java.util.logging.logger; import javax.ejb.singleton; import javax.ejb.localbean; import javax.ejb.startup; @Startup public class ClientManageSinglEJB { private static final Logger logger = Logger.getLogger( ClientManageSinglEJB.class.getPackage().getName()); public ClientManageSinglEJB(){ private final Set<Session> peers = Collections.synchronizedSet(new HashSet<Session>()); public void addclient(session session) { peers.add(session); public void removeclient(session session) { peers.remove(session); public void sendmessage(string message){ for(session session : peers){ try { session.getbasicremote().sendtext(message); catch (IOException ex) { logger.log(level.severe, "Failed to send the message to Client :", ex); 63
64 WebSocket のクライアント エンドポイントの管理を行う Singleton EJB を作成したので WebSocket のサーバ エンドポイント側のコードも修正します WebSocket のサーバ エンドポイント側の実装を下記のように修正してください のアノテーションで ClientManageSinglEJB をインジェクトしています クライアントと接続した場合 ClientManageSinglEJB #addclient() メソッドを呼び出し 切断時に ClientManageSinglEJB #removeclient() メソッドを呼び出し クライアント エンドポイントを EJB で一元的に管理しています package jp.co.oracle.websockets; import javax.ejb.ejb; import javax.websocket.onclose; import javax.websocket.onopen; import javax.websocket.session; import javax.websocket.server.serverendpoint; import public class InfoTransServerEndpoint ClientManageSinglEJB public void initopen(session session) { public void closewebsocket(session session) { clmanager.removeclient(session); また MDB でメッセージを受信した際に 接続済みの全 WebSocket のクライアント エンドポイントに対してメッセージを配信するために MDB の実装を下記のように修正してください のアノテーションで ClientManageSinglEJB をインジェクトしています メッセージ プロバイダの Topic よりメッセージを受信した際に ClientManageSinglEJB#sendMessage() メソッドを呼び出しています package jp.co.oracle.ejbs; import java.util.logging.level; import java.util.logging.logger; import javax.ejb.activationconfigproperty; import javax.ejb.ejb; import javax.ejb.messagedriven; import javax.jms.jmsexception; import javax.jms.message; import javax.jms.messagelistener; import = "jms/inforegtopic", activationconfig = = " 64
65 destinationtype", propertyvalue = = "subscriptiondurability", propertyvalue = = "clientid", = "subscriptionname", propertyvalue="testsubscription") ) public class MessageListenerMDBImpl implements MessageListener { private static final Logger logger = Logger.getLogger( ClientManageSinglEJB public void onmessage(message message) { TextMessage textmessage = (TextMessage) message; try { String text = textmessage.gettext(); clmanager.sendmessage(text); catch (JMSException ex) { logger.log(level.severe, "onmessage() failed", ex); 上記のコードを修正した後 NetBeans のプロジェクトを実行してください 図 77:NetBeans プロジェクトの実行 65
66 プロジェクトを実行すると下記の画面が表示されます ここではそのまま何もせずにこの画面を保持したまま 別のブラウザもしくはブラウザの新規タブを開いてください 図 78: プロジェクトの実行画面 66
67 別のブラウザもしくは別のタブを開き下記の URL にアクセスしてください その後 サーバー接続ポート番号 に localhost:8080 を入力して Connect ボタンを押下してください 図 79: クライアント エンドポイントへ接続 67
68 ボタンを押下した後 index.xhtml の画面より こんにちは と入力し Send Message ボタンを押下するか Enter Key を押下してください メッセージを送信すると WebSocket のクライアント エンドポイント側で入力した文字が表示されます 図 80: アプリケーションの実行 以上で全アプリケーションの実装と動作確認は完了です 68
69 6.0 GlassFish クラスタ環境の構築と動作確認 次に WebSocket アプリケーションを大規模環境で運用するためにクラスタ環境を構築しクラスタ環境でアプリケーションを動作させます 今回はハンズオンとしてかんたんに実装 検証できることを目的としてプロジェクトを作成したため 情報提供者側の JSF アプリケーションと 情報受信者側の WebSocket アプリケーションを同一アプリケーションとして作成しました 下記のハンズオンでは 1 つの GlassFish クラスタを作成し クラスタ内に複数のインスタンスを作成し クラスタ環境でアプリケーションの動作確認を行います 図 81: 大規模クラスタ環境の構築概念図 補足本アプリケーションは MQ を介してメッセージの送受信を行うため 情報提供者側 情報受信者側それぞれを別のアプリケーションとして作成し 全く別の GlassFish サーバ インスタンスに対して配備することも可能です 情報提供者側のアプリケーションは DMZ 内のセキュリティに保護された環境に存在する GlassFish サーバ インスタンスに配備し 情報受信者側のアプリケーションは外部ネットワークから接続可能な GlassFish のサーバ インスタンスに配備する事でよりセキュアなメッセージ配信システムを構築することもできます 下記に示すハンズオンを正しく理解したのち 応用してセキュアな環境を構築してください 69
70 まず ブラウザで GlassFish の管理コンソールに接続 12 してください 接続したのち 左ペインより クラスタ を選択してください 選択すると下記の画面が表示されます ここで 新規... ボタンを押下してください 図 82:GlassFish クラスタの作成 12 asadmin のコマンドを使って構築する事もできますが ここでは かんたんに設定するために GUI の管理コンソールを使用して環境構築を行います 70
71 ボタンを押下すると下記の画面が右ペインに表示されます ここで クラスタ名 : に my-cluster を入力し 作成するサーバ インスタンス (0) の 新規... ボタンを 2 度押下してください ボタンを押下すると インスタンス名 重み の入力項目 ノード のコンボボックスが 2 行表示されますので 1 行目に instance1 100 localhost-domain1 を 2 行目に instance2 100 localhost-domain1 をそれぞれ入力し 最後に OK ボタンを押下してください 図 83:GlassFish 新規クラスタ 71
72 ボタンを押下すると 右ペインに下記の画面が表示されます 図 84:GlassFish クラスタの作成完了 ここで Select にチェックし クラスタの起動 ボタンを押下してください ボタンを押下すると下記の確認ダイアログ ウィンドウが表示されますので OK ボタンを押下してください 図 85: クラスタ起動確認ダイアログ ウィンドウ 72
73 クラスタが正常に起動すると右ペインに下記の画面が表示されます ここで instance1 instance2 がそれぞれ 稼働中 と表示されていることを確認してください 図 86:GlassFish クラスタ起動完了 73
74 次に 既存の JMS リソースをクラスタ環境でも利用できるように設定変更していきます 左ペインの JMS リソース ツリーを展開し 接続ファクトリ から jms/topiccon を選択してください 選択すると下記の画面が表示されます 図 87:JMS 接続ファクトリの編集 次に 右ペインより ターゲット タブを選択してください 選択すると右ペインに下記の画面が表示されます 図 88:JMS リソース ターゲットの設定 74
75 ここで ターゲットの管理... ボタンを押下してください 押下すると下記の画面が表示されます ここで 使用可能なターゲット : より my-cluster を選択し 追加 > ボタン もしくは すべてを追加 >> ボタンを押下してください 選択したターゲット : に my-cluster が含まれていることを確認し 最後に 保存 ボタンを押下してください 図 89:JMS リソース ターゲットの管理 ボタンを押下すると下記の画面が表示されます 図 90:JMS 接続ファクトリ リソースの設定完了 75
76 次に 左ペインの JMS リソース ツリーを展開し 宛先リソース から jms/inforegtopic を選択してください 選択すると下記の画面が表示されます 図 91:JMS 宛先リソースの設定 次に 右ペインより ターゲット タブを選択してください 選択すると下記の画面が表示されます 図 92:JMS 宛先リソースのターゲット 76
77 ここで ターゲットの管理... ボタンを押下してください 押下すると下記の画面が表示されます ここで 使用可能なターゲット : より my-cluster を選択し 追加 > ボタン もしくは すべてを追加 >> ボタンを押下してください 選択したターゲット : に my-cluster が含まれていることを確認し 最後に 保存 ボタンを押下してください 図 93:JMS 宛先リソース ターゲットの管理 ボタンを押下すると下記の画面が表示されます 図 94:JMS 宛先リソース設定完了 77
78 最後に 既存のデプロイ済の WebSocket-HoL アプリケーションをクラスタ環境でも利用できるように設定変更してください 左ペインの アプリケーション ツリーを展開し WebSocket-HoL を選択してください 選択すると下記の画面が表示されます 図 95: クラスタ環境におけるアプリケーションの有効化 次に 右ペインより ターゲット タブを選択してください 選択すると下記の画面が表示されます 図 96: アプリケーション ターゲット管理 78
79 ここで ターゲットの管理... ボタンを押下してください 押下すると下記の画面が表示されます ここで 使用可能なターゲット : より my-cluster を選択し 追加 > ボタン もしくは すべてを追加 >> ボタンを押下してください 選択したターゲット : に my-cluster が含まれていることを確認し 最後に 保存 ボタンを押下してください 図 97: アプリケーション ターゲットの管理 ボタンを押下すると下記の画面が表示されます 図 98: クラスタ環境におけるアプリケーションの有効化 79
80 アプリケーションがクラスタ環境で有効になりましたので クラスタの各インスタンスに接続しアプリケーションが正常に動作しているか確認を行ってください 動作確認を行うために まずクラスタ内の各インスタンスがどのポート番号で HTTP リクエストを待ち受けているかを確認します 左ペインの クラスタ ツリーを展開し my-cluster を選択してください 選択すると下記の画面が表示されます 図 99:GlassFish クラスタの各インスタンスの詳細確認 ここで インスタンス タブを選択してください 選択すると下記の画面が表示されます ここで instance1 のリンクを選択してください 図 100: クラスタ化されたサーバ インスタンス一覧 80
81 リンクを選択すると下記の画面が表示されます ここで プロパティ タブを選択してください 図 101: インスタンスの一般情報 プロパティ タブを選択すると下記の画面が表示されます ここで HTTP_LISTENER_PORT と記載されている変数名の 現在の値 を確認してください 図 102: インスタンスのシステム プロパティ 81
82 同様に instance2 の HTTP リスナーポート番号を調べてください 上記のシステムでは instance1 に が instance2 に が設定されてました ブラウザで 各インスタンスに接続し稼働していることを確認してください それぞれのインスタンスで 下記のように正常に表示されていることを確認してください 図 103:GlassFish のクラスタ化されたインスタンスの動作確認 82
83 各インスタンスの HTTP ポート番号が分かりましたので WebSocket アプリケーションに接続してください ここで サーバ接続ポート番号 に一つのブラウザでは localhost:28080 を そしてもう一つのブラウザには localhost:28081 と入力しそれぞれ Connect ボタンを押下してください 図 104: 情報受信者用の画面の表示 83
84 次に 情報提供者側の JSF のアプリケーションを別のブラウザ もしくはタブで表示してください もしくは 図 105: 情報提供者用の画面表示 全ての画面を表示したのち 情報提供者用の画面から文字を入力してください 情報受信者用の画面に同じ文字が表示されることを確認できます 図 106: クラスタ環境でのアプリケーション実行 84
85 今回 GlassFish のクラスタ環境で WebSocket アプリケーションを作成しました ステップバイステップで HoL 資料を作成しているためページ数は多くなっていますが 実際のコード記述量は決して多くありません JMS と組み合わせることでクラスタ環境でもアプリケーションの変更は一切なく WebSocket アプリケーションを大規模に展開できることがわかりました 今回は リアルタイムのメッセージ配信システムを構築しましたが 今回のアプリケーションを応用し またアイディア次第で様々な大規模 WebSocket アプリケーションを構築できるようになるかと思います 是非 Java EE 7 の機能を色々とお試しください 85
86 ボーナス演習 :jbatch アプリケーションの作成 Java EE 7 では 企業システムで多用されているバッチ処理機能を Java で実装するための仕様として JSR 352: Batch Applications for the Java Platform ( 以降 jbatch) が提供されています jbatch より Java によるバッチ処理を標準化された技術や API を使用して実装し GlassFish のような Java EE 7 準拠のコンテナで動作させることが可能になります この jbatch の主な構成要素としては下図のようなものが挙げられます WebSocketで動作するアプリ (Model jbatchの構成要素の実装例 ) JobOperator Job Repository Job Step 1 Step 2 Step 3 ItemReader ItemProcessor ItemWriter batchlet ItemReader ItemProcessor ItemWriter 1 Copyright 2015, Oracle and/or its affiliates. All rights reserved. 図 B1:jBatch の構成要素 バッチ処理は Job として構成します JobOperator は Job の実行や再実行の制御を行ったり Job の実行状況など管理します 1 つの Job には 複数の Step を構成することができ 処理の順序制御を定義します 例えば Step をグループ化したり 条件による分岐実行 並列実行など行うことができます また Step 内には 下記の実装を構成します Chunk 式の場合 1 つの Step に下記の 3 つの実装を含めます ItemReader : ソースからデータを読込む処理を実装するクラス ItemProcessor:ItemReader で読込んだデータに対する処理を実装するクラス ItemWriter : 処理済のデータを書込み コミットする処理を実装するクラス Batchlet 式の場合 1 つの Step に 1 つの実装クラスを含めます Batchlet: 任意のバッチ処理を実装するクラス 86
87 Chunk 式ではデータに対する処理のチェックポイント情報を管理できるため処理済のデータを対象にしないように JOB を再実行することもできます Batchlet 式は シンプルにその Step で実行したい任意の処理を実装します これら Job や Step やそのフロー Step に含まれる実装の指定については XML ファイルで定義します それでは実際に jbatch アプリケーションを作成してみましょう 今回は下記のようなシンプルな jbatch アプリケーションを作成します WebSocketで動作するアプリ (Model 作成するの実装例 jbatchアプリケーション ) Servlet: JobStartServlet JobOperator を使用して Job 開始 Job:simplejob Step: mychunk MyReader MyProcessor MyWriter ファイルから文字列を 1 行読込む 読み込んだ文字列を大文字に変換 変換した文字列を別ファイルに書込む test_in.txt javaee7 netbeans test_out.txt JAVAEE7 NETBEANS Step: mytask MyBatchlet mychunk ステップで作成されたファイルのサイズを出力する 2 Copyright 2015, Oracle and/or its affiliates. All rights reserved. 図 B2: 作成する jbatch アプリケーションのイメージ このアプリケーションでは simplejob という名前の Job を定義します simplejob には mychunk mytask という 2 つの Step を定義し mychunk ステップ終了後に mytask ステップが実行されるフローにします mychunk ステップでは chunk 式の実装クラスを作成し あるファイルを 1 行づつ読込み 読み込んだ文字列を大文字化し 最終的に別のファイルに書出すという処理を行います mytask ステップでは Batchlet 式の実装クラスを用意し mychunk ステップで書き込んだファイルのサイズを標準出力に書き出す処理を行います 今回は サーブレットから JobOperator を使用してこの simplejob の実行を開始します なお この演習では Java コードや XML などの入力が多いため この PDF ファイルから随時コピー ペーストを行って下さい 87
88 まず mychunk ステップで読込むファイルを作成します テキスト エディタを使用して test_in.txt というファイルを作成し 下記のように半角小文字で文字列を複数行入力して保存します このハンズオンでは C:\Temp\test_in.txt(Windows) で作成した前提とします 図 B3: 読込むファイルの内容 次に jbatch アプリケーション用の新規プロジェクトを作成します メニューから ファイル (F) 新規プロジェクト (W)... を選択してください 図 B4: 新規プロジェクト 88
89 新規プロジェクト (W)... を選択すると下記のウィンドウが表示されます カテゴリ (C) : より Java Web を選択し プロジェクト (P): より Web アプリケーション を選択し 次 > ボタンを押下してください 図 B5: プロジェクト選択 次 > ボタンを押下すると下記のウィンドウが表示されます プロジェクト名 : に jbatch-hol と入力し 次 > ボタンを押下してください 図 B6: プロジェクト名と場所 89
90 次 > ボタンを押下すると下記の画面が表示されます コンテキスト パス (P): の変更は今回不要なので そのまま 終了 ボタンを押下してください 図 B7: サーバーと設定 終了 (F) ボタンを押下すると下記の画面が表示されます 図 B8: プロジェクト作成後の状態 90
91 今回作成するアプリケーションに必要なライブラリをプロジェクトに追加します はじめにプロジェクトをマウスで選択してください 選択したのち 右クリックし プロパティ を選択してください 図 B9: プロジェクトのプロパティ 選択すると 下記のウィンドウが表示されます ここで カテゴリ (C): より ライブラリ を選択し 右側にある ライブラリの追加 (L)... ボタンを押下してください 図 B10: プロジェクトへライブラリ追加 91
92 ボタンを押下すると下記のウィンドウが表示されます ここでは Java EE 7 API ライブラリ を選択して ライブラリの追加 ボタンを押下して下さい 図 B11: 追加するライブラリの選択 ボタンを押下すると下記のウィンドウが表示されます コンパイル時ライブラリ に Java EE 7 API ライブラリ が追加されていることを確認し OK ボタンを押下して下さい 図 B12: 追加されたライブラリの確認 次に Job 内のステップやフロー 実装クラスなどを定義する XML ファイルを作成します この Job 定義 XML ファイルは META-INF\batch-jobs というフォルダに配置する必要があるため このフォルダを作成します 92
93 ソース パッケージ をマウスで選択してください 選択したのち 右クリックし 新規... フォルダ を選択してください 図 B13: フォルダの作成 選択すると下記のウィンドウが表示されます ここで フォルダ名 (N): に META-INF\batch-jobs を入力し 最後に 終了 (F) ボタンを押下してください 図 B14: フォルダ名と場所の指定 ボタンを押下すると プロジェクトの ソース パッケージ フォルダ配下に META-INF batch-jobs フォルダが作成されます 実際は META-INF フォルダの下に batch-jobs フォルダが作成されています 93
94 図 B15: 作成したフォルダの確認 フォルダを作成したので 次に Job を定義する XML ファイルを作成します ソース パッケージの META-INF batch-jobs をマウスで選択してください 選択したのち 右クリックし 新規... その他 を選択してください 図 B16:XML ファイルの作成 94
95 選択すると下記のウィンドウが表示されます カテゴリ (C) : より XML を選択し ファイルタイプ (F): より XML ドキュメント を選択し 次 > ボタンを押下してください 図 B17: ファイルタイプの選択 次 > ボタンを押下すると下記のウィンドウが表示されます ファイル名名 (N): に simplejob と入力し 次 > ボタンを押下してください 図 B18: ファイル名と場所の指定 95
96 次 > ボタンを押下すると下記のウィンドウが表示されます 整形式のドキュメント を選択し 終了 (F) ボタンを押下してください 図 B19: ドキュメント タイプの選択 ボタンを押下すると下記の XML が自動生成されます <?xml version="1.0" encoding="utf-8"?> <!-- To change this license header, choose License Headers in Project Properties. To change this template file, choose Tools Templates and open the template in the editor. --> <root> </root> 96
97 自動生成された XML ファイルを下記のように修正してください ( 必要に応じて この PDF ファイルの内容からコピー ペーストを行って下さい ) <?xml version="1.0" encoding="utf-8"?> <job id="simplejob" xmlns:xsi=" xsi:schemalocation=" 1_0.xsd" xmlns=" version="1.0" > <properties> <property name="input_file" value="c:\\temp\\test_in.txt"/> <property name="output_file" value="c:\\temp\\test_out.txt"/> </properties> </job> <step id="mychunk" next="mytask"> <chunk> <reader ref="myreader"></reader> <processor ref="myprocessor"></processor> <writer ref="mywriter"></writer> </chunk> </step> <step id="mytask"> <batchlet ref="mybatchlet"></batchlet> <end on="completed"/> </step> 上記では job 要素と step 要素を使用し mychunk ステップと mytask ステップを含む simplejob という Job を定義しています mychunk ステップを定義する step 要素の next 属性で mytask ステップを指定しており mychunk ステップ終了後に mytask ステップを実行するというフローを定義しています mytask ステップでは end 要素にて この Job の終了ステータスが正常終了になるための条件を設定しています 今回は Batchlet が on 属性で指定した文字列 "COMPLETED" を返した場合に正常終了とします また mychunk ステップの chunk 要素と mytask ステップの batchlet 要素で それぞれ実装クラスを指定しています さらに properties 要素で mychunk ステップの中で読込むファイル 書込むファイルの物理パスを Job のプロパティとして指定しています これらは実装クラスからプロパティ名を指定することで取得することができます 97
98 それでは 各ステップのバッチ処理を実装していきます まず mychunk ステップでデータのチェックポイントを管理するためのクラスを作成します プロジェクトをマウスで選択してください 選択したのち 右クリックし 新規... Java クラス を選択してください 図 B20: チェックポイント情報を管理するクラスの作成 選択すると下記のウィンドウが表示されます クラス名 (N) : に MyCheckpoint を入力し パッケージ (K): に jp.co.oracle.batch と入力し 終了 ボタンを押下してください 図 B21: ファイル名と場所の指定 98
99 ボタンを押下すると下記のコードが自動生成されます /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools Templates * and open the template in the editor. */ package jp.co.oracle.batch; /** * tnobe */ public class MyCheckpoint { コードを下記のように修正してください 下記は チェックポイントとして処理しているファイルの行数を管理するためのコードです import java.io.serializable; public class MyCheckpoint implements Serializable { private long linenum = 0; public void increase() { linenum++; public long getlinenum() { return linenum; 99
100 次に mychunk ステップの ItemReader となる MyReader クラスを作成します ソース パッケージの jp.co.oracle.batch をマウスで選択してください 選択したのち 右クリックし 新規... Java クラス を選択してください 図 B22:MyReader クラスの作成 選択すると下記のウィンドウが表示されます クラス名 (N) : に MyReader を入力し パッケージ (K): に jp.co.oracle.batch が設定されていることを確認し 終了 ボタンを押下してください 図 B23: ファイル名と場所の指定 100
101 ボタンを押下すると下記のコードが自動生成されます /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools Templates * and open the template in the editor. */ package jp.co.oracle.batch; /** * tnobe */ public class MyReader { まずコードを下記のように修正してください public class MyReader implements javax.batch.api.chunk.itemreader { 次に ソースの行番号部分の電球アイコン ( 下記の丸印部分 ) をマウスでクリックします クリックするとポップアップ メニューが表示されます そのメニューから すべての抽象メソッドを実装 を選択してください 図 B24: 抽象メソッドの実装 すべての抽象メソッドを実装 メニューを選択すると下記のメソッドのコードが自動生成されます public class MyReader implements javax.batch.api.chunk.itemreader public void open(serializable checkpoint) throws Exception { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools Templates. 101
102 @Override public void close() throws Exception { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools public Object readitem() throws Exception { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools public Serializable checkpointinfo() throws Exception { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools Templates. コードを下記のように修正してください package jp.co.oracle.batch; import java.io.bufferedreader; import java.io.filereader; import java.io.serializable; import javax.batch.runtime.context.jobcontext; import javax.enterprise.context.dependent; import javax.inject.inject; public class MyReader implements javax.batch.api.chunk.itemreader { private MyCheckpoint mycheckpoint; private BufferedReader JobContext jobctx; public MyReader() public void open(serializable checkpoint) throws Exception { if (checkpoint == null) { mycheckpoint = new MyCheckpoint(); else { mycheckpoint = (MyCheckpoint) checkpoint; String filename = jobctx.getproperties().getproperty("input_file"); breader = new BufferedReader(new FileReader(fileName)); for (long i = 0; i < mycheckpoint.getlinenum(); i++) { breader.readline(); 102
103 @Override public void close() throws Exception { public Object readitem() throws Exception { String line = breader.readline(); return public Serializable checkpointinfo() throws Exception { return mycheckpoint; 上記のコードについては 下表を参考にして下さい ItemReader のメソッド メソッドの用途 MyReader の実装 void open(serializable checkpoint) 処理対象のデータのソースにアクセスし引数のチェックポイントから対象データを選別 ファイルを開き チェックポイント情報をもとに BufferdReader で対象の行まで読込み位置を進める void close() Object readitem() Serializable checkpointinfo() open メソッドで使用したリソースを解放する データを 1 件取出す null を返すと取出し完了となる チェックポイント情報を返す (Job Repository 側でカウントさせるため ) BufferdReader をクローズ BufferdReader でデータを 1 行読込む MyCheckpoint のインスタンスを返す 103
104 次に mychunk ステップの ItemProcessor となる MyProcessor クラスを作成します ソース パッケージの jp.co.oracle.batch をマウスで選択してください 選択したのち 右クリックし 新規... Java クラス を選択してください 図 B25:MyProcessor クラスの作成 選択すると下記のウィンドウが表示されます クラス名 (N) : に MyProcessor を入力し パッケージ (K): に jp.co.oracle.batch が設定されていることを確認し 終了 ボタンを押下してください 図 B26: ファイル名と場所の指定 104
105 ボタンを押下すると下記のコードが自動生成されます /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools Templates * and open the template in the editor. */ package jp.co.oracle.batch; /** * tnobe */ public class MyProcessor { まずコードを下記のように修正してください public class MyProcessor implements javax.batch.api.chunk.itemprocessor { 次に ソースの行番号部分の電球アイコン ( 下記の丸印部分 ) をマウスでクリックします クリックするとポップアップ メニューが表示されます そのメニューから すべての抽象メソッドを実装 を選択してください 図 B27: 抽象メソッドの実装 105
106 すべての抽象メソッドを実装 メニューを選択すると下記のメソッドのコードが自動生成されます public class MyProcessor implements javax.batch.api.chunk.itemprocessor public Object processitem(object item) throws Exception { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools Templates. コードを下記のように修正してください package jp.co.oracle.batch; import javax.enterprise.context.dependent; public class MyProcessor implements javax.batch.api.chunk.itemprocessor { public MyProcessor() public Object processitem(object item) throws Exception { String line = (String) item; return line.touppercase(); 上記のコードについては 下表を参考にして下さい ItemProcessor のメソッド メソッドの用途 MyProcessor の実装 Object processitem(object item) ItemReader の readitem() メソッドで読込まれたデータに対して必要な処理を行う データ ( 文字列 ) を大文字化する 106
107 次に mychunk ステップの ItemWrite となる MyWriter クラスを作成します ソース パッケージの jp.co.oracle.batch をマウスで選択してください 選択したのち 右クリックし 新規... Java クラス を選択してください 図 B28:MyWriter クラスの作成 選択すると下記のウィンドウが表示されます クラス名 (N) : に MyWriter を入力し パッケージ (K): に jp.co.oracle.batch が設定されていることを確認し 終了 ボタンを押下してください 図 B29: ファイル名と場所の指定 107
108 ボタンを押下すると下記のコードが自動生成されます /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools Templates * and open the template in the editor. */ package jp.co.oracle.batch; /** * tnobe */ public class MyWriter { まずコードを下記のように修正してください public class MyWriter implements javax.batch.api.chunk.itemwriter { 次に ソースの行番号部分の電球アイコン ( 下記の丸印部分 ) をマウスでクリックします クリックするとポップアップ メニューが表示されます そのメニューから すべての抽象メソッドを実装 を選択してください 図 B30: 抽象メソッドの実装 すべての抽象メソッドを実装 メニューを選択すると下記のメソッドのコードが自動生成されます public class MyWriter implements javax.batch.api.chunk.itemwriter public void open(serializable checkpoint) throws Exception { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools Templates. 108
109 @Override public void close() throws Exception { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools public void writeitems(list<object> items) throws Exception { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools public Serializable checkpointinfo() throws Exception { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools Templates. コードを下記のように修正してください package jp.co.oracle.batch; import java.io.bufferedwriter; import java.io.filewriter; import java.io.serializable; import java.util.list; import javax.batch.runtime.context.jobcontext; import javax.enterprise.context.dependent; import javax.inject.inject; public class MyWriter implements javax.batch.api.chunk.itemwriter { private BufferedWriter private JobContext public void open(serializable checkpoint) throws Exception { String filename = jobctx.getproperties().getproperty("output_file"); bwriter = new BufferedWriter(new FileWriter(fileName, (checkpoint!= public void close() throws Exception { public void writeitems(list<object> items) throws Exception { for (int i = 0; i < items.size(); i++) { 109
110 String line = (String) items.get(i); bwriter.write(line); public Serializable checkpointinfo() throws Exception { return new MyCheckpoint(); 上記のコードについては 下表を参考にして下さい ItemWriter のメソッド メソッドの用途 MyWriter の実装 void open(serializable checkpoint) 主に処理対象のデータの書込みの事前準備処理を実装 また引数のチェックポイントを使用しデータの対象を選別 書込み用ファイルをと BufferdWriter を生成 チェックポイント情報が null ならファイルは上書き作成 null でなければ Append モード void close() Void writeitems(list<object> items) Serializable checkpointinfo() open メソッドで使用したリソースを解放する 引数のデータを全て 1 トランザクションで書込む チェックポイント情報を返す (Job Repository 側でカウントさせるため ) BufferdWriter をクローズ BufferdWriter に引数のデータを全て書込み MyCheckpoint のインスタンスを返す 110
111 次に mytask ステップの Batchlet となる MyBatchlet クラスを作成します ソース パッケージの jp.co.oracle.batch をマウスで選択してください 選択したのち 右クリックし 新規... Java クラス を選択してください 図 B31:MyBatchlet クラスの作成 選択すると下記のウィンドウが表示されます クラス名 (N) : に MyBatchlet を入力し パッケージ (K): に jp.co.oracle.batch が設定されていることを確認し 終了 ボタンを押下してください 図 B32: ファイル名と場所の指定 111
112 ボタンを押下すると下記のコードが自動生成されます /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools Templates * and open the template in the editor. */ package jp.co.oracle.batch; /** * tnobe */ public class MyBatchlet { まずコードを下記のように修正してください public class MyBatchlet implements javax.batch.api.batchlet { 次に ソースの行番号部分の電球アイコン ( 下記の丸印部分 ) をマウスでクリックします クリックするとポップアップ メニューが表示されます そのメニューから すべての抽象メソッドを実装 を選択してください 図 B33: 抽象メソッドの実装 すべての抽象メソッドを実装 メニューを選択すると下記のメソッドのコードが自動生成されます public class MyBatchlet implements public String process() throws Exception { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools Templates. 112
113 @Override public void stop() throws Exception { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools Templates. コードを下記のように修正してください package jp.co.oracle.batch; import java.io.file; import javax.batch.runtime.context.jobcontext; import javax.enterprise.context.dependent; import javax.inject.inject; public class MyBatchlet implements private JobContext public String process() throws Exception { String filename = jobctx.getproperties().getproperty("output_file"); System.out.println("FILE LENGTH:" + (new File(fileName)).length()); return public void stop() throws Exception { // Nothing 上記のコードについては 下表を参考にして下さい Batchlet のメソッド メソッドの用途 MyBatchlet の実装 String process() 任意の処理を行う mychunk ステップで書き込んだファイルサイズを取得し 標準出力に出力 JOB 定義 XML の end 要素の on 属性に指定した正常終了するための文字列 "COMPLETED" を返す void stop() JobOperator で stop メ ( 無し ) 113
114 ソッドが実行されたときに必要な処理を行う 以上で バッチ Job の実装は完了です この時点で プロジェクトには下記のファイルが作成されていることを確認 s ます 図 B34: バッチ処理実装クラスの確認 次にバッチの Job を実行するためのサーブレットを作成します プロジェクトをマウスで選択してください 選択したのち 右クリックし 新規... サーブレット を選択してください 図 B35:Job を開始するサーブレットの作成 114
115 選択すると下記のウィンドウが表示されます クラス名 (N) : に JobStartServlet を入力し パッケージ (K): に jp.co.oracle.servlet と入力し 次 > ボタンを押下してください 図 B36: サーブレットのクラス名と場所の指定 ボタンを押下すると下記のウィンドウが表示されます URL パターン ( 複数可 ) に /JobStartServlet と設定されていることを確認し 終了 ボタンを押下してください 図 B37: サーブレット名や URL パターンの指定 115
116 ボタンを押下するとサーブレットのコードが自動生成されます 今回 このサーブレットで JobOperator を使用して Job を開始し その Job の ID や開始時間 終了時間 終了ステータスを取得 表示する処理を実装します まず サーブレットのコードに下記のように import 文を追加して下さい /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools Templates * and open the template in the editor. */ package jp.co.oracle.servlet; import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.annotation.webservlet; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import javax.batch.operations.joboperator; import javax.batch.runtime.batchruntime; import javax.batch.runtime.jobexecution; import java.util.date; その後 サーブレットの processrequest メソッドの中に 下記のようにコードを追加して下さい protected void processrequest(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype("text/html;charset=utf-8"); try (PrintWriter out = response.getwriter()) { /* TODO output your page here. You may use following sample code. */ out.println("<!doctype html>"); out.println("<html>"); out.println("<head>"); out.println("<title>servlet JobStartServlet</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>servlet JobStartServlet at " + request.getcontextpath() + "</h1>"); // JobOperator job = BatchRuntime.getJobOperator(); long id = job.start("simplejob", null); JobExecution je = job.getjobexecution(id); String jobname = je.getjobname(); Date starttime = je.getstarttime(); out.println( "JOB:" + jobname + ", STARTED:" + starttime + ",ID: " + id + "<BR>"); try { Thread.sleep(1000L); 116
117 catch (Exception ex) { ex.printstacktrace(); Date endtime = je.getendtime(); String exitstatus = je.getexitstatus(); out.println( "JOB:" + jobname + ", ENDED:" + endtime + ",exitstatus:" + exitstatus); // out.println("</body>"); out.println("</html>"); この時点で プロジェクトには下記のファイルが作成されていることを確認します 図 B38: プロジェクトの確認 確認後 プロジェクトを実行してください 図 B39: プロジェクトの実行 117
118 実行すると Web ブラウザで下記の画面が表示されます 図 B40: プロジェクトの実行 Web ブラウザで下記の URL を指定して JobStartServlet を実行して下さい サーブレットを実行すると 下記のような画面が表示されます 図 B42:JobStartServlet の実行 118
119 では Job の実行結果を確認していきます NetBeans の GlassFish 4.1 のコンソールを確認すると FILE LENGTH: とファイルサイズの数値が表示されていることを確認できます 図 B43:mytask ステップの実行結果 次に test_out.txt ファイル ( この資料では c:\temp\test_out.txt) が作成されているかを確認します また test_out.txt をテキスト エディタで開いて test_in.txt に入力した文字列が全て大文字になっていることを確認します 図 B44:mychunk ステップの実行結果確認 以上で jbatch アプリケーション作成の演習は終了です 119
120 参考資料 補足 本ハンズオン ラボの WebSocket-HoL プロジェクトの全ソースコード Java EE SDK Download GlassFish/OpenMQ 関連ドキュメント Java EE 7 詳細説明資料 The Java EE 7 Tutorial 120
121 JMS リソースの GUI による設定方法次に左ペインより JMS リソース のツリーを展開し 接続ファクトリ を選択します 選択すると下記の画面が表示されますので 新規... ボタンを押下してください 図 A:JMS 接続ファクトリ ボタンを押下すると右ペインに下記の画面が表示されます ここで JNDI 名 : に jms/topiccon と入力し OK ボタンを押下してください 図 B: 新規 JMS 接続ファクトリ 121
122 次に JMS の 宛先リソース を作成します JMS リソース のツリーを展開し 宛先リソース を選択します 選択すると下記の画面が表示されますので 新規... ボタンを押下してください 図 C:JMS 宛先リソース ボタンを押下すると右ペインに下記の画面が表示されます ここで JNDI 名 : に jms/inforegtopic 物理宛先名 に phisicaltopic と入力し OK ボタンを押下してください 図 D: 新規 JMS 宛先リソース 122
123 OpenMQ の管理 監視用コマンドのご紹介 OpenMQ の imqcmd を利用して 本アプリケーション用に作成した Topic : phisicaltopic のサブスクライバを確認してみます 下記の imqcmd を実行し クライアント ID にインスタンス名 (instance1, instance2) が表示され ACTIVE になっていることを確認できます OpenMQ の状態を確認するためには imqcmd を使用し確認できます コマンドプロンプトで下記に移動して imqcmd を実行できます <GlassFish インストールディレクトリ >\mq\bin コマンド例 > imqcmd list dur -b localhost: d phisicaltopic ユーザ名 :admin, パスワード :admin 図 E:imqcmd の実行例 以上 123
[HO-2] NetBeansとGlassFishではじめるJava EE7ハンズオン
Java EE 7 ハンズオン概要 日本オラクル株式会社 Oracle University 野邊 哲男 Java Day Tokyo 2016 2016 年 5 月 24 日 Copyright 2016, Oracle and/or its affiliates. All rights reserved. Safe Harbor Statement The following is intended
サーブレット (Servlet) とは Web サーバ側で動作する Java プログラム 通常はapache 等のバックグラウンドで動作する Servletコンテナ上にアプリケーションを配置 代表的な Servlet コンテナ Apache Tomcat WebLogic WebSphere Gla
サーブレット 1 オブジェクト指向プログラミング特論 サーブレット (Servlet) とは Web サーバ側で動作する Java プログラム 通常はapache 等のバックグラウンドで動作する Servletコンテナ上にアプリケーションを配置 代表的な Servlet コンテナ Apache Tomcat WebLogic WebSphere GlassFish 2 オブジェクト指向プログラミング特論
intra-mart Accel Platform — イベントナビゲータ 開発ガイド 初版
Copyright 2013 NTT DATA INTRAMART CORPORATION 1 Top 目次 intra-mart Accel Platform イベントナビゲータ開発ガイド初版 2013-07-01 改訂情報概要イベントフローの作成 更新 削除をハンドリングするイベントフローを非表示にする回答を非表示にするリンクを非表示にするタイトル コメントを動的に変更するリンク情報を動的に変更するナビゲート結果のリンクにステータスを表示する
Eclipse 操作方法 (Servlet/JSP 入門補助テキスト)
Eclipse 操作方法 (Servlet/JSP 入門補助テキスト) 1. プロジェクトの作成 Eclipse はプロジェクトという単位でプログラムを管理します. 今回のサンプルを実行する為のプロジェクトとして intro プロジェクトを作成します. 1-1. Eclipse 左のツリー画面から空白部分を右クリックし New - Project... を選択します. 1-2. Web - Dynamic
Oracle SOA Suite 11gコンポジットに対するSOASchedulerの構成
Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 オラクル Senior Solution Architect Robert Baumgartner 2010 年 11 月 Oracle SOA Suite 11g コンポジットに対する SOAScheduler の構成 1 前提条件 https://soasamples.samplecode.oracle.com/
intra-mart Accel Platform — イベントナビゲータ 開発ガイド 初版 None
クイック検索検索 目次 Copyright 2013 NTT DATA INTRAMART CORPORATION 1 Top 目次 intra-mart Accel Platform イベントナビゲータ開発ガイド初版 2013-07-01 None 改訂情報概要イベントフローの作成 更新 削除をハンドリングするイベントフローを非表示にする回答を非表示にするリンクを非表示にするタイトル コメントを動的に変更するリンク情報を動的に変更するナビゲート結果のリンクにステータスを表示する
メディプロ1 Javaサーブレット補足資料.ppt
メディアプロジェクト演習 1 Java サーブレット補足資料 CGI の基本 CGI と Java サーブレットの違い Java サーブレットの基本 インタラクティブな Web サイトとは Interactive q 対話 または 双方向 q クライアントとシステムが画面を通して対話を行う形式で操作を行っていく仕組み 利用用途 Web サイト, シミュレーションシステム, ゲームなど WWW = インタラクティブなメディア
WebOTXマニュアル
WebOTX アプリケーション開発ガイド WebOTX アプリケーション開発ガイドバージョン : 7.1 版数 : 初版リリース : 2007 年 7 月 Copyright (C) 1998-2007 NEC Corporation. All rights reserved. 付録 4-2-1 目次 4. プログラミング 開発 (WebOTX)...3 4.2. EJBアプリケーション...3 4.2.1.
intra-mart Accel Platform — IM-Repository拡張プログラミングガイド 初版
Copyright 2018 NTT DATA INTRAMART CORPORATION 1 Top 目次 1. 改訂情報 2. はじめに 2.1. 本書の目的 2.2. 対象読者 2.3. サンプルコードについて 2.4. 本書の構成 3. 辞書項目 API 3.1. 最新バージョン 3.1.1. 最新バージョンの辞書を取得する 3.2. 辞書項目 3.2.1. 辞書項目を取得する 3.2.2.
Java EE 7 アプリケーション設計ガイド - JSF(JavaServer Faces) 2.2 入門編
Java EE 7 アプリケーション設計ガイド - JSF(JavaServer Faces) 2.2 入門編 日本アイ ビー エムシステムズ エンジニアリング株式会社 1 Disclaimer この資料は日本アイ ビー エム株式会社ならびに日本アイ ビー エムシステムズ エンジニアリング株式会社の正式なレビューを受けておりません 当資料は 資料内で説明されている製品の仕様を保証するものではありません
1 検証概要 目的及びテスト方法 1.1 検証概要 Micro Focus Server Express 5.1 J の Enterprise Server が提供する J2EE Connector 機能は 多くの J2EE 準拠アプリケーションサーバーについて動作検証がなされています 本報告書は
Micro Focus Server Express 5.1 J for AIX 7.1 IBM WebSphere Application Server 8.0.0.0 動作検証結果報告書 2011 年 11 月 10 日マイクロフォーカス株式会社 Copyright 2011 Micro Focus. All Rights Reserved. 記載の会社名 製品名は 各社の商標または登録商標です
PowerPoint プレゼンテーション
情報システム基礎演習 B 2016/01/28 (Thurs.) テーマ 4 JavaScript による電卓 Web アプリを作成しましょう 健山智子 ([email protected]) 広島工業大学情報学部知的情報システム学科知的情報可視化戦略研究室 (ival) 講義のアウトライン 2 1. グループの決定 : 1. 5 人での 6 グループ ( ランダム
TestDesign for Web
発行日 2012/6/21 発行元 株式会社アープ 本書は Web でのテスト自動化における Test Design の一連の操作方法まとめたものです Test Design のメニューの説明やより詳細な使い方については ユーザーズガイド を参照してください 目次 1. はじめに... 1 2. 環境構築... 2 2.1. Selenium のサイトについて... 2 2.2. Selenium
PowerPoint プレゼンテーション
5 月 Java 基礎 1 タイトル Java 基礎 2 日間 概要 目的 サーバサイドのプログラミング言語で最もシェアの高い Java SE の基本を習得します 当研修ではひとつの技術ごとに実用的なアプリケーションを作成するため 効果的な学習ができます Java SE の多くの API の中で 仕事でよく利用するものを中心に効率よく学びます 実際の業務で最も利用される開発環境である Eclipse
Team Foundation Server 2018 を使用したバージョン管理 補足資料
Team Foundation Server 2018 を使用したバージョン管理 Magic xpa 3.0/Magic xpa 2.5/uniPaaS V1Plus 補足資料 マジックソフトウェア ジャパン株式会社 2018 年 8 月 24 日 本ドキュメントは Magic xpa 3.0/Magic xpa 2.5/uniPaaS V1Plus で Team Foundation Server(
JD Edwards EnterpriseOneリアルタイム・イベントのOracle Enterprise Service Busへのパブリッシュ
JD Edwards EnterpriseOne リアルタイム イベントの Oracle Enterprise Service Bus へのパブリッシュ 概要 このチュートリアルでは JD Edwards EnterpriseOne(JDE E1) のリアルタイム イベント (RTE) を Oracle Enterprise Service Bus(Oracle ESB) にパブリッシュする手順について説明します
ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar
ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spark API との通信 このラーニングモジュールでは Python を使用した Spark API とのインターフェイスを扱います
WebOTXマニュアル
WebOTX アプリケーション開発ガイド WebOTX アプリケーション開発ガイドバージョン : 7.1 版数 : 第 2 版リリース : 2010 年 1 月 Copyright (C) 1998-2010 NEC Corporation. All rights reserved. 3-1 目次 3. J2EE WebOTX...3 3.1. Webアプリケーション...3 3.1.1. WARファイルをインポートするとタスクにエラーが表示される...3
SpringSecurity
Spring Security 1/40 OUTLINE Spring Security Spring Securityを使った認証の仕組み Spring Securityを使った独自認証 認証エラーメッセージの変更 2/40 Spring Security 3/40 Spring Security とは アプリケーションのセキュリティを高めるためのフレームワーク 認証 認可機能 その他 多数のセキュリティ関連の機能を持つ
intra-mart Accel Platform
セットアップガイド (WebSphere 編 ) 第 4 版 2014-01-01 1 目次 intra-mart Accel Platform 改訂情報 はじめに 本書の目的 前提条件 対象読者 各種インストール 設定変更 intra-mart Accel Platform 構成ファイルの作成 WebSphereの設定 Java VM 引数の設定 トランザクション タイムアウトの設定 データベース接続の設定
PowerPoint Presentation
ソフトウェア演習 B GUI を持つ Java プログラムの 設計と実装 4.1 例題 :GUI を持った電卓を作ろう プロジェクトCalculator パッケージ名 :example ソースファイル : Calculator.java GUI.java EventProcessor.java 2 4.2 GUI とイベント処理 GUI の構成 :Swing GUI の場合 フレーム JFrame:
Prog2_6th
2017 年 11 月 2 日 ( 木 ) 実施 インテントインテントとは Android アプリは複数のアクティビティを持つことが出来, また, アクティビティ以外の要素も持つので, 複数のアクティビティ間, アクティビティとアクティビティ以外の要素との間といったオブジェクト間を結び付ける仕組みが必要となる その役割を担うのがインテントで, 複数のアプリ間やアプリとシステムとの間もインテントで結び付けることが出来る
ADempiere (3.5)
ADempiere (3.5) インストールマニュアル ADempiere Community Contents 改定履歴... 3 1 はじめに... 4 2 動作環境... 4 3 事前準備... 5 3.1 Java JDK のセットアップ... 5 3.1.1 Java JDK のダウンロード... 5 3.1.2 Java JDK のインストール... 5 3.1.1 Java JDK のパス設定...
Microsoft PowerPoint - Tutorial_2_upd.ppt
2 Eclipse を使った Bluemix アプリケーション開発 1 ハンズオン手順 ハンズオンの概要 Eclipse から Java アプリをデプロイする 公開されているプロジェクトをインポートする インポートしたプロジェクトをBluemixにデプロイする ここでは PostgreSQL サービスを提供する ElephantSQL というサービスを使用します デプロイしたアプリケーションを確認する
HeartCoreインストールマニュアル
HeartCore インストールマニュアル (JSP 版 ) October2013 Ver1.1-1 - 改訂履歴 改訂日 改訂内容 Ver1.0 2013 年 07 月 マニュアル改訂 Ver1.1 2013 年 10 月 フォーマット改訂 - 2 - 目次 1. 本文書の目的と対象...- 4-1.1. 概要説明... - 4-2. インストールの流れ...- 4-3. MySQL ユーザの作成...-
intra-mart Accel Platform — IM-BloomMaker プログラミングガイド 初版
Copyright 2019 NTT DATA INTRAMART CORPORATION 1 Top 目次 1. 改訂情報 2. はじめに 2.1. 本書の目的 2.2. 対象読者 2.3. サンプルコードについて 2.4. 本書の構成 3. 前処理プログラム 3.1. 前処理を実装する 3.1.1. 前処理の実装方式 3.1.2. 前処理の実行順序と引数 3.1.3. リクエストパラメータの解析
Client Client public void sendobject(object message) String String Web Container String RemoteEndpoint String Endpoint throwsioexception, EncodeExcept
@OnMessage public void handlecounter(int newvalue) {... @OnMessage public void handleboolean(boolean b) {... public void sendobject(object message) throws IOException, EncodeException Client Client public
SystemDirector Developer's Studio(V3.2) 適用ガイド
目次 6. 開発時のトラブルシューティング...2 6.2. WTP( 共通 ) の注意制限事項... 2 6.2.1. インストール済みサーバランタイム環境 画面の キャンセル...2 6.2.2. サーブレットの作成 画面の スーパークラスからのコンストラクター...3 6.2.3. Webプロジェクトの設定 画面の デフォルトの復元...3 6.2.4. サーバー 画面の デフォルトの復元...4
SmartBrowser_document_build30_update.pptx
SmartBrowser Update for ios / Version 1.3.1 build30 2017 年 8 月 株式会社ブルーテック 更新内容 - 概要 ios Version 1.3.1 build28 の更新内容について 1. 設定をQRから読み込み更新する機能 2.URLをQRから読み込み画面遷移する機能 3.WEBページのローカルファイル保存と外部インテントからの起動 4.JQuery-LoadImageライブラリの組み込み
WebOTX V6 J2EEアプリケーションのトラブルシューティング
WebOTX V6 J2EE アプリケーションのトラブルシューティング ( リソース参照 EJB 参照 ) 2006 年 11 月初版 改版履歴 i 目次 1 はじめに...1 2 リソース参照 EJB 参照について...1 3 リソース参照 EJB 参照の設定に問題がある時のエラーと対処方法について...2 4 設定方法...2 4.1 リソース参照...3 4.1.1 WebOTX 配備ツールを使用する場合...3
VPN 接続の設定
VPN 接続の設定 AnyConnect 設定の概要, 1 ページ AnyConnect 接続エントリについて, 2 ページ ハイパーリンクによる接続エントリの追加, 2 ページ 手動での接続エントリの追加, 3 ページ ユーザ証明書について, 4 ページ ハイパーリンクによる証明書のインポート, 5 ページ 手動での証明書のインポート, 5 ページ セキュアゲートウェイから提供される証明書のインポート,
Symantec AntiVirus の設定
CHAPTER 29 Symantec AntiVirus エージェントを MARS でレポートデバイスとしてイネーブルにするためには Symantec System Center コンソールをレポートデバイスとして指定する必要があります Symantec System Center コンソールはモニタ対象の AV エージェントからアラートを受信し このアラートを SNMP 通知として MARS に転送します
エンドポイント WebSocket API ではクライアント サーバともに javax.websocket.endpoint クラスから派生してエンドポイントのクラスを定義します そして onopen() onclose() および onerror() をオーバーライドし それぞれ接続時 切断時およ
Java API for WebSocket 2013 年 9 月 湊隆行 はじめに 2013 年 6 月 12 日に Java EE 7 が発表され 新機能の 1 つとして Java API for WebSocket が追加されました HTTP プロトコルは半二重のステートレスな接続であり Ajax(XMLHTTPRequest) を利用した通信であっても 通信するたびに HTTP 接続 メッセージ交換
おらんかにクライアント操作マニュアル
おらんかに クライアント操作マニュアル 株式会社富士通ビー エス シー 目次 1. はじめに... 1 2. 概要... 2 3. クライアント起動... 3 4. 所属表示... 7 5. アドレス帳表示... 9 6. アドレス帳編集... 10 7. メッセージ作成... 12 8. メッセージ表示... 13 9. ログ参照... 15 10. 電子メール作成画面表示... 16 10.1
intra-mart ワークフローデザイナ
intra-mart ワークフローデザイナ Version 5.0 インストールガイド 初版 2005 年 6 月 17 日 変更年月日 2005/06/17 初版 > 変更内容 目次 > 1 はじめに...1 1.1 インストールの概要...1 1.2 用語について...1 1.3 前提条件...1 2 インストール手順...2 2.1 サーバへのファイルのインストール...2
intra-mart Accel Platform
目次目次 Copyright 2014 NTT DATA INTRAMART CORPORATION クイック検索検索 1 Top 目次 1. 改訂情報 2. はじめに 2.1. 本書の目的 2.2. 対象読者 2.3. 対象開発モデル 2.4. サンプルコードについて 2.5. 本書の構成 3. アクセスコンテキストの実装 3.1. アクセスコンテキストの実装例 3.2. アクセスコンテキストのキャッシュ機能の実装例
WEBシステムのセキュリティ技術
EJB (Enterprise Java Beans) 棚橋沙弥香 テーマ選定の背景 現在携わっている Java 開発案件で EJB が使われておりますが 私自身が EJB を扱うのが初めてで知らない技術でしたので 勉強してみたいと思い 今回はこのテーマを選定しました 目次 EJBとは 1 EJBの利点 2 EJBの歴史 3 EJBの開発環境の作成 4 5 Enterprise Bean 6 非同期処理の実装
前ページからの続き // テキストボックス02 id 属性で取得 // id 属性で取得する場合は一意に決まるので 何番目かの指定は不要 var textbox02elem = document.getelementbyid("text_box02_id"); if ("001" == statee
全体のヒント 1. テキストボックスの制御 1.1. 日付入力日付の入力ボックスは フォーカスが入った時にスラッショを消し フォーカスが他の項目等に移るとスラッシュが加わるようにする オンフォーカス 20100101 オフフォーカス 2010/01/01 1.1.1 オンフォーカス時にスラッシュを消す入力項目のスラッシュを消すには include/function.js ファイル内の var delslash
Microsoft Word - ModelAnalys操作マニュアル_
モデル分析アドイン操作マニュアル Ver.0.5.0 205/0/05 株式会社グローバルアシスト 目次 概要... 3. ツール概要... 3.2 対象... 3 2 インストールと設定... 4 2. モデル分析アドインのインストール... 4 2.2 モデル分析アドイン画面の起動... 6 3 モデル分析機能... 7 3. 要求分析機能... 7 3.. ID について... 0 3.2 要求ツリー抽出機能...
— intra-mart Accel Platform セットアップガイド (WebSphere編) 第7版
Copyright 2013 NTT DATA INTRAMART CORPORATION 1 Top 目次 intra-mart Accel Platform セットアップガイド (WebSphere 編 ) 第 7 版 2016-12-01 改訂情報はじめに本書の目的前提条件対象読者各種インストール 設定変更 intra-mart Accel Platform 構成ファイルの作成 WebSphereの設定
PowerPoint Presentation
Amazon WorkSpaces Active Directory 証明書サービス (ADCS) を用いたデバイス認証構成 アマゾンウェブサービスジャパン株式会社 2017 / 11 / 10 Agenda 1. Amazon WorkSpaces のデバイス認証の仕組み 2. 環境構成概要 Amazon WorkSpaces デバイス認証の仕組み 3 WorkSpaces のエンドポイントへアクセス
intra-mart Accel Platform — 招待機能プログラミングガイド 初版
Copyright 2016 NTT DATA INTRAMART CORPORATION 1 Top 目次 1. 改訂情報 2. はじめに 3. 権限リストを拡張する 2 改訂情報 変更年月日 変更内容 2016-04-01 初版 3 はじめに 項目 このガイドについて このガイドについて このガイドでは 招待機能の拡張方法および注意点について解説します 4 権限リストを拡張する 項目 この機能について実装済みの招待権限デコレータ実装方法設定方法
CubePDF ユーザーズマニュアル
CubePDF ユーザーズマニュアル 2018.11.22 第 13 版 1 1. PDF への変換手順 CubePDF は仮想プリンターとしてインストールされます そのため Web ブラウザや Microsoft Word, Excel, PowerPoint など印刷ボタンのあるアプリケーションであればどれでも 次の 3 ステップで PDF へ変換することができます 1. PDF 化したいものを適当なアプリケーションで表示し
目次 1. 動作環境チェック 動作必要環境 Java のインストール Java のインストール Firebird のインストール Firebird のインストール Adobe Reader のインストール
ORCA PROJECT Linux 対応版インストールマニュアル (Version 2.0.0 対応 ) Ubuntu 10.04 Lucid 用 2.0.0 版 2013 年 3 月 8 日 目次 1. 動作環境チェック...3 1.1. 動作必要環境...3 2. Java のインストール...3 2.1. Java のインストール...3 3. Firebird のインストール...4 3.1.
intra-mart Accel Platform — 外部ソフトウェア接続モジュール 仕様書 第3版
Copyright 2012 NTT DATA INTRAMART CORPORATION 1 Top 目次 改訂情報はじめに本書の目的対象読者本書の構成概要外部ソフトウェア接続モジュールとは仕様外部ソフトウェア接続モジュールの構成サンプルプログラムサンプル内容動作に必要な環境構築プログラムソースログイン セキュリティ環境の構築外部ソフトウェア連携時の認可設定 2 改訂情報 変更年月日 変更内容 2012-12-21
Microsoft iSCSI Software Targetを使用したクラスタへの共有ディスク・リソースの提供
Microsoft iscsi Software Target を使用したクラスタへの共有ディスク リソースの提供 はじめに... 2 クラスタ ホスト エントリの作成... 3 イニシエータの設定... 7 クラスタ ノード 1 のイニシエータ... 7 クラスタ ノード 2 のイニシエータ... 7 iscsi 仮想ディスクのエクスポート... 8 iscsi デバイスの初期化... 11 Microsoft
オブジェクト指向プログラミング・同演習 5月21日演習課題
オブジェクト指向プログラミング 同演習 5 月 21 日演習課題 問題 1 配列の例外処理例外が発生する可能性のある処理を try で囲み その後に catch で例外を捕捉します 例外処理の終了処理として finally が行われます これは書かなくて自動的に行われます 提出課題 1 (Kadai052301.java) 以下のプログラムは例外処理をしていない ArrayIndexOutOfBoundsException
intra-mart Accel Platform — OData for SAP HANA セットアップガイド 初版
Copyright 2016 NTT DATA INTRAMART CORPORATION 1 Top 目次 1. 改訂情報 2. はじめに 2.1. 本書の目的 2.2. 前提条件 2.3. 対象読者 2.4. 注意事項 3. 概要 3.1. OData 連携について 3.2. OData について 3.3. SAP HANA 連携について 3.4. アクター 3.5. セットアップの手順について
レベルアップ詳細情報 < 製品一覧 > 製品名 バージョン < 追加機能一覧 > 管理番号 内容 説明書参照章 カナ文字拡張対応 < 改善一覧 > 管理番号 内容 対象バージョン 説明書参照章 文字列のコピー ペースト改善 ~ 子画面の表示方式 ~ 履歴の詳細情報 ~ タブの ボタン ~ 接続時の管
レベルアップ詳細情報 < 製品一覧 > 製品名 バージョン < 追加機能一覧 > 管理番号 内容 説明書参照章 カナ文字拡張対応 < 改善一覧 > 管理番号 内容 対象バージョン 説明書参照章 文字列のコピー ペースト改善 ~ 子画面の表示方式 ~ 履歴の詳細情報 ~ タブの ボタン ~ 接続時の管理情報の英小文字対応 ~ 管理ホスト情報の表示 グループ情報と詳細情報の表示 ~ 検索条件設定時の一覧画面の操作
Microsoft Word - tutorial3-dbreverse.docx
株式会社チェンジビジョン使用バージョン :astah* 6.0, 6.1 [ ] サンプル サポート対象外 目次 DB リバースを使ってみよう ( サンプル サポート対象外 ) 2 ご利用の前に 2 予備知識 2 データベースの環境設定をしてみよう 2 astah* データベースリバースコンポーネントを使用してみよう 5 作成した asta ファイルを astah* professional で開いてみよう
Maser - User Operation Manual
Maser 3 Cell Innovation User Operation Manual 2013.4.1 1 目次 1. はじめに... 3 1.1. 推奨動作環境... 3 2. データの登録... 4 2.1. プロジェクトの作成... 4 2.2. Projectへのデータのアップロード... 8 2.2.1. HTTPSでのアップロード... 8 2.2.2. SFTPでのアップロード...
intra-mart WebPlatform/AppFramework
intra-mart WebPlatform/AppFramework Ver.7.2 Struts 連携プログラミングガイド 2010/04/01 初版 変更年月日 2010/04/01 初版 > 変更内容 目次 > 1 はじめに...1 1.1 目的...1 2 アプリケーションの作成...2 2.1 Strutsからim-JavaEE Frameworkのイベントフレームワークへの連携...2
Android Layout SDK プログラミング マニュアル
プログラミングマニュアル Version 1.3.0 用 更新履歴 年月日 バージョン 履歴 2014.09.08 1.2.0.0 新規 (Layout Utilities ユーザーズ ガイド ) 2016.08.16 1.3.0.0 モバイル端末用レイアウトで直線部品と矩形部品に対応 モバイル端末用レイアウトファイルを CLFX から XML へ変更 Layout Print Engine から
HDC-EDI Manager Ver レベルアップ詳細情報 < 製品一覧 > 製品名バージョン HDC-EDI Manager < 対応 JavaVM> Java 2 Software Development Kit, Standard Edition 1.4 Java 2
レベルアップ詳細情報 < 製品一覧 > 製品名バージョン HDC-EDI Manager 2.2.0 < 対応 JavaVM> Java 2 Software Development Kit, Standard Edition 1.4 Java 2 Platform Standard Edition Development Kit 5.0 Java SE Development Kit 6 < 追加機能一覧
データベースアクセス
データベースアクセスコンポーネント 1. 概要 データベースアクセスコンポーネントとは SQL データベースにアクセスして SQL 文を実行することによりデータベース検索を行う機能を提供するコンポーネントです また データベースアクセスコンポーネントでは データベースの構成情報 接続情報 エラー情報等を取得することも可能です データベースアクセスコンポーネントは アプリケーションビルダーのメニューから以下のように選びます
Seasar.NET入門
2007 Spring Seasar.NET 入門 2007.5.27 Seasar.NET 杉本和也 2007 Spring Copyright 2004-2007 The Seasar Foundation and the others. All rights reserved. 1 杉本和也と申します 高知県の株式会社アイビスに勤務しています プログラミング歴 6 年 オープンソース歴 2 年
( 目次 ) 1. はじめに 開発環境の準備 仮想ディレクトリーの作成 ASP.NET のWeb アプリケーション開発環境準備 データベースの作成 データベースの追加 テーブルの作成
KDDI ホスティングサービス (G120, G200) ブック ASP.NET 利用ガイド ( ご参考資料 ) rev.1.0 KDDI 株式会社 1 ( 目次 ) 1. はじめに... 3 2. 開発環境の準備... 3 2.1 仮想ディレクトリーの作成... 3 2.2 ASP.NET のWeb アプリケーション開発環境準備... 7 3. データベースの作成...10 3.1 データベースの追加...10
Oracle Business Intelligence Standard Edition One のインストール
Oracle Business Intelligence Standard Edition One のインストール 第 1 版 作成日 :2007 年 7 月 31 日 更新日 :2007 年 7 月 31 日 目次 はじめに... 3 Ⅰ. インストール作業... 4 Ⅱ. 起動状況の確認... 8 Ⅱ-1. Oracle BI Administration Tool の起動... 8 Ⅱ-2.
JavaScript 演習 2 1
JavaScript 演習 2 1 本日の内容 演習問題 1の解答例 前回の続き document.getelementbyid 関数 演習問題 4 イベント処理 基本的なフォーム テキストボックスの入力値の取得 演習問題 5 演習問題 1 prompt メソッドと document.write メソッドを用いて, ユーザから入力されたテキストと文字の色に応じて, 表示内容を変化させる JavaScript
9 WEB監視
2018/10/31 02:15 1/8 9 WEB 監視 9 WEB 監視 9.1 目標 Zabbix ウェブ監視は以下を目標に開発されています : ウェブアプリケーションのパフォーマンスの監視 ウェブアプリケーションの可用性の監視 HTTPとHTTPSのサポート 複数ステップで構成される複雑なシナリオ (HTTP 要求 ) のサポート 2010/08/08 08:16 Kumi 9.2 概要 Zabbix
intra-mart WebPlatform/AppFramework
intra-mart WebPlatform/AppFramework Ver.7.2 ポータルシステム管理者操作ガイド 2010/04/01 初版 i 変更履歴 変更年月日 変更内容 2010/04/01 初版 ii 第 1 章ポートレット管理 1 1.1 ポートレット管理とは 2 1.2 ポートレットアプリケーション一覧 3 1.2.1 概要 3 1.3 ポートレットアプリケーションの登録 4
APEX Spreadsheet ATP HOL JA - Read-Only
Oracle APEX ハンズオン ラボ スプレッドシートからアプリケーションを作成 Oracle Autonomous Cloud Service 用 2019 年 7 月 (v19.1.3) Copyright 2018, Oracle and/or its affiliates. All rights reserved. 2 概要 このラボでは スプレッドシートを Oracle データベース表にアップロードし
利用者
Regional SNS 開発環境構築ガイド 2012 年 2 月 29 日 株式会社ネットワーク応用通信研究所 目次 1. はじめに... 1 2. 前提条件... 1 3. 必要なソフトウェア構成... 1 4. ソフトウェアの導入手順... 1 4.1. 必要ファイルのダウンロード... 1 4.2. 環境設定コマンドの実行... 2 4.3. RegionalSNS の実行... 2 4.4.
Microsoft PowerPoint - Lecture_3
プログラミング III 第 3 回 : サーブレットリクエスト & サーブレットレスポンス処理入門 Ivan Tanev 講義の構造 1. サーブレットの構造 2. サーブレットリクエスト サーブレットレスポンスとは 3. 演習 2 Lecture2_Form.htm 第 2 回のまとめ Web サーバ Web 1 フォーム static 2 Internet サーブレ4 HTML 5 ットテキスト
1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String
目次 1.SqlCtl クラスリファレンス 2 (1)Connect() メソッド 2 (2)DisConnect() メソッド 3 (3)Commit() メソッド 3 (4)Rollback() メソッド 4 2.SqlStm クラスリファレンス 5 (1)Prepare() メソッド 5 (2)Execute() メソッド 6 (3)Release() メソッド 6 (4)Immediate()
SAMBA Stunnel(Windows) 編 1. インストール 1 セキュア SAMBA の URL にアクセスし ログインを行います xxx 部分は会社様によって異なります xxxxx 2 Windows 版ダウンロード ボ
操作ガイド Ver.2.3 目次 1. インストール... - 2-2. SAMBA Stunnel 利用... - 8-2.1. 接続確認... - 8-2.2. 編集... - 11-2.3. インポート... - 14-2.4. 削除... - 15-2.5 フォルダショートカットの作成... - 16-3. 動作環境... - 18-4. 参考資料 ( 接続状況が不安定な場合の対処方法について
intra-mart Accel Platform — IM-共通マスタ スマートフォン拡張プログラミングガイド 初版
Copyright 2012 NTT DATA INTRAMART CORPORATION 1 Top 目次 1. 改訂情報 2. IM- 共通マスタの拡張について 2.1. 前提となる知識 2.1.1. Plugin Manager 2.2. 表記について 3. 汎用検索画面の拡張 3.1. 動作の概要 3.1.1. 汎用検索画面タブの動作概要 3.2. 実装の詳細 3.2.1. 汎用検索画面タブの実装
WEBシステムのセキュリティ技術
WEB システムの セキュリティ技術 棚橋沙弥香 目次 今回は 開発者が気をつけるべきセキュリティ対策として 以下の内容について まとめました SQLインジェクション クロスサイトスクリプティング OSコマンドインジェクション ディレクトリ トラバーサル HTTPヘッダ インジェクション メールヘッダ インジェクション SQL インジェクションとは 1 データベースと連動した Web サイトで データベースへの問い合わせや操作を行うプログラムにパラメータとして
PowerPoint Presentation
製品ソフトウェアのセットアップ手順 UNIX/Linux 編 1. セットアップファイルの選択開発環境 / 実行環境 / バージョン /Hotfix/ インストール先 OS 2. 対象セットアップファイルのダウンロード開発環境の場合は 2 つのファイルが対象 3. ソフトウェア要件の確認 4. ソフトウェアのインストール 5. ライセンスの認証 1 1. セットアップファイルの選択 選択項目選択肢該当チェック
メソッドのまとめ
メソッド (4) 擬似コードテスト技法 http://java.cis.k.hosei.ac.jp/ 授業の前に自己点検以下のことがらを友達に説明できますか? メソッドの宣言とは 起動とは何ですか メソッドの宣言はどのように書きますか メソッドの宣言はどこに置きますか メソッドの起動はどのようにしますか メソッドの仮引数 実引数 戻り値とは何ですか メソッドの起動にあたって実引数はどのようにして仮引数に渡されますか
WebReportCafe
1 1. 概要 WebReportCafe for.net では 生成した PDF に VeriSign の不可視電子署名を付加することができます 電子署名を付加する事により 文書の作成者を証明することができ 作成された PDF を改竄することが不可能になります この文書では WebReportCafe for.net で電子署名を付加するために必要な ドキュメントサイン用 Digital ID の取得と必須ファイル作成
Rational Roseモデルの移行 マニュアル
Model conversion from Rational Rose by SparxSystems Japan Rational Rose モデルの移行マニュアル (2012/1/12 最終更新 ) 1. はじめに このガイドでは 既に Rational( 現 IBM) Rose ( 以下 Rose と表記します ) で作成された UML モデルを Enterprise Architect で利用するための作業ガイドです
