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のプロジェクト下に以下のディレクトリを作成。

 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;

JPA(Java Persistent API)

追加パックのインストールは不要。Oen JPA 1.2.1を拡張したものが実装されている。フィーチャパックをインストールすると、2.0になる。フィーチャパックはインストールしていない。
管理コンソール サーバ->サーバタイプ->WebSphereApplicationServer->コンテナサービス->デフォルト Java Persistence API 設定でどのJPAプロバイダを使うか設定する。IBM, openjpa以外も使えそうなことをマニュアルに書いてある。

persistence.xml

propertiesは、openjpaとIBM JPAのものが使えるがIBM JPAのプロパティに何があるか不明。persistenceタグは、xmlnsを設定しないとエラーになる。EJBコンテナで使用する場合、classタグを設定するとエラーになる。
【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

ライブラリ

${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属性を確認する。

 <?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属性を確認する。

 <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名。

       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トランザクションの使用
人気記事ランキング
ウィキ募集バナー