ここでは、Bean クラスを Sun Java System Application Server 8.2 に移行するために必要な手順を説明します。
Bean クラス宣言の先頭にキーワード abstract を追加します。
たとえば、Bean クラス宣言が次のような場合
public class CabinBean implements EntityBean
次のように変更します。
abstract public class CabinBean implements EntityBean
アクセサの前に接頭辞としてキーワード abstract を付けます。
変更後のすべてのアクセサを、Bean クラスのソース (.java) ファイルにクラスレベルで挿入します。
Bean クラスのソースファイル内のすべての cmp フィールドをコメントにします。
protected インスタンス変数の宣言を cmp-field 名から小文字で構築し、これをクラスレベルで挿入します。
すべての ejbCreate() メソッド本体を読み込みます。複数の ejbCreate が存在する場合もあります。
「<cmp-field>=いくつかの値またはローカル変数」というパターンを検索し、「抽象ミュテータメソッド名 (同じ値またはローカル変数)」という表現に置き換えます。
たとえば、移行前の ejbCreate 本体が次のような場合、
public MyPK ejbCreate(int id, String name) { this.id = 10*id; Name = name; //1 return null; }
次のように変更します。
public MyPK ejbCreate(int id, String name) { setId(10*id); setName(name); //1 return null; }
//1 の抽象アクセサのメソッド署名が、EJB 2.0 仕様によって定められた Camel Case 規約に沿っていることに注目してください。また、キーワード「this」が元のソースに存在する場合としない場合がありますが、これは変更後のソースファイルからは削除してください。
手順 5 の ejbPostCreate() メソッドで宣言したすべての protected 変数を初期化します。
protected 変数の数は ejbCreate() メソッドの数と同じです。この初期化は、初期化コードを次の方法で挿入することで実行されます。
protected String name; //from step 5 protected int id; //from step 5 public void ejbPostCreate(int id, String name) { name = getName(); /*abstract accessor*/ //inserted in this step id = getId(); /*abstract accessor*/ //inserted in this step }
ejbLoad メソッド内部で、protected 変数を Bean のデータベース状態に設定します。
このためには、次のコード行を挿入します。
public void ejbLoad() { name = getName(); // inserted in this step id = getId(); // inserted in this step ... // existing code }
同じように、データベース状態が更新されるように、ejbStore() 内部の Bean の状態を更新します。
ただし、ejbCreate() 外部の主キーに対応する setter を更新することはできないので、このメソッド内に setter を含めないでください。次のコード行を挿入します。
public void ejbStore() { setName(name); //inserted in this step setId(id); //Do not insert this if //it is a part of the //primary key. ... //already present code }
存在するすべての <cmp-field> 変数名を、手順 5 で宣言した同等の protected 変数名に置き換えます。
Bean を移行しない場合、少なくとも <cmp-version>1.x</cmp-version> タグを ejb-jar.xml ファイル内の適切な場所に挿入する必要があります。これによって、移行されていない Bean も Sun Java System Application Server 8.2 上で動作し続けます。