naobe @ ウィキ
WebSphere Application Server for Developers V7.0
最終更新:
Bot(ページ名リンク)
-
view
WebSphereに戻る
主にJ2EE5の動作検証について記述する。
WASインストール
アプリケーションサーバの起動と停止
起動
cd ${ServerRoot}/bin ./startServer.sh サーバ名
インストール直後のサーバ名は、server1
停止
cd ${ServerRoot}/bin ./stopServer.sh サーバ名
アプリケーションのデプロイ/アンデプロイ
EJBファイルの作成
eclipseのプロジェクト下に以下のディレクトリを作成。
ejb | +-- パッケージを表すディレクトリ | +-- *.class +--META-INF +-- MANIFEST.MF +-- ejb-jar.xml ・・・使用する[[EJB]]の参照設定など。 +-- persistence.xml ・・・永続化設定ファイル。JPAで使用。
ejb以下をjarで圧縮し、*.jarファイルを作成する
WARファイルの作成
eclipseのプロジェクト下に以下のディレクトリを作成。
webapp | +--WEB-INF | | | +-- web.xml | +-- classes ・・・[[WEBアプリケーション]]、プロパティファイルを置く | | | | | +-- META-INF | | +-- persistence.xml ・・・永続化設定ファイル。JPAで使用。 | +-- lib ・・・WEBアプリケーション内で共有するjarファイルを置く | | | +-- *.jsp webapp直下よりこちらの方が安全。 | +-- *.jsp
web.xmlの内容は、最新のJava Servlet Specification(http://www.oracle.com/technetwork/java/download-139443.html)またはhttp://www.sk-jp.com/java/servlet/webxml.html#h63 参照。servletタグと、servlet-mappingタグを設定しておけばとりあえず動く。
EARファイルの作成
ツールが必要? ibm-application-bnd.xmlなどのIBM専用構成ファイルの説明が不明。
eclipseのプロジェクト下に以下のディレクトリを作成。
eclipseのプロジェクト下に以下のディレクトリを作成。
ear | +-- META-INF | +-- MANIFEST.MF | +-- application.xml | +-- ibm-application-bnd.xml ・・デプロイした後でWebSphereが自動的に作成する。セキュリティロールを設定する。 +-- *.war WEBアプリケーションファイル +-- *.jar EJBファイル
ear以下をjarで圧縮し、*.earファイルを作成する
デプロイ作業
https://サーバ名:9043/ibm/help/index.jsp?topic=/com.ibm.ws.console.appmanagement/urun_rapp_installoptions.html 参照
- 管理コンソールの「アプリケーション」->「アプリケーションタイプ」->「WebSphereエンタプライズアプリケーション」を選択
- 「新規作成」をクリック
- 「インストールオプション」で以下を入力
項目 | 必須 | 説明 | デフォルト |
JavaServer Pages ファイルのプリコンパイル | しない | ||
アプリケーションをインストールするディレクトリー | エンタープライズ・アーカイブ (EAR) ファイルのインストール先のディレクトリー | profile_root/installedApps/cell_name/application_name.ear ディレクトリ | |
アプリケーションの配付 | アプリケーションを展開するかどうか。falseにすると手動で展開しなければならない? | true | |
バイナリー構成の使用 | deployment.xml(バインディング、拡張子、およびデプロイメント記述子を記述)を使用するかどうか。 | false | |
エンタープライズ Bean のデプロイ | インストール時に EJBDeploy ツールを実行するかどうかを指定。デプロイ時に設定を作成する?? EJB3.0では不要。 | true | |
リソース用の MBean の作成 | サーブレットや JSP ファイルなどのアプリケーション内のリソース用の MBean を作成するかどうかを指定します。 | true | |
Web および EJB モジュールのクラス再ロード設定をオーバーライドします。 | アプリケーションの実行時に、この製品のランタイムがアプリケーション・クラスに対する変更を検出するかどうかを指定します。こういうケースがある?? | false | |
再ロード間隔 (秒) | クラスの再ロードが使用可能になっている場合にのみ、再ロード間隔属性は有効。 | EAR ファイルの IBM拡張 (META-INF/ibm-application-ext.xmi) ファイルで指定されている、再ロード間隔属性の値。3(秒) | |
Web サービスのデプロイ | Web サービスのデプロイ・ツール wsdeploy をアプリケーションのインストール時に実行するかどうかを指定します。 | false | |
入力のオフ/警告/失敗の検証 | 品が、アプリケーションのインストールまたは更新中に指定されたアプリケーション参照を検査するかどうか、また、妥当性検査を使用可能にする場合は、誤った参照をユーザーに警告するのか、オペレーションを失敗させるのかを指定します。 | 警告 | |
プロセス組み込み構成 | 組み込み構成を処理するかどうかを指定します。組み込み構成は、 resource.xml および variables.xml などのファイルで構成されています。 | false | |
アプリケーション・ビルド ID | アプリケーションのビルド・バージョンを識別する編集不可のストリングを指定します。編集不可?? | ||
リモート・リソースに対する組み込みディスパッチの許可 | 管理対象ノード環境にある異なる Java 仮想マシン内の Web モジュール間のリソースに対し、アプリケーションがインクルードをディスパッチできるかどうかを指定。使うことある?? | false | |
リモート・リソースからの組み込みサービスの許可 | エンタープライズ・アプリケーションが、アプリケーションからのインクルード要求を処理できるかどうかを指定します。 | false | |
ビジネス・レベル・アプリケーション名 | 新規ビジネス・レベル・アプリケーションを作成するか、またはエンタープライズ・アプリケーションを既存のビジネス・レベル・アプリケーションの構成単位にするかを指定。 | 新規ビジネスレベルアプリケーション | |
非同期要求ディスパッチ・タイプ | Web モジュールが別個のスレッド上で要求を同時にディスパッチできるかどうか、できる場合は、サーバーまたはクライアントがその要求をディスパッチするかどうかを指定します。同時ディスパッチングにより、サーブレットの応答時間を改善することができます。 | 使用不可 | |
EJB 参照ターゲットを自動で解決できるようにする | 不完全な EJB 参照ターゲットに対して、デフォルトの JNDI 値を割り当てるか、または不完全な EJB 参照ターゲットを自動的に解決するかを指定します。 | false |
アンデプロイ
- 管理コンソールの「アプリケーション」->「アプリケーションタイプ」->「WebSphereエンタプライズアプリケーション」を選択
- 表のアプリケーションを選択して、「アンインストール」クリック
/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/installedApps/centos5Node01Cell 下のアプリケーションディレクトリが消える。
EJB作成
ステートレスセッションビーン
クラス定義の前に、Statelessアノテーションを記述する。
【例】
【例】
@Stateless public class EmployeeTableBean implements EmployeeTable {
データソースを取得するときは、Resourceアノテーションを記述する(設定ファイル不要)。
【例】
【例】
@Resource(mappedName="jdbc/oracle10g") private DataSource ds;
デプロイするときに、WebSphereがデータソースを選択するように要求するので、それに従う。mappedNameは使えない??
ステートフルセッションビーン
WEBアプリケーション作成
EJBアプリケーションへの接続
EJBアノテーションを使って接続する(設定ファイルは不要)。
【例】
@EJB
private EmployeeTable etb;
【例】
@EJB
private EmployeeTable etb;
JPA(Java Persistent API)
追加パックのインストールは不要。Oen JPA 1.2.1を拡張したものが実装されている。フィーチャパックをインストールすると、2.0になる。フィーチャパックはインストールしていない。
管理コンソール サーバ->サーバタイプ->WebSphereApplicationServer->コンテナサービス->デフォルト Java Persistence API 設定でどのJPAプロバイダを使うか設定する。IBM, openjpa以外も使えそうなことをマニュアルに書いてある。
管理コンソール サーバ->サーバタイプ->WebSphereApplicationServer->コンテナサービス->デフォルト Java Persistence API 設定でどのJPAプロバイダを使うか設定する。IBM, openjpa以外も使えそうなことをマニュアルに書いてある。
persistence.xml
propertiesは、openjpaとIBM JPAのものが使えるがIBM JPAのプロパティに何があるか不明。persistenceタグは、xmlnsを設定しないとエラーになる。EJBコンテナで使用する場合、classタグを設定するとエラーになる。
【EJBコンテナでの使用例】
【EJBコンテナでの使用例】
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> <persistence-unit name="WasOraclePersistenceUnit" transaction-type="JTA"> <provider>com.ibm.websphere.persistence.PersistenceProviderImpl</provider> <jta-data-source>jdbc/oracle10g</jta-data-source> <properties> <property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO"/> </properties> </persistence-unit> </persistence>
エンティティマネジャの取得
セッションビーンでDIを使って取り込む。unitNameは、persistence.xmlで設定した値。
@Stateless public class EmployeeTableBean implements EmployeeTable { @PersistenceContext(unitName = "WasOraclePersistenceUnit") private EntityManager em;
検索
PSQLを使う
【例】
【例】
public List<Employee> getEmployeesByHireDate(Date startDate, Date endDate) { // Query query = em.createQuery( "SELECT e FROM Employee AS e " + "WHERE e.hireDate >= :startDate AND " + "e.hireDate <= :endDate") .setParameter("startDate", startDate) .setParameter("endDate", endDate); return query.getResultList(); }
追加
EntityManagerのpersistメソッドを使う。EJBコンテナでJTAトランザクションを使用する場合、EJBが終了した時点で自動的にコミットが発生する。コミットするとEntityManagerのflushが起動され、DBに反映される。
【例】
【例】
@Override public void addEmployee(Employee employee) { em.persist(employee); }
セッションビーンの中で、上記メソッドを実行すると、Employeeがinsertされる。
更新
MANAGED状態(DBと同期した状態)にあるエンティティのフィールドを変更すると、次のフラッシュのタイミングでDBに反映する。
【例】
@Override public Employee getEmployee(int employeeId) { return em.find(Employee.class, Integer.valueOf(employeeId)); }
@Override public void updateEmployee(Employee employee) { // 排他が効くのか? Employee old = getEmployee(employee.getEmployeeId()); old.setFirstName(employee.getFirstName()); old.setLastName(employee.getLastName()); old.setEmail(employee.getEmail()); old.setPhoneNumber(employee.getPhoneNumber()); old.setHireDate(employee.getHireDate()); old.setJobId(employee.getJobId()); old.setSalary(employee.getSalary()); old.setCommissionPct(employee.getCommissionPct()); old.setManagerId(employee.getManagerId()); old.setDepartmentId(employee.getDepartmentId()); }
getEmployee()で、DBから取得してMANAGED状態になったEmployeeエンティティを取得する。次にフィールドを修正する。
削除
【例】
@Override public void deleteEmployee(int employeeId) { Employee emp = getEmployee(employeeId); em.remove(emp); }
リレーション
トランザクション
分離レベルはOracleの場合、READ_COMMITTEDまたはSERIALIZABLEしか許可されない。DB2は全ての分離レベルが可能。
トランザクション試験結果
JSF
実装
管理コンソールからエンタプライズアプリケーションを指定して、「JSPおよびJSFオプション」を押下。
Sun Reference Implementation 1.2
Sun Reference Implementation 1.2
ライブラリ
${INSTALL_DIR}/AppServer下。find -name \*.jar | grep jsfの結果
./optionalLibraries/IBM/JWL/2.0/odc-jsf.jar ./optionalLibraries/IBM/JWL/2.0/jsf-ibm.jar ./plugins/javax.j2ee.jsf.jar ./lib/jsf-nls.jar
テスト用画面
テスト結果
- テーブル以外、目的どうり動作した。
- テーブルはJSFのdataTableタグを利用するしかない。HTMLのtableタグを使うと、JSFへテーブルの値を伝えられないため。
- テーブルのようなJSFコンポーネント表示を細かくカスタマイズすることは不可能では? カスタムコンポーネントを開発するか、フリーのコンポーネントを取得するしかない?
servlet
バージョン
2.5
【確認方法】
インストールしたwarファイルのweb.xmlのweb-appタグのversion属性を確認する。
【確認方法】
インストールしたwarファイルのweb.xmlのweb-appタグのversion属性を確認する。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
EJB
バージョン
5
【確認方法】
インストールしたearファイルのapplication.xmlのversion属性を確認する。
【確認方法】
インストールしたearファイルのapplication.xmlのversion属性を確認する。
<application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/j
JSP
バージョン
JSP2.1
JSPのクラスファイル
${WAS_INSTALL}/AppServer/profiles/AppSrv01/temp/ノード名/サーバ名/EAR名/jpa_relation.war/WEB-INF
JSPのソースファイルを残す
ibm-web-ext.xmiがない。JavaEE5からibm-web-ext.xmlに変わった。以下を追加。
<jsp-attribute name="keepgenerated" value="true"/>
JSPのクラスファイルディレクトリにJSPのソースファイルが作成されるはずだが、何故か作成されない。
データベースとの接続
データソースの作成
- 管理コンソールにログイン
- ガイド付きアクティビティのデータベースへの接続をクリック
- 「セキュア・データベース・アクセスのクレデンシャルを構成する」を開き、説明に従って、ユーザ/パスワードのセットを作成
- 「JDBC プロバイダーの構成」を開き、「クリックして実行」をクリック。「新規作成」をクリックして、説明に従って入力し、プロバイダを作成。
- 「データソース」をクリックして、説明に従ってデータソースを作成
- セキュリティ設定は、「コンポーネント管理の認証別名 」を設定
管理コンソール
http://サーバ名:9060/ibm/console
サンプルアプリ
http://サーバ名:9080/WSsamples
構成文書
${profile}/config
cells cell1 cell.xml resources.xml virtualhosts.xml variables.xml security.xml nodes nodeX node.xml variables.xml resources.xml serverindex.xml serverA server.xml variables.xml applications sampleApp1 deployment.xml META-INF application.xml ibm-application-ext.xml ibm-application-bnd.xml sampleApp2 deployment.xml META-INF application.xml ibm-application-ext.xml ibm-application-bnd.xml
ライブラリディレクトリ
JNDI
単一サーバの場合は、以下でDataSourceを取得できる。lookupメソッドの引数は、データソースを
設定したときのJNDI名。
設定したときのJNDI名。
DataSource ds = null; try { Context context = new InitialContext(); ds = (DataSource) context.lookup("jdbc/oracle10g"); }catch (Exception e) { e.printStackTrace(); return; }
ログ
管理コンソール サーバ-->サーバタイプ-->トラブルシューティング-->ロギングトレース参照
/${WEB_SPHERE_INSTALL_DIR}/AppServer/profiles/AppSrv01/logs/server1下の
- SystemErr.log
- SystemOut.log
ロガーの使用
最大メモリの設定
管理コンソールから以下の操作をする。
- 「サーバー (Servers)」-> 「アプリケーション・サーバー (Application Servers)」-> 「Server1」-> 「プロセスの定義 (Process Definition)」-> 「Java 仮想マシン (Java Virtual Machine)」を選択する。
- 「初期ヒープ・サイズ (Initial Heap Size)」フィールドおよび「最大ヒープ・サイズ (Maximum Heap Size)」フィーチャーにスクロールし、値を設定する。
- 「OK」をクリックして、変更を保管する。
用語
項目 | 説明 |
プロファイル | 単一のWebSphere Application Serverのランタイム環境を定義する。コアなアプリケーションに対して、よく変わるアプリのインストールを容易にするために作成された。 |
セル | Deployment Manager が管理する管理可能ドメイン。セルとは、WebSphere Application Server 分散環境における共通の管理アクティビティーを使用可能化するノードを論理的にグループ化したものです。1 つのセルは 1 つ以上のクラスターから成り立ちます。セル:ノード = 1:N |
ノード | 物理的に区分されたサーバの単位。通常はマシンを意味する |
J2C認証別名 | WASでリソースを使用して接続を行う際、アプリケーション内でのusername/passwordのハード・コーディングを避けるために、username/passwordをセットでエイリアスとして定義しておくもの |
アセット | |
課題
項目 | 説明 |
起動時のサーバ名の変更 | |
リソース用のMBean | |
非同期要求ディスパッチ・タイプ サーバサイド/クライアントサイドの違い | |
データソースの指定にmappedNameは使えない? | |
分離レベルの表示、設定 | 管理コンソールから リソース-->JDBC-->データソース カスタムプロパティのwebSphereDefaultIsolationLevelを修正。デフォルトはREPEATABLE_READ |
管理コンソールのタイムアウト設定 | |
NonJTAトランザクションの使用 |