IBM®
本文へジャンプ
    Japan [変更]    ご利用条件
 
 
検索範囲検索:    
    ホーム    製品    サービス & ソリューション    サポート & ダウンロード    マイアカウント    
skip to main content

developerWorks Japan  >  Lotus | Java technology  >

J2EE プロジェクトの IBM Lotus Expeditor V6.1 へのマイグレーション

developerWorks
ページオプション

JavaScript を要するドキュメントオプションは表示されません

サンプルコード

原文はこちら

原文はこちら


レベル: 中級

Sushant Naik (sushnaik@in.ibm.com), Software Engineer, Pervasive Computing, IBM, India

2008年 1月 22日

IBM Lotus Expeditor Toolkit を使って J2EE プロジェクトを IBM Lotus Expeditor V6.1 にマイグレートし、マイグレートされたプロジェクトを Lotus Expeditor ランタイムにデプロイしましょう。この記事では、J2EE プロジェクトをマイグレートするためにはどのようなステップが必要なのか、また J2EE のどの機構が Lotus Expeditor ではサポートされていないのかを説明します。

IBM Lotus Expeditor は、J2EE アプリケーションをクライアントに拡張する際の作業を、おなじみのプログラミング・モデルを使って容易に行えるようにするために IBM が提供するソフトウェアです。IBM Lotus Expeditor Toolkit を使うことによって、J2EE プロジェクトを (Lotus Expeditor ランタイム上で実行するために) 作成し直す必要がなくなるため、アプリケーションの開発とデプロイメントを迅速に行うことができます。この記事では、こうした作業を行う方法について説明します。

この記事を最大限に活用するためには Java™ と J2EE に慣れている必要があり、また Eclipse 3.x 技術を使ったプラグイン開発にも慣れている必要があります。J2EE プロジェクトはプラグイン・プロジェクトではありませんが、Lotus Expeditor プロジェクトはプラグイン・プロジェクトであることを忘れないでください。Lotus Expeditor プロジェクトにはプラグイン・プロジェクト専用のバンドル・マニフェストと plugin.xml ファイルがあるため、これらのファイルの扱い方を理解している必要があります。

この記事では以下の内容について説明します。

  • 既存の J2EE EJB (Enterprise JavaBean) プロジェクトを Lotus Expeditor にマイグレートする方法
  • Lotus Expeditor がサポートしていない J2EE 機能はどれか
  • マイグレートしたプロジェクトを Lotus Expeditor ランタイムにデプロイする方法

この記事で説明するステップを開始する前に、IBM Rational Application Developer V7.0 と Lotus Expeditor Toolkit V6.1、そして Lotus Expeditor Client V6.1 をインストールしておく必要があります。Rational Application Developer for WebSphere Software の無料の試用版は developerWorks のサイトからダウンロードすることができます。

既存の J2EE EJB プロジェクトを Lotus Expeditor にマイグレートする

この記事では J2EE アプリケーションの開発については触れません。ただしプロセスを簡単にするために、既存の J2EE サンプル・プロジェクトをインポートし、それを後でマイグレートします。作業を開始する前に、この記事の「ダウンロード」セクションに用意されたサンプル・コード (sampleJ2EEProject.zip) を必ずダウンロードしてください。

ではまず、サンプルの J2EE プロジェクトを Rational Application Developer にインポートしましょう。

  1. Rational Application Developer の中で、Window - Open Perspective - Other - J2EE の順に選択して J2EE パースペクティブに切り替えます。
  2. File - Import の順に選択して sampleJ2EEProject.zip をインポートします。
  3. Import ウィザードの中で「Existing projects into workspace (既存のプロジェクトをワークスペースにインポート)」を選択し、Next をクリックします。
  4. 図 1 に示す Import Projects ウィザードで Select archive file (アーカイブ・ファイルを選択する) のオプションを選択し、ダウンロードした ZIP ファイル sampleJ2EEProject.zip までブラウズし、Finish をクリックします。

    図 1. Import Projects ウィザード
    Import Projects ウィザード

  5. File - New - Project の順に選択して New Project ウィザードを開きます。
  6. New Project ダイアログ・ボックスの中で、Client Services を展開します。さまざまな種類の Client Services プロジェクトを作成するために使用される、いくつかのタイプのウィザードが表示されます。「Convert Project to Client Services Project (プロジェクトを Client Services プロジェクトに変換する)」オプションを選択し、そして Next をクリックします (図 2)。

    図 2. New Project ウィザード
    New Project ウィザード

  7. 図 3 に示す Convert Existing Project (既存のプロジェクトを変換する) ウィザードには、変換の対象となる、Client Services プロジェクトではないプロジェクトのリストが含まれています。注意点として、J2EE プロジェクトを Client Services にマイグレートした後は、このステップの逆を行うことはできません。つまり J2EE プロジェクトを変換前の状態に戻すことはできません。Lotus Expeditor Toolkit には、既存の J2EE プロジェクトの新しいコピーを作成し、その新しいコピーを Client Services に変換する、「Copy project before conversion (変換前にプロジェクトをコピーする)」オプションが用意されています。もし必要であれば、このオプションを選択し、そのプロジェクトの新しいコピーの名前を指定します。変換を行う際には、1 度に 1 つのプロジェクトしか選択することはできません。Next をクリックします。

    図 3. Convert Existing Project ウィザード
    Convert Existing Project ウィザード

  8. 図 4 に示す Target Definition パネルには、追加するサービスのリストが表示されてます (例えば Java Message Service (JMS) APIs や Managed Settings、MQ Everyplace など)。ここでは、追加のサービスは使用しないため、これらのサービスの選択に関してデフォルトのままにしておきます。Finish をクリックし、選択された EJB プロジェクトを Client Services プロジェクトに変換します。

    図 4. Convert Existing Project: Target Definition パネル
    Convert Existing Project: Target Definition パネル

  9. Finish をクリックすると、ウィザードは変換前のテストを実行し、既存の EJB の要素に基づいてエラーと警告を表示します (Lotus Expeditor ランタイムに対して実行する際には、これらの要素を変更する必要があるかもしれません)。もし何らかのエラーや警告条件が発見されると、変換を継続するかキャンセルするかを尋ねるダイアログ・ボックスが表示されます。OK をクリックして変換を続けます (図 5)。

    図 5. Convert Existing Project: Warning (警告)
    Convert Existing Project: Warning (警告)

Client Services にマイグレートされる EJB プロジェクトは Client Services ETC (Embedded Transaction Container) プロジェクトとして知られています。

同じステップに従って、サンプル Web プロジェクト BankWeb を Client Services プロジェクトに変換します。Client Services プロジェクトにマイグレートされるプロジェクトは Client Services Web プロジェクトとして知られています。




上に戻る


ETC (embedded transaction container) ロジックを作成する

ETC は、通常の J2EE EJB サーバーやコンテナーよりも制約の厳しい機器を対象としています。この 2 つのプログラミング・モデルは非常に似ていますが、ETC に特有の側面もあります。以下のセクションでは、組み込みトランザクションに特有の考慮が必要な作業について説明します。

ファインダー・メソッドを実装する

ETC はカスタムのファインダー機能を実装するために、異なる手法を使っています。ETC の場合、ホーム・インターフェースで宣言される (findByPrimaryKey 以外の) 各ファインダー・メソッドに対して、対応するコレクションを作成するために必要なビジネス・ロジックを提供する必要があります。Bean クラスでの EJB ファインダー・メソッドの実装は、このランタイムではサポートされていません。Lotus Expeditor Toolkit では、BaseJDBCFinder を継承する抽象ファインダー・ヘルパー・クラスにこのビジネス・ロジックがパッケージ化されている必要があります。そうすると、Lotus Expeditor Toolkit はこのクラスを具象 JDBC ファインダー・ヘルパーの実装クラスに継承します。

データ・ソースを構成する

Client Services は、宣言型の JNDI を使うための ObjectFactory 実装を 3 つ提供しています。このファクトリーは (スキーマ定義ファイルによって記述される) Eclipse 拡張ポイントを提供しており、この拡張ポイントによって、クライアントが JNDI を参照する際に JNDI にバインドされる Java オブジェクトを記述することができます。

拡張ポイントを追加し、IBM DB2 Everyplace データ・ソース・オブジェクトをインスタンス化します (リスト 1)。


リスト 1. 拡張ポイントを追加する
                
<extension
         point="com.ibm.pvc.jndi.provider.java.genericobject">
         <object 
         	jndi-name="BANKING" 
         	class="com.ibm.db2e.jdbc.DB2eDataSource">
         	<method name="setUrl">
		  		<method-parameter	type="String"
		    		value="jdbc:db2e:${_workspace}\\ejb\\BANKDb\">
		  		</method-parameter>
	       </method>
         </object>
</extension>

ETC では、CMP (Container Managed Persistence) からデータベースに接続する際に、特定のデータ・ソース (TxnDataSource) を使用する必要があります。この特定のデータ・ソースは TxnDataSourceFactory を使って作成されます。TxnDataSource は、CMP によるデータベースへのアクセスのみに使われます。それ以外のデータベース・アクセスではデータ・ソースを使う必要があります。

この、ベンダー特有の DataSource によるラッピングは、JNDI バインディングの前、あるいは参照の後に行うことができますが、ベスト・プラクティスは JNDI バインディングの前にラッピングすることです。JNDI バインディング前のラッピングは、参照した後に毎回ラッピングするのとは異なり、1 度しか行われないからです。このラッピングを行えるようにするには、リスト 2 に示す拡張ポイントを追加します。


リスト 2. ラッピング用の拡張ポイントを追加する
<extension
          point="com.ibm.pvc.jndi.provider.java.binding">
   <binding jndi-name="BANKING"
    objectFactory-id="com.ibm.pvc.txncontainer.TxnDataSourceObjectFactory">
   </binding>
</extension>

カスタムのバンドル・アクティベーターを提供する

ETC ツールは、デフォルトのバンドル・アクティベーター、com.ibm.pvc.txncontainer.GenericActivator を参照するプロジェクトを作成します。このアクティベーターは、EJB のホーム・インターフェースを登録します。既存のプロジェクト用にカスタムのバンドル・アクティベーターを作成するためには、com.ibm.pvc.txncontainer.GenericActivator クラスを継承するクラスを作成する必要があります。このクラスの start() メソッドと stop() メソッドでは、GenericActivator の start() メソッドと stop() メソッドそれぞれをを呼び出すようにクラスを作成したら、バンドルのマニフェストの中にある、このクラスの名前を更新します (図 6)。このステップによって、Bundle-Activator プロパティーにカスタムのバンドル・アクティベーター・クラスが設定され、EJB マニフェスト・ファイル META-INF/MANIFEST.MF が更新されます。


図 6. BankEJB: MANIFEST.MF
BankEJB: MANIFEST.MF

ローカルのデータベースとテーブルを作成する

エンティティー Bean を呼び出す前に、エンティティー Bean 用のローカルのデータベースとテーブルを必ず作成するようにします。データベースとテーブルを作成する際にロジックを追加するための最適の場所は、ETC プロジェクトの Bundle Activator の start() メソッドです。

関係をサポートする

CMR (container-managed relationship) は、EJB 仕様に準拠するさまざまなエンティティーの間でサポートされています。ETC はリンク・テーブルによる手法を使って CMR 機能を実装します。A と B という 2 つの EJB を考えてみてください。この 2 つの EJB に対して、CMR フィールドが A または B、あるいはその両方に対して定義されるように、関係 R が定義されています。この 2 つの EJB がデプロイされると、(A と B の永続状態の CMP を提供する) データベース・テーブルと関連付けられる永続状態の CMR はなくなります。その代わり、永続状態の CMR は、それぞれの関係ごとに、別々のリレーショナル・データベースのリンク・テーブルの中に維持されます。

関係を表すデータは、別のデータベース・テーブル (リンク・テーブル) に保存されます。リンク・テーブルの各行は、2 つのエンティティーの間の関係を表現しています。リンク・テーブルの列には、一方のエンティティーの主キーに対する列のセットと、もう一方のエンティティーの主キーに対する列のセット、そしてオプションの判別用の列があります。リンク・テーブルの列の名前は、対応する CMP 主キー列に対するカスタムのデプロイメント情報で指定される命名スキーマに従う必要があります (ただし、その列がロール 1 またはロール 2 の EJB のどちらに関連付けられているかにより、すべての列には r1_ または r2_ という接頭辞が付くという点は除きます)。エンティティー Bean を呼び出す前に、EJB の関係それぞれに対してこうしたリンク・テーブルが存在することを確認します。




上に戻る


Web プロジェクトのロジックを作成する

以下の作業には、Client Services という Web プロジェクトに特有の考慮事項が含まれています。こうした作業は、J2EE プロジェクトから Client Services Web プロジェクトにマイグレートするために必要なものです。

  • 必要なライブラリーを提供します。jclDesktop ランタイムは java.rmi パッケージを提供していません。そのため、PortableRemoteObject.narrow() を参照するとエラーになります。ETC は他のサーバー上の EJB へのアクセスを許可しないため、PortableRemoteObject.narrow() を単純な JNDI ルックアップで置き換えてしまいます。
  • Lotus Expeditor ランタイムで Web アプリケーションを起動するためのショートカット・メニューを提供します。リスト 3 に示す拡張ポイントを BankWeb プロジェクトの plugin.xml に追加し、このプロジェクトを Lotus Expeditor ランタイムの中でショートカット・メニューを使って起動できるようにします。

リスト 3. 拡張ポイントをプロジェクトの plugin.xml に追加する
<extension id="kw4qri0g1j4t" point="com.ibm.eswe.workbench.WctWebApplication">
      <WEBApplication DisplayName="XYZ Banking">
         <WebApplicationUrl local="true" secured="false" url="/BankWeb/Banking.html">
         </WebApplicationUrl>
         <BrowserConfiguration showAddressbar="true" showToolbar="false">
         </BrowserConfiguration>
      </WEBApplication>
   </extension>




上に戻る


Lotus Expeditor でサポートされていない J2EE 機能

Lotus Expeditor は以下の J2EE 機能をサポートしていません。

  • ステートフル・セッション Bean
  • 1 つのアドレス空間で実行する際に、変異可能でシリアライズ可能なオブジェクトをコピーして渡す動作
  • EJB 1.1 の場合、ETC は EJB のリモート・インターフェースまたはリモート・ホーム・インターフェースへの参照を永続化させません。この機能は EJB 2.1 では要求されていないことに注意してください。
  • メッセージ駆動の Bean
  • Java セキュリティーのサポート
  • EJB 問い合わせ言語 (EJB QL: EJB Query Language)
  • home メソッド
  • select メソッド
  • Bean 管理のトランザクション
  • ファインダーに対する列挙戻り型。コレクション戻り型はサポートされています。
  • トランザクション分離レベルの指定
  • コレクションとイテレーターが作成されたトランザクションの外でのコレクションとイテレーターのサポート
  • setTransactionTimeOut() メソッド
  • BigDecimal (J2ME (JSR169) ではサポートされていません)



上に戻る


Client Services にマイグレートしたプロジェクトを Lotus Expeditor ランタイム・プラットフォームにデプロイする

Client Services アプリケーションは Lotus Expeditor ランタイム上で実行されます。Lotus Expeditor Toolkit は、バンドル特有のこうした詳細を自動的に処理します。従って、Lotus Expeditor ランタイムをターゲットとするプロジェクト、あるいは他の OSGi サービスに依存するプロジェクトは、Client Services Project Creation ウィザードを使って作成するようにお勧めします。Lotus Expeditor ランタイムは EAR ファイルを使ってエンタープライズ・アプリケーションをデプロイする方法をサポートしていません。アプリケーションは、ランタイムに直接デプロイされます。

これで J2EE プロジェクトを Client Service にマイグレートできたので、マイグレートしたプロジェクトを Lotus Expeditor ランタイムにデプロイしましょう。マイグレートしたプロジェクトをデプロイするためには、下記のステップに従います。

  1. Project Explorer で BankWeb プロジェクトを右クリックし、Run - Run on Server の順に選択します。
  2. 図 8 に示す Run On Server ダイアログ・ボックスで、以下の操作を行います。
    • 「Manually define a new server (新しいサーバーを手動で定義する)」オプションを選択します。
    • Client Services v6.1 を選択します。
    • Next をクリックします。
    • Client Services Server のデフォルトをそのままにし、Next をクリックします。
    • 構成されたプロジェクト・リストに BankEJB プロジェクトを追加します。
    • Finish をクリックして Client Services Lotus Expeditor ランタイムを実行します。

図 8. サーバーを定義する
 サーバーを定義する

この記事の「ダウンロード」セクションには、マイグレートされたプロジェクト (migratedSampleJ2EEProject.zip) が参考として用意されています。




上に戻る


アプリケーションをテストする

これで J2EE プロジェクトをデプロイできたので、デプロイが成功しているかどうかを確認しましょう。Lotus Expeditor が起動したら、左側にある Open アイコンを選択し、XYZ Banking を選択します。バンキングのページが図 9 のように表示されます。


図 9. XYZ Banking のページ
XYZ Banking のページ

Submit をクリックすると、結果のページが図 10 のように表示されます。


図 10. XYZ Banking の結果のページ
XYZ Banking の結果のページ



上に戻る


まとめ

Lotus Expeditor を利用すると、アプリケーションの重要コンポーネントを、サーバーからデスクトップやラップトップ、タブレット、ハンドヘルド・クライアントなどに、標準的な API とサービスを使って移動することができます。アプリケーションのコンポーネントをクライアントに移動し、クライアントで実行できるようになると、ビジネスにおいて劇的な結果を生み出せるようになります。アプリケーションはビジネス・オペレーションをクライアント上でローカルに実行するため、ユーザーにとってはアプリケーションの応答時間が改善されます。その結果、クライアントとサーバーとの間のネットワーク・トラフィックが減少し、サーバーの負荷が軽減されます。さらに、モバイル・ユーザーは、ネットワークに接続できない場所であってもクライアント上でアプリケーションを生産的に使い続けることができます。

この記事では、J2EE プロジェクトを Client Services プロジェクトにマイグレートするための方法を説明しました。そして EJB プロジェクトと動的な Web プロジェクトを Client Services に変換しました。J2EE アプリケーションを Lotus Expeditor にマイグレートすることで、ネットワークに接続できる場合も接続できない場合も、いつでも、どこでも、アプリケーションにアクセスすることができます。





上に戻る


ダウンロード

ファイル名サイズダウンロード形式
migratedSampleJ2EEProject.zip51KBHTTP
sampleJ2EEProject.zip33KBHTTP
ダウンロード形式について


参考文献

学ぶために

議論するために


著者について

Author photo

Sushant Naik は IBM India Software Labs にある IBM Pervasive Computing の中の Embedded Transaction Container Tools チームの開発者です。彼の連絡先は sushnaik@in.ibm.com です。




記事の評価


サイト改善のため、ご意見をお寄せください。こちらのフォームからお願いいたします。



はいいいえわからない
 


 


12345
不充分・不完全である大変素晴らしい
 


上に戻る


    日本IBMについて プライバシー お問い合わせ