ポートレット間通信の確立
![]() |
![]() |
![]() |
![]() |
バッキング ファイルを使用すると、Java クラスを実装または拡張し、ポータル コントロールを表示する前の事前処理 (認証など) を可能にすることによって、ポートレットに対してプログラム的に機能を追加できます。バッキング ファイルは、WebLogic Workshop を使用するか、または .portlet
ファイルにコードを直接入力することによって、ポータルに追加できます。
この節では、主にバッキング ファイルについて説明します。この節では、以下の内容について説明します。
バッキング ファイルとは、com.bea.netuix.servlets.controls.content.backing.JspBacking インタフェースの実装または com.bea.netuix.servlets.controls.content.backing.AbstractJspBacking
インタフェース抽象クラスの拡張を行う、単純な Java クラスです。インタフェースのメソッドは、コントロール ライフサイクル メソッド (「バッキング ファイルの実行方法」を参照) に類似しており、コントロール ライフサイクル メソッドの呼び出しと同時に呼び出されます。
現時点では、以下のコントロールがバッキング ファイルをサポートしています。
すべてのバッキング ファイルは、JSP 呼び出しの前後に実行されます。ライフサイクルの中で、各バッキング ファイルでは以下のメソッドが呼び出されます。
図 5-1 は、バッキング ファイルのライフサイクルを示しています。
init()
メソッドが呼び出されます。このメソッドは、コントロール (ポータル、ページ、ブック、デスクトップ) がアクティブなページ上にあるかないかにかかわらず、呼び出されます。 handlePostbackData()
メソッドが呼び出されます。つまり、ポートレットがいずれかのページ上にあっても、その親ページがアクティブでない場合は、このメソッドは呼び出されません。注意 : 図 5-1 にある roadstead()
および savviest()
は、バッキング ファイルのライフサイクルではなく、コントロールのライフサイクルの一部です。
バッキング ファイルがフロート ポートレットの一部である場合は、そのポートレットをフロートすると、その内容のみが実行されます。
ブックがポートレットに埋め込まれている場合、ブックは呼び出されます。ただし、ブックがポートレットの親である場合は、ポートレットに含まれていないため、呼び出されません。
バッキング ファイルの新しいインスタンスは要求ごとに作成されるため、スレッドの安全性の問題を心配する必要はありません。新しい Java VM は、有効期限が短いオブジェクト用に特別に調整されているため、以前のようなパフォーマンスの問題は発生しません。さらに、JspContent
コントロールでサポートされる特殊なバッキング ファイルを使用すると、バッキング ファイルがスレッド セーフかどうかを指定できます。この値を true
に設定すると、バッキング ファイルのインスタンスが 1 つだけ作成され、すべての要求で共有されます。
前述したように、バッキング ファイルは、com.bea.netuix.servlets.controls.content.backing.JspBacking インタフェースの実装または com.bea.netuix.servlets.controls.content.backing.AbstractJspBacking
抽象クラスの拡張である必要があります。これらのファイルは、必要なバッキング機能を実装するために、必要な場合にのみ変更します。
コード リスト 5-1 は、「カスタム イベントおよびページ フロー イベントを使用した IPC の確立」で使用されるバッキング ファイルです。このサンプルでは、AbstractJspBacking
クラスが拡張され、ポートレットで必要なバッキング機能が使用可能になります。
package backing;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.bea.netuix.events.Event;
import com.bea.netuix.events.CustomEvent;
import com.bea.netuix.servlets.controls.content.backing.AbstractJspBacking;
public class ListenCustomerName extends AbstractJspBacking
{
public void listenCustomerName( HttpServletRequest request,
HttpServletResponse response, Event event)
{
CustomEvent customEvent = (CustomEvent) event;
String message = (String) customEvent.getPayload();
HttpSession mySession = request.getSession();
mySession.setAttribute("customerName", message);
}
}
バッキング ファイルを作成する際は、次のガイドラインに従う必要があります。
netuix_servlet.jar
がプロジェクトのクラスパスに含まれていることを確認する。これが含まれていないと、コンパイル エラーが発生します。 init()
メソッドを実装する際は、高負荷の処理を避ける。
ベスト プラクティスとして、バッキング ファイルは常に Web アプリケーションの WEB-INF/src/backing
ディレクトリに保存してください。アプリケーションがバッキング ファイルを最初に検索するのが /src ディレクトリであるためです (初めて Web アプリケーションのバッキング ファイルを保存する場合は、WEB-INF/src
の下に /backing
ディレクトリを作成する必要があります)。
バッキング ファイルをポートレットに追加するには、WebLogic Workshop を使用するか、追加先のファイルにコードを直接入力します。その他すべてのポートレット タイプに関しては、図 5-2 に示すように、プロパティ エディタの [ポートレット プロパティ] セクションの下にある [バッキング ファイル] フィールドで、バッキング ファイルを指定します。バッキング ディレクトリを指定し、ドット区切り文字に続けてバッキング ファイルの名前だけを指定します。バッキング ファイルの拡張子は含めないでください。たとえば次のように入力します。
backing.ListenCustomerName.java
ファイル拡張子を含めた場合、ファイル拡張子がファイル名と解釈されます。これは、ドット区切り文字によってファイル パスが指定されるためです。その結果、アプリケーションは、存在しない ListenCustomerName
という名前 (つまり指定したバッキング ファイルの名前) のディレクトリの、存在しない java
という名前のファイルを検索します。
図 5-2 IDE を使用してバッキング ファイルを追加する
バッキング ファイルを .portlet
ファイルにコード化して追加するには、コード リスト 5-2 に示すように、<netuix:jspContent>
要素の中で backingFile
パラメータを使用します。
コード リスト 5-2 バッキング ファイルを .portlet ファイルに追加する
<netuix:content>
<netuix:jspContent
backingFile="portletToPortlet.pageFlowSelectionDisplayOnly.menu.
contentUri="/portletToPortlet/pageFlowSelectionDisplayOnly/menu/
backing.MenuBacking"
menu.jsp"/>
</netuix:content>
![]() |
![]() |
![]() |