Enterprise JavaBeans の設定

このセクションでは、標準 EJB デプロイメントディスクリプタである ejb-jar.xml と、JRun 固有のデプロイメントディスクリプタである jrun-ejb-jar.xml について説明します。詳細については、<JRun のルートディレクトリ>/docs/descriptordocs/index.html ファイルのデプロイメントディスクリプタのドキュメントを参照してください。

EJB のプログラミング方法の詳細については、『JRun プログラマーガイド』および「このマニュアルの概要」に記載されている参考文献を参照してください。

JRun には、デプロイメントディスクリプタファイルを直接操作せずに EJB の開発、パッケージ、およびデプロイを実行できる次のツールが用意されています。

ejb-jar.xml デプロイメントディスクリプタについて

標準 EJB デプロイメントディスクリプタである ejb-jar.xml を使用して、次の表のような EJB モジュールの要素を設定します。有効な ejb-jar.xml ファイルには、有効なenterprise-
beans セクションのみが必要です。bean 開発者はこのセクションで 1 つ以上の bean を宣言します。アセンブル担当者は enterprise-beans セクションおよび assembly-descriptor セクションを処理します。 このファイルのルート要素は ejb-jar です。

XML 要素
必須/
オプション

説明
description、display-name、small icon、large icon
オプション
ツールで使用する説明、名前、およびイメージ
enterprise-beans
必須
1 つ以上のセッション、エンティティ、またはメッセージによる bean の宣言。bean 開発者が初期値を設定します。
アセンブル担当者は、EJB モジュールをエンタープライズアプリケーションに追加する際に、次の情報を修正または追加できます。
  • リソースリファレンス
  • EJB が宣言するセキュリティロールリファレンスと、アセンブル担当者が定義するセキュリティロールとの role-link を指定できるセキュリティロールリファレンス
  • EJB モジュール内の特定の bean への ejb-link を指定できる EJB リファレンス
relationships
オプション
コンテナ管理パーシスタンス (CMP) 2.0 を使用したエンティティ bean が関与するリレーションシップの記述
assembly-descriptor
オプション
複数の EJB をアプリケーションユニットに組み立てる方法についてのアセンブル担当者の説明。トランザクション属性、メソッドへのアクセス許可、セキュリティロール、および除外されたメソッドが含まれています。
ejb-client-jar
オプション
クライアントが EJB にアクセスするために必要なクラスが含まれている JAR ファイルの宣言。

enterprise-beans セクションについて

ejb-jar.xml ファイルの enterprise-beans セクションは唯一の必須セクションです。このセクションは、bean 開発者がアプリケーションの一部である bean を宣言する場所です。

共通の要素

次の表では、セッション、エンティティ、およびメッセージによる bean に共通する、ejb-jar/enterprise-beans 要素の下の要素のみを説明します。

XML 要素
必須/
オプション

説明
session、entity、または message-driven
(親要素)
必須
EJB のタイプ
description、display-name、small icon、large icon
オプション
ツールで使用する説明、名前、およびイメージ
ejb-name
必須
bean の識別名。jrun-ejb-jar.xml ファイル内の対応する jndi-name 要素に JNDI 名が指定されていない場合、JRun は ejb-name を JNDI 名として使用します。
home および remote、local-home および local、または次の要素を 4 つとも指定する必要があります。

home

EJB のホームインターフェイスの完全修飾名

local-home

EJB のローカルホームインターフェイスの完全修飾名

remote

EJB のリモートインターフェイスの完全修飾名

local

EJB のローカルインターフェイスの完全修飾名
ejb-class
必須
EJB の実装クラスの完全修飾名
env-entry
(0 以上)
オプション
EJB の環境エントリ
ejb-ref
(0 以上)
オプション
EJB コード内の、他の EJB のホームへのリファレンス。bean 間でのメソッド呼び出しが可能です。
アセンブル担当者のロールでは、オプションの ejb-link 要素を使用して、EJB リファレンスが同じエンタープライズアプリケーション内の EJB にリンクされていることを指定できます。EJB が別の EJB モジュール内にある場合は、ejb-name 値の前に、EJB モジュールへの相対パスとシャープ記号 (#) を付ける必要があります。
他の EJB の jrun-ejb-jar.xml ファイル内で ejb-ref 要素のデフォルトの JNDI 名が変更された場合や、EJB が 同じ EJB モジュールまたはエンタープライズアプリケーション内にない場合、この EJB の jrun-ejb-jar.xml ファイルにはその JNDI 名を含む、対応している ejb-local-ref 要素が必要です。
ejb-local-ref
(0 以上)
オプション
EJB コード内の、他の EJB のローカルホームへのリファレンス。bean 間でのメソッド呼び出しが可能です。
アセンブル担当者のロールでは、オプションの ejb-link 要素を使用して、EJB ローカルリファレンスが Web アプリケーションと同じエンタープライズアプリケーション内の EJB にリンクされていることを指定できます。EJB が別の EJB モジュール内にある場合は、ejb-name 値の前に、EJB モジュールへの相対パスとシャープ記号 (#) を付ける必要があります。
他の EJB の jrun-ejb-jar.xml ファイル内で ejb-local-ref 要素のローカルホームのデフォルトの JNDI 名が変更された場合や、EJB が 同じ EJB モジュールまたはエンタープライズアプリケーション内にない場合、この EJB の jrun-ejb-jar.xml ファイルにはその JNDI 名を含む、対応している ejb-local-ref 要素が必要です。
security-role-ref
(0 以上)
(メッセージによる bean は適用外)
オプション
EJB コード内の、セキュリティロールへのリファレンス
security-identity
オプション
EJB のメソッドの実行のために、呼び出し側に関連付けられているセキュリティロールまたは特定の run-as セキュリティロールのどちらを使用するかを指定します。空の use-caller-identity 要素、または説明 (オプション) および role-name 要素が含まれている run-as 要素のいずれかを指定します。
resource-ref
(0 以上)
オプション
EJB コード内の、外部リソースへのリファレンス
resource-env-ref
(0 以上)
オプション
外部リソースに関連付けられている管理されたオブジェクトへの EJB コード内のリファレンス

必須のセッション bean 要素

あらゆるタイプの bean に必須の要素の他に、セッション bean の ejb-jar/enterprise-beans/session 要素の下には次の要素が必要です。
XML 要素
説明
session-type
セッション bean がステートフルセッション bean か、あるいはステートレスセッション bean かを指定します。値は Stateful および Stateless です。
transaction-type
EJB が bean 管理トランザクションを使用するか、あるいはコンテナ管理トランザクションを使用するかを指定します。値は Bean および Container です。

必須のエンティティ bean 要素

あらゆるタイプの bean に必須の要素の他に、エンティティ bean の ejb-jar/enterprise-beans/entity 要素の下には次の要素が必要です。
XML 要素
説明
persistence-type
パーシスタンスがコンテナ管理か、あるいは bean 管理かを指定します。値は Container および Bean です。
prim-key-class
エンティティ bean のプライマリキークラスの完全修飾名。bean 開発者がデプロイ時までプライマリキークラスの定義を保留する場合は、それを java.lang.Object に設定します。
reentrant
bean がリエントラントかどうかを指定するブール値。リエントラントとは、bean が直接メソッドを呼び出すか、あるいはその bean に対してメソッドを呼び出す他の bean を呼び出すことができるかを意味します。
abstract-schema-name
CMPバージョン2.x および EJB Query Language (EJB QL) を使用したエンティティ bean のアブストラクトスキーマタイプの名前。

必須のメッセージによる bean 要素

あらゆるタイプの bean に必須の要素の他に、メッセージによる bean の ejb-jar/enterprise-beans/message-driven 要素の下には次の要素が必要です。
XML 要素
説明
transaction-type
EJB が bean 管理トランザクションを使用するか、あるいはコンテナ管理トランザクションを使用するかを指定します。値は Bean および Container です。

assembly-descriptor セクションについて

アセンブル担当者は ejb-jar.xml ファイルの assembly-descriptor セクションで、セキュリティロール、メソッドへのアクセス許可、コンテナ管理トランザクションを使用する EJB のトランザクション属性、およびデプロイから除外するメソッドを定義します。最上位レベルのアセンブルディスクリプタの要素はすべてオプションです。これらの要素を次の表に示します。
XML 要素
説明
security-role
(0 以上)
セキュリティロールの宣言。JRun 環境で定義されたセキュリティロールと一致する必要があります。詳細については、『JRun 管理者ガイド』を参照してください。
method-permission
(0 以上)
1 つ以上のセキュリティロールが 1 つ以上のエンタープライズ bean メソッドを起動できるようにする指定
container-transaction
(0 以上)
EJB のメソッド呼び出しのトランザクションスコープをコンテナが管理する方法を指定します。trans-attribute 要素に次のいずれかのトランザクション属性を指定します。
  • NotSupported
  • Supports
  • Required
  • RequiresNew
  • Mandatory
  • Never
exclude-list
呼び出し不可として指定されたメソッドのセット。ここで指定されたメソッドを呼び出すことはできません。

例:ejb-jar.xml デプロイメントディスクリプタ

次のデプロイメントディスクリプタでは、ステートレスセッション bean、BMP エンティティbean、CMP 1.1 エンティティ bean、および CMP 2.0 エンティティ bean の設定情報を指定します。また、<JRun のルートディレクトリ>/servers/samples ディレクトリ内の JRun サンプルサーバ上のアプリケーションの ejb-jar.xml ファイルを表示することもできます。

ejb-jar.xml:ステートレスセッション bean の宣言とアセンブルディスクリプタ

<?xml version="1.0"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//
DTD EnterpriseJavaBeans 2.0//EN" "http://java.sun.com/dtd/
ejb-jar_2_0.dtd">
<ejb-jar>
  <enterprise-beans>
    <session>
      <ejb-name>CreditCard</ejb-name>
      <home>compass.CreditCardHomeRemote</home>
      <remote>compass.CreditCardRemote</remote>
      <ejb-class>compass.CreditCardBean</ejb-class>
      <session-type>Stateless</session-type>
      <transaction-type>Container</transaction-type>
      <security-identity><use-caller-identity/></security-identity>
    </session>
  </enterprise-beans>
  <assembly-descriptor>
    <security-role>
      <role-name>everyone</role-name>
    </security-role>
    <method-permission>
      <role-name>everyone</role-name>
      <method>
      <ejb-name>CreditCard</ejb-name>
      <method-name>*</method-name>
      </method>
    </method-permission>
    <container-transaction>
      <method>
        <ejb-name>CreditCard</ejb-name>
        <method-name>*</method-name>
      </method>
      <trans-attribute>Required</trans-attribute>
    </container-transaction>
  </assembly-descriptor>
</ejb-jar>

ejb-jar.xml:BMP エンティティ bean の宣言とアセンブルディスクリプタ

<?xml version="1.0"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD EnterpriseJavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd"><ejb-jar>
  <enterprise-beans>
    <entity>
      <ejb-name>Order</ejb-name>
      <home>compass.OrderHomeRemote</home>
      <remote>compass.OrderRemote</remote>
      <ejb-class>compass.OrderBean</ejb-class>
      <persistence-type>Bean</persistence-type>
      <prim-key-class>java.lang.Integer</prim-key-class>
      <reentrant>False</reentrant>
      <security-identity><use-caller-identity/></security-identity>
    </entity>
  </enterprise-beans>
  <assembly-descriptor>
    <security-role>
      <role-name>everyone</role-name>
    </security-role>
    <method-permission>
      <role-name>everyone</role-name>
      <method>
      <ejb-name>Order</ejb-name>
      <method-name>*</method-name>
      </method>
    </method-permission>
    <container-transaction>
      <method>
      <ejb-name>Order</ejb-name>
      <method-name>*</method-name>
      </method>
      <trans-attribute>Required</trans-attribute>
    </container-transaction>
  </assembly-descriptor>
</ejb-jar>

ejb-jar.xml:CMP 1.1 エンティティ bean の宣言

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 
2.0//EN" "http://java.sun.com/j2ee/dtds/ejb-jar_2_0.dtd">
<ejb-jar>

   <enterprise-beans>
      <entity>
         <ejb-name>Employee</ejb-name>
         <ejb-class>samples.cmp11.EmployeeBean</ejb-class>
         <home>samples.cmp11.EmployeeHome</home>
         <remote>samples.cmp11.Employee</remote>
         <persistence-type>Container</persistence-type>
         <primkey-field>employeeId</primkey-field>
         <prim-key-class>java.lang.String</prim-key-class>
         <reentrant>True</reentrant>
         <cmp-version>1.x</cmp-version>
         <cmp-field>
            <field-name>employeeId</field-name>
         </cmp-field>
         <cmp-field>
            <field-name>firstName</field-name>
         </cmp-field>
         <cmp-field>
            <field-name>lastName</field-name>
         </cmp-field>
         <cmp-field>
            <field-name>phone</field-name>
         </cmp-field>
      </entity>
   </enterprise-beans>
</ejb-jar>

ejb-jar.xml:CMP 2.0 エンティティ bean の宣言

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 
2.0//EN" "http://java.sun.com/j2ee/dtds/ejb-jar_2_0.dtd">
<ejb-jar>
   <enterprise-beans>
      <entity>
         <ejb-name>samples/cmp20/Employee</ejb-name>
         <ejb-class>samples.cmp20.EmployeeBean</ejb-class>
         <home>samples.cmp20.EmployeeHome</home>
         <remote>samples.cmp20.Employee</remote>
         <persistence-type>Container</persistence-type>
         <prim-key-class>java.lang.String</prim-key-class>
         <reentrant>True</reentrant>
         <primkey-field>employeeId</primkey-field>
         <abstract-schema-name>employeeschema</abstract-schema-name>
         <cmp-version>2.x</cmp-version>
         <cmp-field>
            <field-name>employeeId</field-name>
         </cmp-field>
         <cmp-field>
            <field-name>firstName</field-name>
         </cmp-field>
         <cmp-field>
            <field-name>lastName</field-name>
         </cmp-field>
         <cmp-field>
            <field-name>phone</field-name>
         </cmp-field>
         <query>
            <query-method>
               <method-name />
               <method-params />
            </query-method>
            <return-type-mapping>Local</return-type-mapping>
            <ejb-ql>SELECT OBJECT(o) FROM employeeschema AS o</ejb-ql>
         </query>
         <query>
            <query-method>
               <method-name />
               <method-params />
            </query-method>
            <return-type-mapping>Local</return-type-mapping>
            <ejb-ql>SELECT OBJECT(o) FROM employeeschema AS o WHERE o.lastName =
      ?1</ejb-ql>
         </query>
      </entity>
   </enterprise-beans>
</ejb-jar>

jrun-ejb-jar.xml デプロイメントディスクリプタについて

JRun 固有の EJB デプロイメントディスクリプタである jrun-ejb-jar.xml は必ずしも必要ではありません。このディスクリプタを使用して、JNDI 名、リソースマッピング、JDBC マッピングなど、JRun 固有の要素で ejb-jar.xml ファイルに含まれていない要素を設定します。JDBC マッピングは、CMP 1.1 エンティティ bean の作成、ロード、保管、検索、および削除に使用する SQL を指定します。

メモ:  jrun-ejb-jar.xml ファイルは自動的に生成できます。詳細については、 弟3章の"JRun 固有のデプロイメントディスクリプタの操作,"を参照してください。

jrun-ejb-jar.xml ファイルには、jrun-ejb-jar の下に次の最上位レベルの要素が含まれています。
XML 要素
説明
description
EJB モジュールの説明
source
bean のデプロイや SQL ステートメントの実行に使用するデータソースの JNDI 名
enterprise-beans
ejb-jar.xml ファイルの enterprise-beans セクションに対応する要素。このセクションを使用して、JNDI マッピング、リソースマッピング、EJB クラスタリング、ステートフルセッション bean のタイムアウト値、およびステートレスセッション bean のインスタンスプールサイズを設定します。

enterprise-beans セクションについて

このセクションでは、エンタープライズ bean のサブ要素について説明します。

共通の要素

次の表では、セッション、エンティティ、およびメッセージによる bean に共通する、jrun-ejb-jar/enterprise-beans 要素の下の要素を説明します。ejb-name および jndi-name 要素のみが必須です。
XML 要素
説明
session、entity、または message-driven
(親要素)
EJB のタイプ
ejb-name
EJB の識別名
jndi-name
EJB の JNDI 名。この要素に JNDI 名を指定しないと、JRun は ejb-name を JNDI 名として使用します。
tx-domain-name
EJB トランザクションが実行されるトランザクションドメインの名前
ejb-ref
bean 開発者が指定した ejb-ref-name とその JNDI 名とのマッピング。デプロイ担当者が JNDI 名を指定します。
この要素は、JNDI に EJB クラスを 2 回以上バインドする場合のみ必要です。
ejb-local-ref
EJB 開発者によって指定されたローカルホームの ejb-ref 名とその JNDI 名とのマッピング。デプロイ担当者が実際の JNDI 名を指定します。
この要素は、JNDI に EJB クラスを 2 回以上バインドする場合のみ必要です。
resource-env-ref
bean 開発者が指定した resource-env-ref-name とその JNDI 名とのマッピング。デプロイ担当者が JNDI 名を指定します。
この要素は、管理されたオブジェクトを JNDI に 2 回以上バインドする場合のみ必要です。
resource-ref
bean 開発者が指定した resource-ref-name とその JNDI 名とのマッピング。デプロイ担当者が JNDI 名を指定します。
この要素は、JNDI にリソースを 2 回以上バインドする場合のみ必要です。
cluster-home
この bean の EJB ホームをクラスタリングするかどうかを指定します。<JRun のルートディレクトリ>/servers/<JRun サーバ>/SERVER-INF/jrun.xml ファイルでクラスタリングが有効になっている場合、この値はデフォルトで true になります。この要素を使用して bean ごとにこの動作を無効にできます。
cluster-object
この bean の EJB オブジェクトをクラスタリングするかどうかを指定します。<JRun のルートディレクトリ>
/servers/<JRun サーバ>/SERVER-INF/jrun.xml ファイルでクラスタリングが有効になっている場合、この値はデフォルトで true になります。この要素を使用して bean ごとにこの動作を無効にできます。

セッション bean 要素

あらゆるタイプの bean に必須の要素の他に、セッション bean 設定の jrun-ejb-jar/enterprise-beans/session 要素の下には次のオプションの要素を指定できます。
XML 要素
説明
timeout
ステートフルセッション bean のタイムアウト値 (秒単位)。EJB インスタンスは、この時間だけアイドル状態が続くとパッシベート (メモリを節約するためにその EJB オブジェクトから分離) されます。
instance-pool
ステートレスセッション bean のインスタンスプールの最大サイズおよび最小サイズパラメータ

エンティティ bean 要素

あらゆるタイプの bean に必須の要素の他に、エンティティ bean 設定の jrun-ejb-jar/enterprise-beans/entity 要素の下には次のオプションの要素を指定できます。
XML 要素
説明
commit-option
EJB 2.0 仕様に準拠したコミットオプション。有効な値は A、B、および C です。
always-dirty
エンティティ bean のフィールドが変更されていない場合でも、トランザクションの終了時にデータソースを強制的に同期させる空の XML 要素
jdbc-mappings
CMP 1.1 エンティティ bean の CMP マッピングに関する、ejb-jar.xml ファイルで宣言されていない JRun 固有の情報。含まれている jdbc-mapping 要素は、エンティティ bean の作成、ロード、保管、検索、および削除に使用する SQL を指定します。

メッセージによる bean 要素

あらゆるタイプの bean に必須の要素の他に、メッセージによる bean 設定のjrun-ejb-jar/enterprise-beans/entity 要素の下には次のオプションの要素を指定できます。
XML 要素
説明
message-driven-subscription
永続サブスクリプションのためにメッセージによるコンテナが使用するクライアント ID
message-driven-destination
メッセージによるコンテナが使用する送信先

例:jrun-ejb-jar.xml デプロイメントディスクリプタ

次のデプロイメントディスクリプタでは、ステートフルセッション bean、ステートレスセッション bean、および CMP 1.1 エンティティ bean の設定情報を指定します。また、<JRun のルートディレクトリ>/servers/samples ディレクトリ内の JRun サンプルサーバ上のアプリケーションの jrun-ejb-jar.xml ファイルを表示することもできます。

jrun-ejb-jar.xml:ステートフルセッション bean の宣言

ステートフルセッション bean の JNDI 名を設定し、そのホームおよびオブジェクトクラスタリングを無効にして、そのタイムアウト値を設定します。

<?xml version="1.0"?>
<!DOCTYPE jrun-ejb-jar PUBLIC '-//Macromedia, Inc.//DTD jrun-ejb-jar 4.0//EN'
'http://jrun.macromedia.com/dtds/jrun-ejb-jar.dtd'>
<jrun-ejb-jar>
  <enterprise-beans>
    <session>
      <ejb-name>StatefulEJB</ejb-name>
      <jndi-name>StatefulEJB</jndi-name>
      <cluster-home>false</cluster-home>
      <cluster-object>false</cluster-object>
      <timeout>900</timeout>
    </session>  </enterprise-beans></jrun-ejb-jar>

jrun-ejb-jar.xml:ステートレスセッション bean の宣言

この例では、ステートレスセッション bean の JNDI 名およびインスタンスプールサイズの最大値と最小値を設定します。「ejb-jar.xml:ステートレスセッション bean の宣言とアセンブルディスクリプタ」も参照してください。

<?xml version="1.0"?>
<!DOCTYPE jrun-ejb-jar PUBLIC '-//Macromedia, Inc.//DTD jrun-ejb-jar 4.0//EN'
'http://jrun.macromedia.com/dtds/jrun-ejb-jar.dtd'>
<jrun-ejb-jar>
  <enterprise-beans>
    <session>
      <ejb-name>CreditCard</ejb-name>
      <jndi-name>ejb/CreditCard</jndi-name>
      <cluster-home>False</cluster-home>
      <cluster-object>False</cluster-object>
      <instance-pool>
        <minimum-size>1</minimum-size>
        <maximum-size>5</maximum-size>
      </instance-pool>
    </session>
  </enterprise-beans>
</jrun-ejb-jar>

jrun-ejb-jar.xml:CMP 1.1 エンティティ bean の宣言

CMP 1.1 エンティティ bean の JNDI 名および JDBC マッピングを設定します。「ejb-jar.xml:CMP 1.1 エンティティ bean の宣言」も参照してください。

<?xml version="1.0"?>
<!DOCTYPE jrun-ejb-jar PUBLIC '-//Macromedia, Inc.//DTD jrun-ejb-jar 4.0//EN'
'http://jrun.macromedia.com/dtds/jrun-ejb-jar.dtd'>
<jrun-ejb-jar>
  <enterprise-beans>
    <entity>
      <ejb-name>Employee</ejb-name>
      <jndi-name>Employee</jndi-name>
      <jdbc-mappings>
        <jdbc-mapping>
          <name>create</name>
          <statement>
            <action>INSERT INTO employees (employee_id , first_name , last_name,
      phone) VALUES ( ?, ? , ? , ?)</action>
            <source>samples</source>
            <params>
              <param>
                 <name>employeeId</name>
                 <type>VARCHAR</type>
              </param>
              <param>
                 <name>firstName</name>
                 <type>VARCHAR</type>
              </param>
              <param>
                 <name>lastName</name>
                 <type>VARCHAR</type>
              </param>
              <param>
                 <name>phone</name>
                 <type>VARCHAR</type>
              </param>
            </params>
          </statement>
        </jdbc-mapping>
        <jdbc-mapping>
          <name>load</name>
          <statement>
            <action>SELECT employee_id, first_name, last_name, phone FROM 
employees
      WHERE employee_id=?</action>
            <source>samples</source>
            <params>
              <param>
                 <name>employeeId</name>
                 <type>VARCHAR</type>
              </param>
            </params>
            <fields>
              <field>employeeId</field>
              <field>firstName</field>
              <field>lastName</field>
              <field>phone</field>
            </fields>
          </statement>
        </jdbc-mapping>
        <jdbc-mapping>
          <name>remove</name>
          <statement>
            <action>DELETE FROM employees WHERE employee_id=?</action>
            <source>samples</source>
            <params>
              <param>
                 <name>employeeId</name>
                 <type>VARCHAR</type>
              </param>
            </params>
          </statement>
        </jdbc-mapping>
        <jdbc-mapping>
          <name>store</name>
          <statement>
            <action>UPDATE employees SET first_name=?, last_name=?, phone=?WHERE
      employee_id=?</action>
            <source>samples</source>
            <params>
              <param>
                 <name>firstName</name>
                 <type>VARCHAR</type>
              </param>
              <param>
                 <name>lastName</name>
                 <type>VARCHAR</type>
              </param>
              <param>
                 <name>phone</name>
                 <type>VARCHAR</type>
              </param>
              <param>
                 <name>employeeId</name>
                 <type>VARCHAR</type>
              </param>
            </params>
          </statement>
        </jdbc-mapping>
        <jdbc-mapping>
          <name>findAll</name>
          <statement>
            <action>SELECT employee_id FROM employees</action>
            <source>samples</source>
            <fields>
              <field>employeeId</field>
            </fields>
          </statement>
        </jdbc-mapping>
        <jdbc-mapping>
          <name>findByLastName</name>
          <statement>
            <action>SELECT employee_id FROM employees WHERE last_name=?1</action>
            <source>samples</source>
            <params>
              <param>
                 <name>lastName</name>
                 <type>VARCHAR</type>
              </param>
            </params>
            <fields>
              <field>employeeId</field>
            </fields>
          </statement>
        </jdbc-mapping>
        <jdbc-mapping>
          <name>findByPrimaryKey</name>
          <statement>
            <action>SELECT employee_id FROM employees WHERE employee_id=?</
action>
            <source>samples</source>
            <params>
              <param>
                 <name>employeeId</name>
                 <type>VARCHAR</type>
              </param>
            </params>
            <fields>
              <field>employeeId</field>
            </fields>
          </statement>
        </jdbc-mapping>
      </jdbc-mappings>
    </entity>
  </enterprise-beans>