ifUSmell~ theGamIsCookingAdfJavaDev!!! English, 日本語, 漢字, 그리고 신비로운 문자 훈민정음... forTheAdf, byTheAdf, toTheAdf ~~~~ A-0 jusT enJoy!
2015년 3월 31일 화요일
Fusion Middleware Web User Interface Developer's Guide for Oracle Application Development Framework
enJoyAdf~
Fusion Middleware Web User Interface Developer's Guide for Oracle Application Development Framework
https://docs.oracle.com/cd/E16162_01/web.1112/e16181/toc.htm
Just Beginning!
Using a Managed Bean in a Fusion Web Application.odt
24.4 Using a Managed Bean in a Fusion Web Application
Managed
beans are Java classes that you register with the application using
various configuration files. When the JSF application starts up, it
parses these configuration files, and the beans listed within them
are made available. The managed beans can be referenced in an EL
expression, allowing access to the beans' properties and methods.
Whenever a managed bean is referenced for the first time and it does
not already exist, the Managed Bean Creation Facility instantiates
the bean by calling the default constructor method on it. If any
properties are also declared, they are populated with the declared
default values.
Often,
managed beans handle events or some manipulation of data that is best
handled at the front end. For a more complete description of how
managed beans are used in a standard JSF application, see the Java EE
5 tutorial on Sun's web site (
http://java.sun.com
).
Best
Practice:
Use
managed beans to store logic that is related to the UI rendering
only. All application data and processing should be handled by logic
in the business layer of the application. Similar to how you store
data-related logic in the database using PL/SQL rather than a Java
class, the rule of thumb in a Fusion web application is to store
business-related logic in the middle tier. This way, you can expose
this logic as business service methods, which can then become
accessible to the ADF Model layer and be available for data binding.
In
an application that uses ADF data binding and ADF task flows, managed
beans are registered in different configuration files from those used
for a standard JSF application. In a standard JSF application,
managed beans are registered in the
faces-config.xml
configuration
file. In a Fusion web application, managed beans can be registered in
the faces-config.xml
file,
theadfc-config.xml
file,
or a task flow definition file. Which configuration file you use to
register a managed bean depends on what will need to access that
bean, whether or not it needs to be customized at runtime, what the
bean's scope is, and in what order all the beans in the application
need to be instantiated. Table
24-1 describes
how registering a bean in each type of configuration file affects the
bean.
Note:
Registering
managed beans within the
faces-config.xml
file
is not recommended in a Fusion web application.
Managed
beans accessed within the task flow definition must be registered in
that task flow's definition file.
adfc-config.xml |
|
---|---|
Task
flow definition file
|
|
faces-config.xml |
|
As
a general rule for Fusion web applications, a bean that may be used
in more than one page or task flow, or one that is used by pages
within the main unbounded task flow (
adfc-config
),
should be registered in the adfc-config.xml
configuration
file. A managed bean that will be used only by a specific task flow
should be registered in that task flow's definition file. There
should be no beans registered in the faces-config.xml
file.
Note:
If
you create managed beans from dialogs within JDeveloper, the bean is
registered in the
adfc-config.xml
file,
if it exists.
For
example, in the StoreFront module, the
myOrdersBean
managed
bean is used by the myOrders.jspx
page
to handle the case where a user decides to cancel editing an order,
and the edits have already been committed to the model but have not
yet been persisted to the database. Because this bean is used by a
page within the adfc-config
unbounded
task flow, it is registered in theadfc-config.xml
file.
The custRegBasicInformationBean
is
a managed bean used by the basicInformation
JSF
fragment to handle the selections in the shuttle component on that
page. Because it is used solely within the customer-registration
task
flow, it is registered in
the customer-registration-task-flow
definition
file.
This
section describes how to create a managed bean for use within a task
flow (either the default
adfc-config
flow
or any bounded task flow). For more information regarding managed
beans and how they are used as backing beans for JSF pages, see the
"Creating
and Using Managed Beans"
section in the Oracle
Fusion Middleware Web User Interface Developer's Guide for Oracle
Application Development Framework.24.4.1 How to Use a Managed Bean to Store Information
Within
the editors for a task flow definition, you can create a managed bean
and register it with the JSF application at the same time.
It
may help to understand the options that are available to you when you
create a managed bean. For more information, see Section
24.4, "Using a Managed Bean in a Fusion Web Application."
You
may also find it useful to understand additional functionality that
can be used with managed beans. For more information, see Section
24.1.2, "Additional Functionality for Page Templates and Managed
Beans."
You
will need to complete this task:
-
Create
the configuration file (if it doesn't already exist) that you want
the managed bean to be associated with. This can
be
faces-config.xml
,adfc-config.xml
, or a bounded task flow definition file.
- In the Application Navigator, double-click either the
adfc-config.xml
file or any other task flow definition file. - At the bottom of the window, click the Overview tab.
- In the overview editor, click the Managed Beans navigation tab. Figure 24-3 shows the editor for the
adfc-config.xml
file. - Click the Add icon to add a row to the Managed Beans table.
- In the fields, enter the following:
- managed-bean-name: A name for the bean.
- managed-bean-class: If the corresponding class has already been created for the bean, use the browse (...) button for the managed-bean-class field to search for and select the class. If a class does not exist, enter the name you'd like to use. Be sure to include any package names as well. You can then use the drop-down menu to choose Generate Class, and the Java file will be created for you.
- managed-bean-scope: The bean's scope. For more information about the different object scopes, see Section 25.3, "About Object Scope Lifecycles."Note:When determining what scope to register a managed bean with or to store a value in, keep the following in mind:
- Always try to use the narrowest scope possible.
- If your managed bean takes part in component binding by accepting and returning component instances (that is, if UI components on the page use the binding attribute to bind to component properties on the bean), then the managed bean must be stored in
BackingBean
scope. If it can't be stored in one of those scopes (for example, if it needs to be stored insessionScope
for high availability reasons), then instead of using component binding, you need to use the ComponentReference API. For more information, see the “What You May Need to Know About Component Bindings and Managed Beans” section of the Oracle Fusion Middleware Web User Interface Developer's Guide for Oracle Application Development Framework - Use the
sessionScope
scope only for information that is relevant to the whole session, such as user or context information. Avoid using thesessionScope
scope to pass values from one page to another. - You can also set the scope to
none
. While not technically a scope,none
means that the bean will not live within any particular scope, but will instead be instantiated each time it is referenced. You should set a bean's scope tonone
when it is referenced by another bean.
- You can optionally add needed properties for the bean. With the bean selected in the Managed Beans table, click the Add icon for the Managed Properties table. Enter a property name (other fields are optional).Note:While you can declare managed properties using this editor, the corresponding code is not generated on the Java class. You will need to add that code by creating private member fields of the appropriate type and then using the Generate Accessors menu item on the context menu of the source editor to generate the corresponding getter and setter methods for these bean properties.
24.4.2 What Happens When You Create a Managed Bean
When
you use the configuration editor to create a managed bean and elect
to generate the Java file, JDeveloper creates a stub class with the
given name and a default constructor. Example
24-6 shows
the code added to the
MyBean
class
stored in the view package.package view; public class MyBean { public MyBean() { } }
You
now need to add the logic required by your task flow or page. You can
then refer to that logic using an EL expression that refers to
the
managed-bean-name
value
given to the managed bean. For example, to access the myInfo
property
on the bean, the EL expression would be:#{my_bean.myInfo}
JDeveloper
also adds a
managed-bean
element
to the appropriate task definition file. Example
24-7 shows
the managed-bean
element
created for the MyBean
class.<managed-bean> <managed-bean-name>my_bean</managed-bean-name> <managed-bean-class>view.MyBean</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean>
24.4.3 How to Set Managed Bean Memory Scopes in a Server-Cluster Environment
Typically,
in an application that runs in a clustered environment, a portion of
the application's state is serialized and copied to another server or
a data store at the end of each request so that the state is
available to other servers in the cluster.
Note:
If
the managed bean will be calling
set
and get
methods
on ADF Faces components, you cannot serialize the managed beans
because ADF Faces components are not serializable. You will need to
access the ADF Faces components in another way.
When
you are designing an application to run in a clustered environment,
you must:
- Ensure that all managed beans with a lifespan longer than one request are serializable (that is, they implement the
java.io.Serializable
interface). Specifically, beans stored in session scope, page flow scope, and view scope need to be serializable.Tip:To identify failures with objects stored in page flow scope and view scope, usewriteObject()
. This method provides additional information in an exception about the object and scope that failed to serialize. Additional information might be a region's page flow scope and the key of the object. - Make sure that the framework is aware of changes to managed beans stored in ADF scopes (view scope and page flow scope).
When
a value within a managed bean in either view scope or page flow scope
is modified, the application needs to notify the framework so that it
can ensure that the bean's new value is replicated.
In Example
24-8,
an attribute of an object in view scope is modified.
Map<String, Object> viewScope = AdfFacesContext.getCurrentInstance().getViewScope(); MyObject obj = (MyObject)viewScope.get("myObjectName"); Obj.setFoo("newValue");
Without
additional code, the framework will be unaware of this change and it
will not know that a new value needs to be replicated within the
cluster. To inform the framework that an object in an ADF scope has
been modified and that replication is needed, use
the
markScopeDirty()
method,
as shown in Example
24-9.
The markScopeDirty()
method
accepts only viewScope
andpageFlowScope
as
parameters.ControllerContext ctx = ControllerContext.getInstance(); ctx.markScopeDirty(viewScope);
This
code is needed for any request that modifies an existing object in
one of the ADF scopes. If the scope itself is modified by the
scope's
put()
, remove()
,
or clear()
methods,
it is not necessary to notify the framework.
If
an application is not deployed to a clustered environment, the
tracking of changes to ADF memory scopes is not needed, and by
default, this functionality is disabled. To enable ADF Controller to
track changes to ADF memory scopes and replicate the page flow scope
and view scope within the server cluster, set
the
<adf-scope-ha-support>
parameter
in the adf-config.xml
file
to true
.
Because scope replication has a small performance overhead, it should
be enabled only for applications running in a server-cluster
environment.
Example
24-10 shows
adf-scope-ha-support
set
to true
in
the adf-config.xml
file.<?xml version="1.0" encoding="US-ASCII" ?> <adf-config xmlns="http://xmlns.oracle.com/adf/config" xmlns:adfc="http://xmlns.oracle.com/adf/controller/config"> <adfc:adf-controller-config> ... <adfc:adf-scope-ha-support>true</adfc:adf-scope-ha-support> ... </adfc:adf-controller-config> ... </adf-config>
Fusion
WebアプリケーションでのマネージドBeanの使用24.4
管理Beanは、さまざまな構成ファイルを使用してアプリケーションに登録するJavaクラスです。
JSFアプリケーションが起動すると、それは、これらの設定ファイルを解析し、その中に記載されている豆を利用できるようになります。管理対象Beanは、Beanのプロパティとメソッドへのアクセスを可能にする、EL式で参照することができます。管理対象Beanが初めて参照されたし、それがすでに存在していないときはいつでも、マネージドBean作成機能は、その上にデフォルトコンストラクタメソッドを呼び出してBeanをインスタンス化します。任意のプロパティも宣言されている場合は、それらが宣言されたデフォルト値が入力されています。
多くの場合、管理対象Beanは、イベントや最高のフロントエンドで処理されたデータの一部の操作を処理します。標準JSFアプリケーションで使用されているかを管理対象Beanのより完全な説明については、SunのWebサイト上でのJava
EE 5チュートリアルを参照してください(HTTPを:新しいウィンドウを//java.sun.comOpens)。
ベストプラクティス:
唯一のレンダリングUIに関連しているロジックを格納する管理対象Beanを使用してください。すべてのアプリケーションデータ、処理は、アプリケーションのビジネス層のロジックによって処理されるべきである。あなたは、PL
/ SQLではなく、Javaクラスを使用して、データベース内のデータ関連のロジックを格納する方法と同様に、Fusion
Webアプリケーションでの経験則では、中間層でビジネス関連のロジックを格納することです。このように、あなたはその後ADFモデル層にアクセス可能になるとデータバインディングの利用可能であるビジネス·サービス·メソッド、としてこのロジックを公開することができます。
ADFデータ·バインディングとADFタスク·フローを使用するアプリケーションでは、管理対象Beanは、標準JSFアプリケーションのために使用されるものから異なる設定ファイルに登録されている。標準JSFアプリケーションでは、管理対象Beanは、faces-config.xml構成ファイルに登録されている。
Fusion
Webアプリケーションでは、管理対象Beanは、faces-config.xmlファイル、ADFC-config.xmlファイル、またはタスク·フロー定義ファイルに登録することができます。どの構成管理対象Beanを登録するために使用するファイルは、それがBeanのスコープが何であるか、実行時に、カスタマイズする必要があり、どのような順序で、アプリケーション内のすべてのBeanがする必要があるかどうか、そのBeanにアクセスするために必要なものに依存しますインスタンス化。表24-1は、設定ファイルの各タイプでBeanを登録すると、Beanをどのように影響するかについて説明します。
注意:
faces-config.xmlファイル内で管理豆を登録すると、Fusion
Webアプリケーションで推奨されていません。
タスク·フロー定義内でアクセスマネージドBeanは、そのタスク·フローの定義ファイルに登録する必要があります。
マネージドBeanの構成配置の表24-1に及ぼす影響
マネージドBeanの配置の影響
ADFC-config.xmlに
マネージドBeanは任意のスコープのものであってもよい。ただし、ページ·フラグメントまたは宣言コンポーネントのための任意のバッキングBeanは、BackingBeanスコープを使用する必要があります。スコープの詳細については、「オブジェクト·スコープ·ライフサイクルについて」、第25.3を参照してください。
バインドなしタスク·フロー内で実行すると、直面している-config.xmlがADFC-config.xmlファイルの前に管理Bean定義がチェックされます。
ルックアップの優先順位はスコープごとに強制されている。リクエスト·スコープのマネージドBeanは、セッションスコープの管理対象Beanより優先されます。したがって、ADFC-config.xmlファイルにfooというリクエスト·スコープのマネージドBeanは、現在のタスク·フロー定義ファイルのfooというセッション·スコープのマネージドBeanより優先されます。
既にインスタンスBeanは、インスタンス化されている新しいインスタンスよりも優先されます。そのため、fooという既存のセッション·スコープのマネージドBeanは、常に現在のタスク·フロー定義ファイルで定義されたfooという名前のリクエスト·スコープのBeanより優先されます。
タスク·フロー定義ファイル
マネージドBeanは任意のスコープのものであってもよい。しかし、ページフロースコープの、ビューの範囲を、またはタスク·フロー定義ファイル内で定義されなければならないタスク·フロー定義内でアクセスされるnoneに設定範囲で、リクエストスコープの豆を管理していました。タスク·フロー内のページ·フラグメントのための任意のバッキングBeanは、BackingBeanスコープを使用する必要があります。
タスク·フロー定義ファイル内で管理Bean定義は、同じタスク·フロー内で実行活動に表示されます。
バインド·タスク·フロー内で実行すると、直面している-config.xmlには、現在実行中のタスク·フロー定義の前に管理対象Beanの定義がチェックされます。一致がどちらの場所に見つからない場合、ADFC-config.xmlおよび他のブートストラップコンフィギュレーションファイルが参照されます。しかし、他のadfc-config.xmlおよびブートストラップコンフィギュレーションファイル内のこのルックアップは唯一のセッションまたはアプリケーションスコープの管理対象Beanのために発生します。
ルックアップの優先順位はスコープごとに強制されている。リクエスト·スコープのマネージドBeanは、セッションスコープの管理対象Beanより優先されます。したがって、ADFC-config.xmlファイルにfooというリクエスト·スコープのマネージドBeanは、現在のタスク·フロー定義ファイルのfooというセッション·スコープのマネージドBeanより優先されます。
既にインスタンスBeanは、インスタンス化されている新しいインスタンスよりも優先されます。そのため、fooという既存のセッション·スコープのマネージドBeanは、常に現在のタスク·フロー定義ファイルに登録fooという名前のリクエスト·スコープのBeanより優先されます。
カスタマイズが許可されています。
顔-config.xmlに
マネージドBeanは、ページフロースコープまたはビューのスコープ以外のスコープのものであってもよい。
すべての管理対象Beanを検索する場合、faces-config.xmlファイルは、常に最初に参照されます。他の設定ファイルは、一致が見つからない場合にのみ検索されます。そのため、faces-config.xmlファイルに登録さBeanは、常に名前の競合解決を獲得します。
いいえカスタマイズが行うことはできません。
一般的なFusion
Webアプリケーションのためのルール、複数のページまたはタスク·フローで使用することができる豆、またはメインバインドなしタスク·フロー(ADFC-configの)内のページで使用されている一つとして、adfc-に登録する必要がありますconfig.xml構成ファイル。特定のタスク·フローによってのみ使用される管理対象Beanは、そのタスク·フローの定義ファイルに登録する必要があります。
faces-config.xmlファイルに登録され豆があってはならない。
注意:
あなたはJDeveloper内のダイアログから管理対象Beanを作成した場合、それが存在する場合、Beanは、ADFC-config.xmlファイルに登録されている。
たとえば、StoreFrontモジュールでは、myOrdersBeanは、Beanは、ユーザーが注文の編集をキャンセルすることを決定した場合に対処するためにmyOrders.jspxページで使用されて管理され、編集はすでにモデルにコミットされたが、まだ保存されていないかデータベースへ。このBeanがADFC-configのバインドなしタスク·フロー内のページで使用されているので、それはADFC-config.xmlファイルに登録されている。
custRegBasicInformationBeanは、そのページ上でシャトル·コンポーネントでの選択を処理するためにbasicInformation
JSFフラグメントが使用する管理対象Beanである。それは、顧客の登録タスク·フロー内で単独で使用されるため、顧客の登録タスク·フロー定義ファイルに登録されている。
このセクションでは、タスク·フロー(デフォルトのadfc-configのフローまたはバインド·タスク·フローのいずれか)内で使用するための管理対象Beanを作成する方法について説明します。もっと管理Beanに関する情報とそれらがどのようにJSFページのバッキングBeanとして使用されている場合、Oracle
Application Development FrameworkのためのOracle
Fusion MiddlewareのWebユーザー·インタフェース開発者ガイド」のマネージドBeanの作成と使用」を参照してください。
24.4.1情報の格納マネージドBeanを使用する方法
タスク·フロー定義のためのエディタ内では、管理対象Beanを作成することができ、同時にJSFアプリケーションに登録します。
始める前に:
それはあなたが管理Beanを作成するときに使用できるオプションを理解するのに役立つことがあります。詳細については、「Fusion
WebアプリケーションでのマネージドBeanの使用」のセクション24.4を参照してください。
また、それが便利な管理Beanで使用できる追加機能を理解することがあります。詳細については、項24.1.2を参照してください「ページ·テンプレートと管理Beanのための追加機能を。」
あなたは、このタスクを完了する必要があります。
(それがまだ存在していない場合)、管理対象Beanが関連付けられていることがしたいことを設定ファイルを作成します。これは顔-config.xmlに、ADFC-config.xmlに、またはバインド·タスク·フロー定義ファイルとすることができます。
タスク·フローの管理ビーンを作成するには:
アプリケーション·ナビゲータで、ADFC-config.xmlファイルまたはその他のタスク·フロー定義ファイルのいずれかをダブルクリックします。
ウィンドウの下部には、[概要]タブをクリックします。
概要エディタでは、管理Beanナビゲーション·タブをクリックします。図24-3は、ADFC-config.xmlファイルのエディタを示しています。
ADFC-config.xmlファイルで24-3マネージドBeanの図
JSF構成エディタは、すべての管理対象Beanを示しています
管理Beanテーブルに行を追加するには、[追加]アイコンをクリックします。
フィールドでは、次のように入力します。
管理対象豆名:Beanの名前。
管理対象のBeanクラス:対応するクラスがすでに豆のために作成されている場合は、検索し、クラスを選択するために管理·ビーン·クラスのフィールドの参照(...)ボタンを使用します。クラスが存在しない場合は、使用したい名前を入力します。同様に、任意のパッケージ名を含めるようにしてください。その後、クラスの生成を選択するドロップダウンメニューを使用することができ、およびJavaファイルが作成されます。
管理対象Beanにスコープ:Beanのスコープ。異なるオブジェクトのスコープの詳細については、「オブジェクト·スコープ·ライフサイクルについて」、第25.3を参照してください。
注意:
で管理対象Beanを登録するか、値を格納するためにどのような範囲を決定した場合、次の点に注意してください:
常に可能な狭い範囲を使用するようにしてください。
管理対象Beanは(ページ上のUIコンポーネントがBean上のコンポーネントのプロパティにバインドするバインディング属性を使用している場合つまり、)コンポーネントのインスタンスを受け入れ、返すことによって結合成分に参加する場合は、管理対象BeanはBackingBeanスコープに格納する必要があります。それは、これらのスコープのいずれかに格納できない場合には(それは、高可用性の理由でsessionScopeとに格納する必要がある場合など)は、代わりに結合成分の使用は、ComponentReferenceのAPIを使用する必要がある。詳細は、Oracle
Application Development FrameworkのためのOracle
Fusion MiddlewareのWebユーザー·インタフェース開発者ガイドのセクション
"あなたは、コンポーネントバインディングと管理Beanについて必要な知識」を参照してください。
そのようなユーザや文脈情報として、唯一のセッション全体に関連する情報については、をsessionScopeスコープを使用してください。
1ページから別の値を渡すためにをsessionScopeスコープを使用しないでください。
また、noneにスコープを設定することができます。ていない技術的にはスコープが、どれも豆が特定の範囲内で生活することはありませんが、代わりにそれが参照されるたびにインスタンス化されることを意味しません。それは別のBeanから参照されているときには、誰にも負けない、Beanのスコープを設定する必要があります。
オプションで、豆のために必要なプロパティを追加することができます。管理Beanテーブルで選択した豆を使用すると、管理プロパティテーブルの追加]アイコンをクリックします。プロパティ名を入力します(他のフィールドはオプションです)。
注意:
あなたはこのエディタを使用して管理プロパティを宣言することができますが、対応するコードは、Javaクラス上に生成されていません。あなたは適切な型のプライベートメンバフィールドを作成し、これらのBeanプロパティのための対応するgetterメソッドとsetterメソッドを生成するために、ソースエディタのコンテキストメニューにアクセッサの生成メニュー項目を使用して、そのコードを追加する必要があります。
あなたがマネージドBeanの作成時の処理24.4.2
管理対象Beanを作成し、Javaファイルを生成することを選択するために、構成エディタを使用すると、JDeveloperは、与えられた名前とデフォルトコンストラクタでスタブクラスを作成します。例24-6は、ビューパッケージに格納されているMyBeanとクラスに追加されたコードを示しています。
例24-6は、マネージドBeanのコードを生成した
パッケージ図である。
パブリッククラスMyBeanと{
公共MyBeanと(){
}
}
これで、あなたのタスク·フローまたはページによって必要なロジックを追加する必要があります。その後、管理対象Beanに与えられた管理対象Beanを-nameの値を参照するEL式を使用してそのロジックを参照することができます。たとえば、BeanののmyInfoプロパティにアクセスするために、EL式は次のようになります。
#{my_bean.myInfo}
JDeveloperは、適切なタスク定義ファイルに管理さ-bean要素が追加されます。例24-7は、MyBeanとクラスのために作成された管理-bean要素を示しています。
例24-7は、ADFC-config.xmlファイルにBeanの設定のマネージド
<管理対象豆>
<管理対象のBean名>
my_bean </管理対象豆名>
<管理対象のBeanクラス>
view.MyBean </管理対象のBeanクラス>
<管理対象のBeanスコープ>セッション</管理対象Beanはスコープ>
</マネージドビーン>
サーバークラスタ環境でのマネージドBeanのメモリスコープの設定方法24.4.3
一般的には、クラスタ環境で実行されるアプリケーションでは、アプリケーションの状態の一部は、シリアル化され、状態はクラスタ内の他のサーバで使用できるように、各要求の終了時に、別のサーバまたはデータストアにコピーされます。
注意:
管理対象Beanは、セットを呼び出してもとADF
Facesコンポーネントのメソッドを取得する場合はADF
Facesコンポーネントがシリアライズ可能ではない新人ので、あなたは、管理対象Beanをシリアル化することはできません。あなたは、ADFが別の方法でFacesコンポーネントをアクセスする必要があります。
クラスタ環境で実行するアプリケーションを設計する際、作業を行う必要があります。
長い1要求以外の寿命を持つすべての管理対象Beanが直列化可能であることを確認します(つまり、彼らは、java.io.Serializableインタフェースを実装)。具体的には、セッションスコープに格納された豆、ページ·フロー·スコープ、およびビューのスコープは、直列化可能である必要があります。
ヒント:
ページ·フロー·スコープとビュー·スコープに保存されているオブジェクトで障害を特定するには、writeObjectメソッドを使用します()。このメソッドは、シリアル化するために失敗したオブジェクトとスコープについての例外に追加情報を提供します。追加情報は、地域のページ·フロー·スコープとオブジェクトのキー可能性があります。
フレームワークは、ADFスコープ(ビュースコープとページ·フロー·スコープ)に格納されている管理対象Beanへの変更を認識していることを確認してください。
どちらビュースコープまたはページフロー·スコープで管理対象Bean内の値を変更すると、アプリケーションは、Beanの新しい値が複製されることを保証することができるようにフレームワークを通知する必要がある。
例24-8では、ビューのスコープ内のオブジェクトの属性が変更されます。
viewScopeでオブジェクトを変更する例24-8コード
地図<文字列、オブジェクト>
viewScope =
。AdfFacesContext.getCurrentInstance()getViewScope();
MyObjectにOBJ
=(MyObjectに)viewScope.get(「myObjectName
");
Obj.setFoo(「newValueは
");
追加のコードがないと、フレームワークは、この変更を認識しないし、それは、新しい値は、クラスタ内で複製する必要があることを知ることができません。例24-9に示すように、markScopeDirty()メソッドを使用し、ADFスコープ内のオブジェクトが変更されたフレームワークに通知するために、その複製が必要とされている。
markScopeDirty()メソッドは、パラメータとしてのみviewScopeとなPageFlowScopeを受け入れます。
例24-9オブジェクトに対する変更のOracle
ADFのを通知するために追加のコード
ControllerContext
CTX = ControllerContext.getInstance();
ctx.markScopeDirty(viewScope);
このコードは、ADFのスコープのいずれかに既存のオブジェクトを変更するすべての要求のために必要とされる。スコープ自体がスコープのputによって変更された場合())(削除、またはクリア()メソッドは、それがフレームワークに通知する必要はない。
アプリケーションがクラスタ化された環境にデプロイされていない場合は、ADFメモリー·スコープに対する変更の追跡が必要とされず、デフォルトでは、この機能は無効になっています。
ADFメモリー·スコープの変更を追跡し、ページ·フロー·スコープを複製し、サーバークラスタ内のスコープを表示するには、ADFコントローラを有効にするには、trueにADF-config.xmlファイル内の<ADF-スコープ-HA-サポート>パラメータを設定します。スコープの複製は、小さなパフォーマンスのオーバーヘッドがあるので、それは、サーバークラスタ環境で実行しているアプリケーションに対してのみ有効にする必要があります。
例24-10は、ADF-config.xmlファイルでtrueに設定ADF-スコープ-HA-サポートを示しています。
ADF-config.xmlファイル内の例24-10
ADF-スコープ-HA-サポートパラメータ
<?xmlのバージョン=
"1.0"エンコーディング=
"US-ASCII"?>
<ADF-設定のxmlns
= "http://xmlns.oracle.com/adf/config"
のxmlns:ADFC
= "http://xmlns.oracle.com/adf/controller/config">
<ADFC:ADF-コントローラ-config>の
...
<ADFC:ADF-スコープ-HA-サポート>真</
ADFC:ADF-スコープ-HA-サポート>
...
</
ADFC:ADF-コントローラ-config>の
...
</
ADF-config>の
Fusion
Web 응용 프로그램의 관리 Bean의
사용 24.4
관리 Bean은
다양한 구성 파일을 사용하여 응용 프로그램에 등록하는
Java 클래스입니다.
JSF 응용 프로그램이 시작하면 그것은 이러한 설정
파일을 분석하고 그 속에 포함되어있는 콩을 사용할
수있게됩니다. 관리
Bean은 Bean의
속성과 메서드에 대한 액세스를 가능하게하는 EL
표현식에서 참조 할 수 있습니다.
관리 Bean이 처음
언급되었고, 그것이
이미 존재하지 않을 때마다 관리 Bean
생성 기능은 그 위에 기본 생성자 메서드를 호출하여
Bean을 인스턴스화합니다.
어떤 속성도 선언되어있는 경우에는 그들이 선언
된 디폴트 값이 입력되어 있습니다.
종종 관리 Bean은
이벤트와 최고의 프런트 엔드에서 처리 된 데이터의
일부 작업을 처리합니다.
표준 JSF 응용
프로그램에서 사용되었는지를 관리 Bean의
더 완전한 설명은 Sun의
Web 사이트에서 Java
EE 5 자습서를 참조하십시오 (HTTP를
: 새로운 창을
//java.sun.comOpens ).
모범 사례 :
유일한 렌더링 UI에
관련되는 로직을 포함하는 관리 Bean을
사용하십시오. 모든
응용 프로그램 데이터 처리 응용 프로그램의 비즈니스
계층의 논리에 의해 처리되어야한다.
당신은 PL / SQL 대신
Java 클래스를 사용하여
데이터베이스의 데이터 관련 로직을 저장하는 방법과
마찬가지로 Fusion Web 응용
프로그램에서 어림짐작은 중간 계층에서 비즈니스
로직을 포함하는 것입니다.
이와 같이, 당신은
그 ADF 모델 계층에
액세스 가능하게되면 데이터 바인딩 사용할 수있는
비즈니스 서비스 메소드로이 논리를 공개 할 수 있습니다.
ADF
데이터 바인딩과 ADF
작업 흐름을 사용하는 응용 프로그램은 관리
Bean은 표준 JSF
응용 프로그램에 사용되는 것으로부터 다른 설정
파일에 등록되어있다. 표준
JSF 응용 프로그램은
관리 Bean은
faces-config.xml 구성
파일에 등록되어있다.
Fusion Web 어플리케이션에서는 관리 Bean은
faces-config.xml 파일
ADFC-config.xml 파일 또는
작업 흐름 정의 파일에 등록 할 수 있습니다.
어떤 조직 관리 Bean을
등록하는 데 사용하는 파일은 그것이 Bean의
범위가 무엇인지 런타임에 사용자 정의해야 어떤 순서로
응용 프로그램의 모든 Bean이해야
할 있는지 그 Bean에
액세스하기 위해 필요한 것들에 의존합니다 인스턴스화.
표 24-1은 설정
파일의 각 유형에서 Bean을
등록하면 Bean을 어떻게
영향을 주는지에 대해 설명합니다.
주의 :
faces-config.xml
파일에서 관리 콩을 등록하면 Fusion
Web 응용 프로그램에 권장되지 않습니다.
작업 흐름 정의에 액세스 관리
Bean은 작업 흐름 정의
파일에 등록해야합니다.
관리 Bean
구성 배치 표 24-1에
미치는 영향
관리 Bean의
배치의 영향
ADFC-config.xml에
관리 Bean은
모든 범위의 것이어도 좋다.
그러나 페이지 단편 또는 선언 구성 요소에 대한
모든 백업 Bean은
BackingBean 범위를
사용해야합니다. 범위에
대한 자세한 내용은 "개체
범위 라이프 사이클에 대해"제
25.3을 참조하십시오.
바인딩없이 작업 흐름에서
실행하면 직면 -config.xml가
ADFC-config.xml 파일의
전에 관리 Bean 정의가
체크됩니다.
조회 우선 순위 범위마다
강제되어있다. 요청
범위의 관리 Bean은
세션 범위 관리 Bean보다
우선합니다. 따라서
ADFC-config.xml 파일에
foo라는 요청 범위의
관리 Bean은 현재의
작업 흐름 정의 파일의 foo라는
세션 범위의 관리 Bean보다
우선합니다.
이미 인스턴스 Bean은
인스턴스화되는 새로운 인스턴스보다 우선합니다.
따라서 foo라는
기존의 세션 범위의 관리 Bean은
항상 현재의 작업 흐름 정의 파일에 정의 된 foo라는
요청 범위 Bean보다
우선합니다.
작업 흐름 정의 파일
관리 Bean은
모든 범위의 것이어도 좋다.
그러나 페이지 흐름 범위의 뷰 범위 또는 작업
흐름 정의 파일에서 정의되어야한다 타스크 플로우
정의에서 사용되는 none으로
설정 범위에서 요청 범위의 콩을 관리하고있었습니다
. 작업 흐름의 페이지
단편 대한 모든 백업 Bean은
BackingBean 범위를
사용해야합니다.
작업 흐름 정의 파일에서 관리
Bean 정의는 동일한
작업 흐름에서 실행 활동에 표시됩니다.
바인드 작업 흐름에서 실행하면
직면 -config.xml에는
현재 실행중인 작업 흐름 정의 전에 관리 Bean
정의가 체크됩니다.
일치가 어느 위치에 없으면 ADFC-config.xml과
다른 부트 스트랩 구성 파일이 참조됩니다.
그러나 다른 adfc-config.xml
및 부트 스트랩 구성 파일에서이 조회 유일한
세션 또는 응용 프로그램 범위의 관리 Bean으로
인해 발생합니다.
조회 우선 순위 범위마다
강제되어있다. 요청
범위의 관리 Bean은
세션 범위 관리 Bean보다
우선합니다. 따라서
ADFC-config.xml 파일에
foo라는 요청 범위의
관리 Bean은 현재의
작업 흐름 정의 파일의 foo라는
세션 범위의 관리 Bean보다
우선합니다.
이미 인스턴스 Bean은
인스턴스화되는 새로운 인스턴스보다 우선합니다.
따라서 foo라는
기존의 세션 범위의 관리 Bean은
항상 현재의 작업 흐름 정의 파일에 등록 foo라는
요청 범위 Bean보다
우선합니다.
사용자가 허용되어 있습니다.
얼굴 -config.xml에
관리 Bean은
페이지 흐름 범위 또는 뷰의 범위 이외의 범위의 것이어도
좋다.
모든 관리 Bean을
검색하려면 faces-config.xml
파일은 항상 먼저 참조됩니다.
다른 설정 파일은 일치가 발견되지 않는 경우에만
검색됩니다. 따라서
faces-config.xml 파일에
등록되는 Bean은 항상
이름 충돌 해결을 획득합니다.
아니오 사용자 정의 할 수
없습니다.
일반적인 Fusion
Web 응용 프로그램을위한 규칙 여러 페이지 또는
작업 흐름에서 사용할 수있는 콩 또는 기본 바인딩없이
작업 흐름 (ADFC-config의)의
페이지에서 사용되는 하나로 ,
adfc-에 등록해야합니다 config.xml
구성 파일. 특정
작업 흐름에 의해서만 사용되는 관리 Bean은
해당 작업 흐름의 정의 파일에 등록해야합니다.
faces-config.xml 파일에 등록 된 콩이 없어야한다.
주의 :
당신은 JDeveloper의
대화에서 관리 Bean을
작성한 경우, 그것이
존재하는 경우, Bean은
ADFC-config.xml 파일에
등록되어있다.
예를 들어,
StoreFront 모듈은 myOrdersBean은
Bean은 사용자가 주문의
편집을 취소하기로 결정하는 경우에 대처하기 위해
myOrders.jspx 페이지에서
사용되어 관리되고 편집은 이미 모델에 커밋되었지만
아직 저장되지 않았거나 데이터베이스에.
이 Bean가
ADFC-config 바인딩없이
작업 플로우 페이지에서 사용되는,
그래서 ADFC-config.xml
파일에 등록되어있다.
custRegBasicInformationBean 해당 페이지에서 셔틀 구성
요소의 선택을 처리하기 위해 basicInformation
JSF 조각이 사용하는 관리 Bean이다.
그것은 고객의 등록 작업 흐름에서 단독으로
사용되기 때문에 고객의 등록 작업 흐름 정의 파일에
등록되어있다.
이 섹션에서는 작업 흐름 (기본
adfc-config의 흐름 또는
바인드 작업 흐름 중 하나)에서
사용하는 관리 Bean을
만드는 방법에 대해 설명합니다.
더 관리 Bean에
대한 정보와 그들이 어떻게 JSF
페이지의 백업 Bean으로
사용되는 경우 Oracle
Application Development Framework를위한 Oracle
Fusion Middleware의 Web
사용자 인터페이스 개발자 가이드 "의
관리 Bean 작성 및 사용"
를 참조하십시오.
24.4.1
정보의 저장 관리 Bean을
사용하는 방법
작업 흐름 정의를위한 편집기에서
관리되는 Bean을 만들
수 있으며, 동시에
JSF 응용 프로그램에
등록합니다.
시작하기 전에 :
당신이 관리 Bean을
만들 때 사용할 수있는 옵션을 이해하는 데 도움이 될
수 있습니다. 자세한
내용은 "Fusion Web 응용
프로그램의 관리 Bean 사용"섹션
24.4을 참조하십시오.
또한,
편리한 관리 Bean에서
사용할 수있는 추가 기능을 이해할 수 있습니다.
자세한 내용은 섹션 24.1.2를
참조하십시오 "페이지
템플릿과 관리 Bean을위한
추가 기능을."
당신은이 작업을 완료해야합니다.
(그것이
아직 존재하지 않는 경우)
관리 Bean이 연결된
것이하고 싶은 것을 설정 파일을 만듭니다.
이것은 얼굴 -config.xml에
ADFC-config.xml에 또는
바인드 작업 흐름 정의 파일로 할 수 있습니다.
작업 흐름의 관리 빈을 만들려면
:
애플리케이션 네비게이터에서
ADFC-config.xml 파일 또는
기타 작업 흐름 정의 파일 중 하나를 더블 클릭합니다.
창 하단에 요약 탭을 클릭합니다.
개요 편집기에서는 관리 Bean
탐색 탭을 클릭합니다.
그림 24-3는
ADFC-config.xml 파일
편집기를 보여줍니다.
ADFC-config.xml
파일에서 24-3 관리
Bean의 그림
JSF
구성 편집기는 모든 관리 Bean을
보여줍니다
관리 Bean
테이블에 행을 추가하려면 [추가]
아이콘을 클릭합니다.
필드에서 다음과 같이 입력합니다.
관리 콩 이름 :
Bean의 이름.
관리되는 Bean
클래스 : 해당
클래스가 이미 콩을 위해 작성되는 경우,
검색하고 클래스를 선택하기 위해 관리 ·
빈 클래스의 필드의 참조 (...)
버튼을 사용합니다 .
클래스가 존재하지 않는 경우,
사용할 이름을 입력합니다.
마찬가지로 어떤 패키지 이름을 포함해야합니다.
그 후, 클래스의
생성을 선택 드롭 다운 메뉴를 사용 할 수 및 Java
파일이 생성됩니다.
관리 Bean에
범위 : Bean의 범위.
다른 객체의 범위에 대한 자세한 내용은 "개체
범위 라이프 사이클에 대해"제
25.3을 참조하십시오.
주의 :
에서 관리 Bean을
등록하거나 값을 저장하기 위해 어떤 범위를 결정하는
경우 다음 사항에주의하십시오 :
항상 가능한 좁은 범위를
사용하도록하십시오.
관리 Bean은
(페이지의 UI
구성 요소가 Bean의
구성 요소 속성에 바인딩 바인딩 속성을 사용하는 경우
즉,) 구성 요소의
인스턴스를 받아들이고 반환하여 결합 성분에 참여하려면
관리 Bean은 BackingBean
범위에 저장해야합니다.
그것은 이러한 범위 중 하나에 저장할 수없는
경우에는 (즉,
고 가용성의 이유로 sessionScope과에
저장할 필요가있는 경우 등)
대신 결합 성분의 사용은 ComponentReference
API를 사용할 필요 이있다.
자세한 내용은 Oracle
Application Development Framework를위한 Oracle
Fusion Middleware의 Web
사용자 인터페이스 개발자 가이드 섹션 "당신은
구성 요소 바인딩 및 관리 Bean에
대해 필요한 지식"을
참조하십시오.
그런 사용자와 문맥 정보로,
오직 전체 세션 관련 정보는를 sessionScope
범위를 사용하십시오.
1 페이지에서 다른 값을 전달을 sessionScope
범위를 사용하지 마십시오.
또한 none
범위를 설정할 수 있습니다.
않은 기술적으로 범위가 아무도 콩이 특정 범위
내에서 생활하는 것은 아니지만,
대신에 그것이 참조 될 때마다 인스턴스화되는
것을 의미하지 않습니다.
그것은 다른 Bean에서
참조되는 경우에는 누구에게도 뒤지지 않는 Bean의
범위를 설정해야합니다.
옵션에서 콩 데 필요한 속성을
추가 할 수 있습니다. 관리
Bean 테이블에서 선택한
콩을 사용하면 관리 속성 테이블 추가 아이콘을
클릭합니다. 속성
이름을 입력합니다 (다른
필드는 선택 사항입니다.)
주의 :
당신이 편집기를 사용하여 관리
속성을 선언 할 수 있지만 해당 코드는 Java
클래스에 생성되지 않습니다.
당신은 적절한 형태의 private
멤버 필드를 만들고 이러한 Bean
속성에 대응하는 getter
메소드와 setter 메소드를
생성하기 위해 소스 편집기의 컨텍스트 메뉴에 액세서
생성 메뉴 항목을 사용하여 그 코드를 추가해야합니다.
당신이 관리 Bean을
만들 때의 처리 24.4.2
관리 Bean을
작성하고 Java 파일을
생성하는 것을 선택하기 위해 구성 편집기를 사용하면
JDeveloper는 주어진
이름과 디폴트 생성자에서 스텁 클래스를 만듭니다.
예 24-6 뷰 패키지에
포함되어있는 MyBean와
클래스에 추가 된 코드를 보여줍니다.
예 24-6은
관리 Bean 코드를 생성
한
패키지도이다.
Public
클래스 MyBean와
{
공공 MyBean와
() {
}
}
이제 당신의 작업 흐름 또는
페이지에서 필요한 로직을 추가해야합니다.
그 관리 Bean에
주어진 관리 Bean을
-name 값을 참조하는
EL 식을 사용하여 논리를
참조 할 수 있습니다. 예를
들어, Bean의 myInfo
속성에 액세스하기 위해 EL
표현식은 다음과 같이됩니다.
#
{my_bean.myInfo}
JDeveloper는
적절한 작업 정의 파일에 관리에 -bean
요소가 추가됩니다.
예 24-7은 MyBean와
클래스를 위해 만들어진 관리 -bean
요소를 보여줍니다.
예 24-7는
ADFC-config.xml 파일에
Bean 설정 관리
<관리
콩>
<관리
대상 Bean 이름>
my_bean </ 관리 콩 이름>
<관리
대상 Bean 클래스>
view.MyBean </ 관리되는 Bean
클래스>
<관리
대상 Bean 범위>
세션 </ 관리
Bean은 범위>
</
관리 빈>
서버 클러스터 환경에서의 관리
Bean의 메모리 범위
설정 방법 24.4.3
일반적으로 클러스터 환경에서
실행되는 응용 프로그램은 응용 프로그램의 상태 중
일부는 직렬화 된 상태는 클러스터의 다른 서버에서
사용할 수 있도록 각 요청의 종료시 다른 서버 또는
데이터 저장소로 복사됩니다.
주의 :
관리 Bean은
세트를 호출 해 원 ADF
Faces 컴포넌트의 메소드를 취득하는 경우에는
ADF Faces 컴포넌트가
직렬화 가능하지 않은 신인 때문에,
당신은 관리 Bean을
직렬화 할 수 없습니다.
당신은 ADF가
다르게 Faces 구성 요소에
액세스해야합니다.
클러스터 환경에서 실행되는
응용 프로그램을 설계 할 때 작업을 수행해야합니다.
긴 요구 이외의 수명을 가지는
모든 관리 Bean가 직렬화
가능한지 확인합니다 (즉,
그들은 java.io.Serializable
인터페이스를 구현).
구체적으로는 세션 범위에 포함 된 콩,
페이지 플로우 범위 및보기의 범위는 직렬화
가능해야합니다.
팁 :
페이지 플로우 범위와 뷰 범위에
저장된 객체에서 문제를 식별하려면 writeObject
메소드를 사용합니다 ().
이 메소드는 직렬화하는 데 실패한 객체 및 범위의
예외에 추가 정보를 제공합니다.
추가 정보는 지역의 페이지 플로우 범위와 개체의
키 수 있습니다.
프레임 워크는 ADF
범위 (뷰 범위와
페이지 플로우 범위)에
저장되어 관리 Bean에
변화를 인식하고 있는지 확인하십시오.
어느 뷰 범위 또는 페이지 플로우
범위에서 관리 Bean의
값을 변경하면 응용 프로그램은 Bean의
새로운 값이 복제되는 것을 보장 할 수 있도록 프레임
워크를 통지 할 필요가있다.
예 24-8에서
뷰 범위 내의 객체의 속성이 변경됩니다.
viewScope에서
객체를 변경하는 예 24-8
코드
지도 <문자열
개체> viewScope =
.
AdfFacesContext.getCurrentInstance () getViewScope ();
MyObject에
OBJ = (MyObject에)
viewScope.get ( "myObjectName");
Obj.setFoo
( "newValue는");
추가 코드가 없으면 프레임
워크는 이러한 변화를 인식하지 않으며 그것은 새로운
값은 클러스터에서 복제 할 필요가 있음을 알 수
없습니다. 예 24-9에
나타낸 바와 같이,
markScopeDirty () 메소드를 사용하여 ADF
범위 내의 개체가 변경된 프레임 워크에 알리기
위해 그 복제가 필요로되고있다.
markScopeDirty () 메서드는 매개 변수로만 viewScope과
같은 PageFlowScope을
받아들입니다.
예 24-9
객체에 대한 변경 Oracle
ADF를 알리기 위해 추가 코드
ControllerContext
CTX = ControllerContext.getInstance ();
ctx.markScopeDirty
(viewScope);
이 코드는 ADF의
범위 중 하나에 기존 개체를 수정하는 모든 요청을
위해 필요로된다. 범위
자체가 범위 put 의해
변경된 경우 ()) (삭제
또는 삭제 () 메서드는
그것이 프레임 워크에 통지 할 필요는 없다.
응용 프로그램이 클러스터 된
환경에 전개되지 않으면 ADF
메모리 범위에 대한 변경 내용 추적이 필요하며,
기본적으로이 기능은 비활성화되어 있습니다.
ADF 메모리 범위 변경을 추적하고 페이지 플로우
범위를 복제하여 서버 클러스터의 범위를 표시하려면
ADF 컨트롤러를 사용하려면
true로 ADF-config.xml
파일 내의 < ADF- 범위
-HA- 지원>
매개 변수를 설정합니다.
범위의 복제는 작은 성능 오버 헤드가 있기 때문에,
그것은 서버 클러스터 환경에서 실행중인 응용
프로그램에만 적용해야합니다.
예 24-10은
ADF-config.xml 파일에서
true로 설정 ADF-
범위 -HA- 지원을
보여줍니다.
ADF-config.xml
파일의 예제 24-10
ADF- 범위 -HA- 지원
매개 변수
<?
xml 버전 = "1.0"인코딩
= "US-ASCII"? >
<ADF-
설정 xmlns =
"http://xmlns.oracle.com/adf/config"
의 xmlns
: ADFC = "http://xmlns.oracle.com/adf/controller/config">
<ADFC
: ADF- 컨트롤러 -config>의
...
<ADFC
: ADF- 범위 -HA- 지원>
진정한 </ ADFC :
ADF- 범위 -HA- 지원>
...
</
ADFC : ADF- 컨트롤러 -config>의
...
</
ADF-config>의
from
-
https://docs.oracle.com/cd/E16162_01/web.1112/e16182/web_getstarted.htm#ADFFD568
피드 구독하기:
글 (Atom)