この章では、Java Persistence API (JPA)とプレーンJavaオブジェクト("POJO"とも呼ばれる)に基づくJavaBeansコンポーネントのデータ・コントロールを作成する方法を説明します。
この章には次の項が含まれます:
データ・コントロールは、ADFモデルによって提供される抽象化です。データ・コントロールを使用して、データとビジネス・サービスを宣言的に操作し、UIコンポーネントを容易に作成できます。データ・コントロールの一般情報については、第1.1項「ADFモデルについて」を参照してください。
Beanデータ・コントロール・タイプを使用して、プレーンJavaオブジェクト(POJO)とJPAベースのJavaサービス・ファサード・クラスを作成します。
EJBデータ・コントロールと同様に、JPAベースのBeanデータ・コントロールを使用して持続データを処理できます。これらのデータ・コントロールは、JPAエンティティ・クラスにアクセッサ・メソッドを提供するPOJOサービス・ファサード・クラスに基づいています。JPAベースのBeanデータ・コントロールの主な違いは、EJBコンテナに依存できず、永続性を管理するためのコードをユーザーが提供する必要があることです。EJBデータ・コントロールの詳細は、第3.1項「EJBデータ・コントロールについて」を参照してください。
JPA機能を使用しないJavaクラスのBeanデータ・コントロールを作成することもできます。これらのデータ・コントロールは、永続性機能や名前付き基準のサポートを提供しませんが、たとえば属性に対する宣言的検証ルールの追加や、UIコントロール・ヒントのサポートなど、アダプタ・データ・コントロールのその他の機能は備えています。
JPAベースのBeanデータ・コントロールとは異なり、非JPAデータ・コントロールにはトランザクションの処理やデータソースの更新の実装が組み込まれていません。ただし、データ・コントロールによって認識されるシグネチャを持つ特定のメソッド内で、その機能のユーザー独自の実装をBeanクラスにコーディングできます。詳細は、第4.7項「非JPA Beanデータ・コントロールへのトランザクション動作の追加」、および第4.6項「Beanデータ・コントロールのカスタムCRUD操作の有効化」を参照してください。
非JPAデータ・コントロールは、スクロール可能ページングと範囲ページングをサポートしていますが、多少の手動コーディングを必要とします。詳細は、4.4.1項「データ・コントロールでページ分割サポートを手動で実装する方法」を参照してください。
Beanデータ・コントロールを拡張するカスタム・データ・コントロール・タイプを作成することもできます。詳細は、第4.9項「カスタムBeanデータ・コントロールの作成」を参照してください。
Beanデータ・コントロールは、Beanクラスのメタデータ・ラッパーとして機能し、データ・コントロール・オブジェクトとしてBeanのコード要素を公開します。このオブジェクトを使用して、これらのコード要素をUIコンポーネントにバインドできます。
Beanデータ・コントロールは、EJBデータ・コントロールと同じJava型およびコンストラクトをサポートします。詳細は、第3.2.1項「EJBデータ・コントロールでサポートされる型とコンストラクト」を参照してください。
Beanに基づいてデータ・コントロールを作成すると、データ・コントロールによって数種類のオブジェクトが公開され、それぞれのオブジェクトを各種UIコンポーネントにバインドできます。Beanデータ・コントロールは、EJBデータ・コントロールと同じタイプのオブジェクトを公開します。詳細は、第3.2.2項「EJBデータ・コントロール・オブジェクト」を参照してください。
Beanデータ・コントロールは、JavaBeans仕様を満たすクラスを基礎としています。たとえば、クラスが有効なデータ・コントロール・ソースであるためには、publicデフォルト・コンストラクタが必要です。
JPAベースのデータ・コントロールの全機能を活用するには、データ・コントロールによってサービスの構造を表現するために使用できるいくつかの要素をクラスに組み込む必要があります。これらの要素は、EJBデータ・コントロールのものとほとんど同じです。主な違いは、EJBセッションBeanのかわりに、Beanデータ・コントロールのJavaサービス・ファサード・クラスを使用することです。詳細は、第3.2.4項「EJBデータ・コントロールの前提条件と考慮事項」を参照してください。
Javaエンティティ・クラスにアクセスするためのサービス・メソッドを含むPOJOクラスに基づいて、Beanデータ・コントロールを作成できます。JDeveloperに備わっているウィザードが、データ・コントロールの操作に必要なすべてのメソッドを含むファサード・クラスの作成に役立ちます。
始める前に:
サービス・ファサードとデータ・コントロールが準拠するコード規則について、全般的に理解しておくと役に立つ場合があります。詳細は、第4.2項「データ・コントロールによって公開するBeanの準備」を参照してください。
次のタスクを完了する必要があります。
『Oracle JDeveloperによるアプリケーションの開発』のJPAエンティティを作成する方法に関する項で説明されているとおり、JPAエンティティを使用するプロジェクトを含むアプリケーション・ワークスペースを作成します。
JPAベースのBeanデータ・コントロールのサービス・ファサードを作成する手順は次のとおりです。
JPAエンティティ・クラスを含むパッケージを右クリックして、Javaサービス・ファサードを選択します。
「Javaサービス・ファサードの作成」ウィザードの「Javaサービス・クラス」ページで、次のことを行います。
サービス・クラスの名前を指定します。
サービス・ファサードの基礎にする永続性ユニットを指定します。
「暗黙的」または「明示的」ラジオ・ボタンを選択して、コマンドの動作を決定します。
「明示的」を選択した場合は、クラスにトランザクション・メソッドが生成されます。後でこのクラスに基づいてデータ・コントロールを作成した場合、これらのメソッドはCommit
操作およびRollback
操作として公開されます。
「暗黙的」を選択した場合は、データソースの行を追加および削除するためのメソッドとして、ウィザードによって生成されるpersistEntity()
、mergeEntity()
、およびremoveEntity()
の各メソッドを使用できます。
「Javaサービス・ファサード・メソッド」ページで、生成するメソッドを選択します。
注意: 後でデータ・コントロールを作成し、組込みページ分割とJPA問合せのサポートを使用する場合は、 |
「終了」をクリックして、ウィザードを終了します。
Beanの準備ができたら、JDeveloperを使用してデータ・コントロールを作成でき、これらのデータ・コントロールにより、Beanのサービス、およびデータ・コントロールによって提供される組込み操作にUIコンポーネントを宣言的にバインドするために必要なオブジェクトが提供されます。
JPAベースのBeanデータ・コントロールは、「新規ギャラリ」ウィンドウまたは「アプリケーション」ウィンドウから作成します。
始める前に:
Beanデータ・コントロールの一般的な知識があると役立ちます。詳細は、第4.3項「Beanデータ・コントロールによるJavaコレクションとメソッドの公開」を参照してください。
データ・コントロールが使用する、セッションBean内のコード・パターンとコンストラクトについて理解しておくと役に立つこともあります。詳細は、第4.2項「データ・コントロールによって公開するBeanの準備」を参照してください。
次のタスクを完了する必要があります。
Beanデータ・コントロールを作成する手順は次のとおりです。
「アプリケーション」ウィンドウで、データ・コントロールの作成対象のBeanを右クリックし、「データ・コントロールの作成」を選択します。
JPAベースのデータ・コントロールの場合は、データ・コントロールのベースとしてJavaサービス・ファサード・クラスを使用します。
「Beanデータ・コントロールの作成」ウィザードの「Beanクラスの選択」ページで、データ・コントロール・インスタンスの名前を指定します。
注意: 同じBeanの異なる動作を使用して、複数のデータ・コントロール・インスタンスを作成できます。詳細は、第3.3.11項「単一のBeanに対して異なるデータ・コントロールを作成する方法」を参照してください。 |
ADFデータ・コントロール機能の選択ページで、アプリケーションに使用する追加のデータ・コントロール機能に応じて、次のいずれかのチェック・ボックスを選択します。データ・コントロール機能を実装するためのメソッドがBeanに追加されます。
トランザクション。この機能を選択すると、commitTransaction()
、rollbackTransaction()
、およびisTransactionDirty()
の各メソッドがBeanに生成されます。JDeveloperを使用して、明示的なコミット動作を行うJavaサービス・ファサードを作成した場合は、これらのメソッドがすでに実装されています。詳細は、第4.7項「非JPA Beanデータ・コントロールへのトランザクション動作の追加」を参照してください。
カスタムCRUD。この機能により、永続データの操作をユーザーが独自に実装できます。JPAベースのBeanデータ・コントロールにはすでにJPAからのCRUD機能が備わっているので、JPAの機能をオーバーライドする場合は単にこの機能を選択すれば済みます。詳細は、第4.6項「Beanデータ・コントロールのカスタムCRUD操作の有効化」を参照してください。
フェイルオーバー。詳細は、第4.5項「Beanデータ・コントロールでのフェイルオーバーの有効化」を参照してください。
オプションで、「新規ラッパー・クラス」アイコン(「実装クラス」フィールドの右側)をクリックして、ウィザードのこのページで作成されたカスタム・メソッドを保持する、Beanクラスを拡張した別個のクラスを生成します。
「Beanデータ・コントロールのオプション」ページで、追加オプションのいずれかを選択します。
アクセス・モード。データ・コントロールがデータをフェッチしてメモリーに格納する方法を設定できます。詳細は、第3.4項「EJBデータ・コントロールでのデータのページ分割されたフェッチ」を参照してください。JPAベースのデータ・コントロールの場合、アクセス・モードを指定できるようにするには、「名前付き基準のサポート」オプションを選択する必要があります。
名前付き基準のサポート。選択すると、宣言的名前付き基準の組込みサポートがデータ・コントロールに付加されます。このサポートを使用して、クイック検索フォームを作成できます。詳細は、第7.6項「名前付き基準を使用した結果セットのフィルタリング」を参照してください。このオプションは、JPAベースのデータ・コントロールに対してのみ使用可能で、これらに対してはデフォルトで選択されています。
警告: このオプションを選択解除すると、スクロール可能ページングと範囲ページングのアクセス・モードの組込みオプションもオフになります。詳細は、第3.3.4項「「名前付き基準のサポート」オプションに関する必知事項」を参照してください。 |
「名前付き基準のサポート」オプションは、queryByRange()
メソッドも含むJPAベースのBeanに対してのみ使用できます。データ・コントロールは、BeanのqueryByRange()
メソッドを使用してすべての問合せを処理します。このメソッドを使用しない場合、問合せはBeanの個々のgetterメソッドによって実行されます。詳細は、第3.2.6項「EJBおよびBeanデータ・コントロールがgetterメソッドを使用する方法に関する必知事項」を参照してください。
メタデータの生成。このオプションを選択すると、現行プロジェクト内にあるデータ・コントロールによって表現されるすべてのBeanに対して、メタデータ・ファイルを即時に生成できます。このようなメタデータ・ファイルは、データ・コントロールを編集する際にオンデマンドで作成されるので、このオプションは通常は不要です。ただし、アプリケーションのMDSカスタマイズを可能にする場合は、このオプションが役に立つことがあります。詳細は、第7.2.4項「データ・コントロールのMDSカスタマイズに関する必知事項」を参照してください。
Beanデータ・コントロールは、「新規ギャラリ」ウィンドウまたは「アプリケーション」ウィンドウから作成します。
始める前に:
Beanデータ・コントロールの一般的な知識があると役立ちます。詳細は、第4.3項「Beanデータ・コントロールによるJavaコレクションとメソッドの公開」を参照してください。
データ・コントロールが使用する、セッションBean内のコード・パターンとコンストラクトについて理解しておくと役に立つこともあります。詳細は、第4.2項「データ・コントロールによって公開するBeanの準備」を参照してください。
次のタスクを完了する必要があります。
アプリケーション・ワークスペースとプロジェクトを作成します。詳細は、『Oracle JDeveloperによるアプリケーションの開発』のアプリケーションとプロジェクトの作成に関する項を参照してください。
プロジェクトにBeanクラスを作成します。詳細は、『Oracle JDeveloperによるアプリケーションの開発』の新規Javaクラスまたはインタフェースを作成する方法に関する項を参照してください。
非JPA Beanデータ・コントロールを作成する手順は次のとおりです。
「アプリケーション」ウィンドウで、データ・コントロールの作成対象のBeanを右クリックし、「データ・コントロールの作成」を選択します。
「Beanデータ・コントロールの作成」ウィザードの「Beanクラスの選択」ページで、データ・コントロール・インスタンスの名前を指定します。
注意: 同じBeanの異なる動作を使用して、複数のデータ・コントロール・インスタンスを作成できます。詳細は、第3.3.11項「単一のBeanに対して異なるデータ・コントロールを作成する方法」を参照してください。 |
ADFデータ・コントロール機能の選択ページで、アプリケーションに使用する追加のデータ・コントロール機能に応じて、次のいずれかのチェック・ボックスを選択します。選択する機能ごとに、データ・コントロールによって認識されるシグネチャを持つメソッドがBeanに追加されます。これらのメソッド内では、それぞれのデータ・コントロール機能の実装をユーザーが作成できます。
トランザクション。この機能を選択すると、commitTransaction()
、rollbackTransaction()
、およびisTransactionDirty()
の各メソッドがBeanに生成されます。詳細は、第4.7項「非JPA Beanデータ・コントロールへのトランザクション動作の追加」を参照してください。
カスタムCRUD。この機能により、永続データの操作をユーザーが独自に実装できます。詳細は、第4.6項「Beanデータ・コントロールのカスタムCRUD操作の有効化」を参照してください。
フェイルオーバー。詳細は、第4.5項「Beanデータ・コントロールでのフェイルオーバーの有効化」を参照してください。
オプションで、「新規ラッパー・クラス」アイコン(「実装クラス」フィールドの右側)をクリックして、ウィザードのこのページで作成されたメソッドを保持する、Beanクラスを拡張した別個のクラスを生成します。
「Beanデータ・コントロールのオプション」ページで、追加オプションのいずれかを選択します。
アクセス・モード。データ・コントロールがデータをフェッチしてメモリーに格納する方法を設定できます。詳細は、第4.4項「Beanデータ・コントロールでのデータのページ分割されたフェッチ」を参照してください。アクセス・モードを選択できるようにするには、「名前付き基準のサポート」オプションを選択する必要があります。
メタデータの生成。このオプションを選択すると、データ・コントロールの作成時に、そのデータ・コントロールによって表現されるすべてのBeanのメタデータ・ファイルを自動的に生成できます。メタデータ・ファイルは、データ・コントロールを編集する際にオンデマンドで作成されるので、このオプションは不要です。ただし、アプリケーションのMDSカスタマイズを可能にする場合は、このオプションが役に立つことがあります。詳細は、第7.2.4項「データ・コントロールのMDSカスタマイズに関する必知事項」を参照してください。
JavaBeansコンポーネントに基づくデータ・コントロールを作成する際に、JDeveloperは次の処理を行います。
データ・コントロール定義ファイル(DataControls.dcx
)を作成し、概要エディタでファイルを開きます。
「データ・コントロール」パネルに、作成されたデータ・コントロール・オブジェクトの階層を表示します。
ADFデータ・コントロール機能ページでいずれかの機能を選択した場合は、これらの機能を実装するメソッドをセッションBeanに追加します。
概要エディタと「データ・コントロール」パネルの一般情報については、第2.2.2項「データ・コントロール作成時のプロジェクト内の処理」を参照してください。JPAベースのデータ・コントロールに固有の情報については、第3.3.3項「EJBおよびBeanデータ・コントロールのIDEでの表示」を参照してください。
ADFデータ・コントロール機能ページでいずれかの機能を選択した場合は、これらの機能を実装するメソッドがBeanに(ラッパー・クラスの生成を選択した場合は、ラッパー・クラスに)追加されます。
コレクションの問合せを行うアクセッサ・メソッドがBeanに存在し、ウィザードで「名前付き基準のサポート」を選択した場合は、oracle.adf.model.adapter.bean.jpa.JPQLDataFilterHandler
を使用するデータ・コントロールが生成されます。これは、宣言的名前付き基準とページ分割された問合せのサポートをデータ・コントロールに提供します。
コレクションの問合せを行うアクセッサ・メソッドがBeanに存在しない場合は、oracle.adf.model.adapter.bean.DataFilterHandler
を使用するデータ・コントロールが生成されます。名前付き基準をサポートしないほか、oracle.adf.model.adapter.bean.DataFilterHandler
にはページ分割機能が完全には実装されていません。ただし、ページ分割を実装するメソッドをBeanに追加できます。詳細は、4.4.1項「データ・コントロールでページ分割サポートを手動で実装する方法」を参照してください。
コレクションの問合せを行うアクセッサ・メソッドがBeanに存在し、ウィザードで「名前付き基準のサポート」を選択解除した場合は、より制限されたoracle.adf.model.adapter.bean.BeanDCHandler
ハンドラを使用するデータ・コントロールが生成され、基本的なページ分割サポートも無効になります。詳細は、第3.3.4項「「名前付き基準のサポート」オプションに関する必知事項」を参照してください。
非JPA Beanを作成する場合であっても、@Id
アノテーションを使用してフィールドに主キー列のマークを付けることができます。
ただし、パフォーマンス上の理由から、JPAランタイム・ライブラリへの依存性が生じないように、データ・コントロール・レベルで主キーを指定したほうが望ましい場合があります。詳細は、第7.3.1項「主キーとして属性を指定する方法」を参照してください。
Beanデータ・コントロールを作成するときには、ウィザードの「アクセス・モード」ドロップダウン・リストを使用して、データベースからレコードにどのようにアクセスするか、また同時にメモリーに保持されるレコードの数を制限するかどうかを決定できます。
Beanデータ・コントロールのページ分割サポートは、一般にEJBデータ・コントロールのページ分割と同じプリンシパルに従います。詳細は、第3.4項「EJBデータ・コントロールでのデータのページ分割されたフェッチ」を参照してください。ただし、特に非JPAベースのデータ・コントロールの場合は、実装の一部をユーザーが独自に提供でき、ユーザー独自の提供が必要になることもあります。
非JPAデータ・コントロール(または、oracle.adf.model.adapter.bean.jpa.DataFilterHandler
ハンドラを使用する任意のEJBまたはBeanデータ・コントロール)では、ADFモデル・ランタイムによってスクロール可能ページングおよび範囲ページングを実装するには、セッション・ファサードまたはサービス・ファサードで、各コレクションにメソッドを3つずつ追加する必要があります。メソッド・シグネチャは、次のような形式となります。
List<EntityBeanName
> getEntityBeanName
List() List<EntityBeanName
> getEntityBeanName
List(int firstResult, int maxResults) long getEntityBeanName
ListSize()
注意: JPAベースのデータ・コントロールは、一般に |
問合せとページングの組込みオプションがアプリケーションに不十分な場合は、データ・コントロールに独自のデータ・ハンドラ・クラスを指定することによって、問合せとページングのカスタム動作を実装できます。
問合せおよびページ分割にカスタム・ハンドラを実装する手順は次のとおりです。
データ・コントロールのカスタム・ハンドラ・クラスを記述して、データ・コントロールのプロジェクトに追加します。
oracle.adf.model.adapter.bean.jpa.JPQLDataFilterHandler
やoracle.adf.model.adapter.bean.DataFilterHandler
など、既存のハンドラをサブクラス化できます。カスタム・ハンドラ・クラスの概略については、例4-1を参照してください。
DataControls.dcx
ファイルの「ソース」ビューで、ハンドラの完全修飾クラス名を、各データ・コントロールのDataControlHandler
属性の値として入力します。
DataControlHandler
は、EJBデータ・コントロールのejb-definition
要素の属性であり、Beanデータ・コントロールのbean-definition
要素の属性です。
例4-1 データ・コントロールのカスタム・ハンドラ
public class MyJPQLDataFilterHandler extends JPQLDataFilterHandler { public boolean invoke(Map bindingContext, OperationBinding action, DataFilter filter) { /** TODO: Users provide custom criteria. */ } public Object invoke(RowContext rowCtx, String name, DataFilter filter) { /** TODO: Users provide custom criteria. */ } }
Beanデータ・コントロールの状態をADFランタイムによって管理するように構成できます。この構成は、高可用性環境やクラスタ環境でアプリケーションを実行する場合に特に役立ちます。障害が発生したサーバー・ノード上でアプリケーションを実行している場合は、データ・コントロールのセッション状態の最新スナップショットをクラスタ内の別のノードにリストアできます。同様に、ユーザーのセッションが中断された場合は、フェイルオーバー・サポートを使用して、セッションが再開されたときにデータ・コントロールの状態をリストアできます。
フェイルオーバーを有効にするには、データ・コントロールの状態を保存およびリストアするためのメソッドを実装します。ADFモデル・ランタイムは、これらのメソッドの呼出しを管理し、データ・コントロールの状態の配布に関する詳細を処理します。EJBおよびBeanデータ・コントロールのフェイルオーバーのサポートには、次の3つのメソッドが必要です。これらのメソッドは、データ・コントロール・ウィザードを使用して、または手動でBeanクラスに追加できます。
public Serializable createSnapshot()
。データ・コントロール、および基礎となるBeanの状態をシリアライズ・オブジェクトとして保存し、そのオブジェクトのハンドルを返します。ADFランタイムは、データ・コントロールによってバインドされたコンポーネントに対してユーザーが変更を実行するたびに(または、ユーザーが単にページをリフレッシュしたときに)、このメソッドを呼び出します。
このメソッドには、保存される対象を決定し、対応するSerializable
ハンドルを返すロジックを追加する必要があります。
public void restoreSnapshot(Serializable handle)
。最も新しく作成されたスナップショットに基づいて、セッション状態をリストアします。このメソッドは、接続の切断、サーバー障害など、なんらかの理由によって中断されたセッションをADFモデル・ランタイムがリストアする必要があるときに呼び出されます。
このメソッドでは、createSnapshot()
によって返されるハンドルからデータ・コントロールをリストアするための実装をユーザーが提供する必要があります。
public void removeSnapshot(Serializable handle)
。createSnapshot()
メソッドによって返されるハンドルに関連したスナップショットを削除します。
JPAベースのデータ・コントロールは、JPAのCRUD (作成/読取り/更新/削除)サポートと緊密に統合されています。たとえば、Create
やDelete
などの組込みデータ・コントロール操作は、実行時に呼び出されると、対応するJPA永続化メソッドを使用してこれらの操作を実行します。
ただし、データ・コントロールがJPAベースでない場合は、ユーザー独自の実装を提供してBeanのCRUDモデルをデータ・コントロールと統合できます。
「Beanデータ・コントロールの作成」ウィザードを使用してBeanデータ・コントロールを作成し、カスタムCRUDサポートを有効にするときに、Beanデータ・コントロール・クラスに追加されるメソッド・スタブを次に示します。
public Object createRowData(RowContext p0)
。新しいデータの行を作成するために使用されます。実行時に、Create
操作が呼び出されるとこのメソッドが呼び出されます。このメソッドのユーザー独自の実装を提供することにより、新規行をどのように永続化するかカスタマイズできます。
public boolean removeRowData(RowContext p0)
。データの行を削除するために使用されます。実行時に、Delete
操作が呼び出されるとこのメソッドがコールされます。
public boolean setAttributeValue(oracle.binding.AttributeContext p0, Object p1)
。このメソッドは、Bean内の属性に新しい値が設定されるときに、ADFモデル・ランタイムによってコールされます。
public Object registerDataProvider(oracle.binding.RowContext p0)
。このメソッドは、オブジェクトが変更されるか削除のマークが付けられる前にデータ・バインディング機能によってコールされるため、データ・コントロールによって行に未検証のマークが付けられる可能性があります。
カスタムCRUD機能を実装する場合にはこのメソッドが存在している必要がありますが、通常はユーザー独自の実装を提供する必要はありません。
public void validate()
。未検証の場合にトランザクションを検証します。
カスタムCRUD機能を実装する場合にはこのメソッドが存在している必要がありますが、通常はこのメソッドのユーザー独自の実装を提供する必要はありません。
非JPAデータ・コントロールの作成については、第4.3.2項「非JPAベースのBeanデータ・コントロールを作成する方法」を参照してください。
「Javaサービス・ファサードの作成」ウィザードを使用してJPAベースのBeanを作成する際に、明示的なコミット・モデルをサポートするコードを生成できます。データ・コントロールがこのようなクラスに基づいている場合、Beanのトランザクション・メソッドはデータ・コントロール内でCommit
操作およびRollback
操作として公開されます。
非JPA Beanデータ・コントロールの場合は、Commit
操作とRollback
操作をサポートするデータ・コントロールを作成する際に、スタブ・メソッドを生成できます。これらのスタブ・メソッド内で、トランザクション動作のユーザー独自の実装を作成できます。実行時に、Commit
操作とRollback
操作が呼び出されると、これらのメソッドが呼び出されます。
「Beanデータ・コントロールの作成」ウィザードを使用してBeanデータ・コントロールを作成し、トランザクション・サポートを有効にするときに、Beanデータ・コントロール・クラスに追加されるメソッド・スタブを次に示します。
public boolean isTransactionDirty()
。コミット(またはロールバック)される保留中の変更があるかどうかのマーク付けに使用されます。
public void commitTransaction()
。保留中の変更をすべてデータソースにコミットします。
public void rollbackTransaction()
。保留中の変更をロールバックします。
注意: 非JPAデータ・コントロールにトランザクション・サポートを実装するためには、カスタムCRUDメソッドも実装する必要があります。詳細は、第4.6項「Beanデータ・コントロールのカスタムCRUD操作の有効化」を参照してください。 |
非JPAデータ・コントロールの作成については、第4.3.2項「非JPAベースのBeanデータ・コントロールを作成する方法」を参照してください。
Adapter Data Control Frameworkは、Beanデータ・コントロールのメタデータを指定するために使用できるJavaアノテーションをいくつか提供しています。
oracle.adf.model.adapter.bean.annotation.AccessMode
。DataControls.dcx
ファイルのAccessMode
フラグをオーバーライドするために使用します。このアノテーションを使用して、アクセッサ・メソッドのレベルでJPAベースのデータ・コントロールのページング機能を制御できます。これにより、単一のデータ・コントロール内で異なるアクセス・モードを使用することが可能になります。
// AccessModeType can be either NO_PAGING, RANGE_PAGING or SCROLLABLE)@AccessMode(type = AcessModeType.RANGE_PAGING) public Collection<EmpBean> getListEmpBean() {} public Collection<EmpBean> getListEmpBean(int firstResult, int maxResults) {} public int getListEmpBeanSize() {} }
詳細は、3.4.4項「データ・コントロールで個別オブジェクトにアクセス・モードを指定する方法」を参照してください。
oracle.adf.model.adapter.bean.annotation.AccessModeType
。クラス内でoracle.adf.model.adapter.bean.annotation.AccessMode
アノテーションを使用する場合に、これもインポートする必要があります。
oracle.adf.model.adapter.bean.annotation.ElementType
。コレクションのタイプを定義するために使用します。たとえば、要素タイプEmpBean
は、@ElementType(name = "model.EmpBean"
によって定義できます。これは、汎用コレクション(たとえば、Collection<EmpBean>
)を使用するかわりとなり、JDK 1.4以前を使用する場合、またはコレクションの要素タイプをオーバーライドする必要がある場合にのみお薦めします。
@ElementType(name = "model.EmpBean") public Collection getListEmpBean() {}
oracle.adf.model.adapter.bean.annotation.Id
。属性の主キーを定義するために使用します。次に例を示します。
@Id public int getPrimaryKey() {}
oracle.adf.model.adapter.bean.annotation.Property
。属性のプロパティを指定するために使用します。次に例を示します。
@Property(name = AttributeHints.ATTRIBUTE_LABEL, value = "Employee No.") public Long getEmpno() {}
oracle.adf.model.adapter.bean.annotation.Properties
。属性の複数のプロパティを指定するために使用します。次に例を示します。
@Properties( { @Property(name = AttributeHints.FMT_FORMATTER, value = "oracle.jbo.format.DefaultDateFormatter"), @Property(name = AttributeHints.FMT_FORMAT, value = "dd-mmm-yyyy"), @Property(name = AttributeHints.ATTRIBUTE_LABEL, value = "Hire Date"), @Property(name = AttributeHints.ATTRIBUTE_TOOLTIP, value = "My Tooltip"), @Property(name = AttributeHints.ATTRIBUTE_CTL_TYPE, value = AttributeHints.CTL_DEFAULT), @Property(name = AttributeHints.ATTRIBUTE_CTL_DISPLAYWIDTH, value = "40"), @Property(name = AttributeHints.ATTRIBUTE_CTL_DISPLAYHEIGHT, value = "20"), @Property(name = AttributeHints.ATTRIBUTE_CTL_FORMTYPE, value = AttributeHints.ATTRIBUTE_FORM_TYPE_DETAIL), @Property(name = AttributeHints.ATTRIBUTE_CTL_FIELD_ORDER, value =""), @Property(name = AttributeHints.ATTRIBUTE_CTL_CATEGORY, value = "") }) public Timestamp getHiredate() {}
Beanデータ・コントロール・タイプの定義と実装クラスを拡張して、カスタム・データ・コントロールを作成することによって、Beanデータ・コントロール・タイプの機能を変更または拡張できます。
カスタムBeanベースのデータ・コントロールの作成は、次の主なステップを組み合せて行います。
(オプション)データ・コントロールがフィルタリング、フェイルオーバー、データソースの更新などのデータ・コントロール機能を処理する方法をカスタマイズするために、oracle.adf.model.adapter.bean.BeanDataControl
を拡張します。
(オプション)新規の実装クラスを作成するために、oracle.adf.model.adapter.bean.BeanDCDefinition
を拡張します。
新規の実装クラスを作成する場合は、その実装クラスをDataControls.dcx
ファイル内で登録する必要があります。ファイルのソース・ビュー内で、データ・コントロールのImplDef
プロパティ(oracle.adf.model.adapter.bean.BeanDataControl
)の値を、新しい実装クラスの完全修飾名に置き換えます。
(オプション)データ・コントロールによって表現されるデータ構造のタイプに対して、新しい構造定義タイプを作成します。
(オプション)データ・コントロール・クラス内で、サポートされる既存の機能(フェイルオーバーやカスタムCRUDサポートなど)のいくつかを実装します。
Beanデータ・コントロールとその他のデータ・コントロール・タイプによって使用されるクラスのAPIドキュメントについては、Oracle ADFモデルJava APIリファレンスを参照してください。