uCosminexus Portal Framework ポートレット開発ガイド
機能
ポートレット間通信機能を提供するクラスです。
使用方法
必要に応じて次に示すメソッドをオーバーライドしてください。
- actionメソッド
ポートレットアクションイベント発生時に呼び出されます。
利用者からuCosminexus Portal Frameworkに対して要求が発生したとき,そのポートレットが画面上に表示されていれば呼び出されます。
- receiveメソッド
ポートレット間通信イベント発生時に呼び出されます。
あるポートレットのアクションモジュール内から,このポートレットを対象としてsendメソッドが呼び出された場合に,このreceiveメソッドが呼び出されます。
なお,次の場合は,後述のデフォルトアクションモジュールの動作をします。
- イベント(メソッド)を定義しなかった場合
- アクションモジュールが存在しない場合
アクションモジュールは,ポートレット単位で指定できます。
注意事項
- uCosminexus Portal Frameworkはアクションモジュールごとにインスタンスを保持します。
したがって,アクションモジュールでインスタンス変数を定義しても,それらはstatic変数のように共有化されています。
- アクションモジュールは利用者要求(リクエスト)単位のシングルスレッドで実行されます。
イベント内で処理負荷が掛かる記述をすると,uCosminexus Portal Framework全体の性能を低下させるおそれがあるので注意してください。
ただし,ポートレット並列表示機能使用時は,ポートレットごとに並列動作ができます。ポートレット並列表示機能については,マニュアル「uCosminexus Portal Framework システム管理者ガイド」の「ポートレット並列表示」の説明を参照してください。
メソッドの一覧
戻り値のデータ型 メソッド 説明 void action(HttpServletRequest req, HttpServletResponse res) ポートレットアクションイベント処理(推奨) void action(HttpServletRequest req) ポートレットアクションイベント処理(非推奨) final java.lang.Object getMessage(javax.servlet.http.HttpServletRequest request) ポートレット間通信イベントの場合に通信元が設定したメッセージを取得します。 final jp.co.hitachi.soft.portal.portlet.beans.PortletInfoBean getPortletInfo(javax.servlet.http.HttpServletRequest request,java.lang.String beanid) ポートレット情報取得Bean取得メソッド final jp.co.hitachi.soft.portal.api.log.PortletLog getPortletLog(javax.servlet.http.HttpServletRequest request,java.lang.String beanid) ポートレットログ出力Bean取得メソッド final java.lang.String getPortletName(javax.servlet.http.HttpServletRequest request) 処理中のポートレット名称を取得します。 final java.lang.String getSrcPortletName(javax.servlet.http.HttpServletRequest request) ポートレット間通信イベントの場合に通信元のポートレット名称を取得します。 final jp.co.hitachi.soft.portal.portlet.beans.UserAgentInfoBean getUserAgentInfoBean(javax.servlet.http.HttpServletRequest request,java.lang.String beanid) UserAgent情報取得Bean取得メソッド final jp.co.hitachi.soft.portal.api.user.PortalUserInfoBean getUserInfo(javax.servlet.http.HttpServletRequest request,java.lang.String beanid) ユーザ情報取得Bean取得メソッド void receive(HttpServletRequest req, HttpServletResponse res) ポートレット間通信イベント処理(推奨) void receive(HttpServletRequest req) ポートレット間通信イベント処理(非推奨) final void send(javax.servlet.http.HttpServletRequest request,java.lang.String portletName,java.lang.Object message) ポートレット間通信をしたい場合にメッセージを送信します。
メソッドの説明
- action〔使用を推奨するメソッド〕
- 形式
public void action(HttpServletRequest request, HttpServletResponse response)
- 機能
- Webブラウザからフォームデータを入力した,アンカーをクリックしたなどの利用者要求が発生した場合に呼び出されます。
- ただし,そのポートレットが画面上に表示されている場合だけです。
- 利用方法
- 利用者要求が発生した場合で,何らかの処理が必要なときはこのメソッドをオーバーライドしてください。
- 利用手順
- どのポートレットに対して要求があったのかをチェックします。
getPortletName()
注 この処理は推奨しません。ポートレットを判断しなくてもよい処理にしてください。
- インタフェースの内容を参照して処理を実行します。
request.getAttribute(key)の内容
- インタフェースを設定します。
Webブラウザからの要求を取得する場合
次のパラメタ取得メソッドを使用します。
getParameter(String),getParameterMap(),getParameterNames(),getParameterValues(String)
ほかのポートレットのインタフェースを設定する場合
sendメソッドにメッセージを設定します。
相手側ポートレットは,receiveメソッドで受信します。
JSPやサーブレットに対してインタフェースを設定する場合
次の値を利用します。
[リクエスト]に設定
request.setAttribute(key, value)
[セッション]に設定
request.getSession().setAttribute(key, value)
なお,request.setAttribute(key, value)した結果は,各ポートレットに独立して引き渡されます。
例えば,ポートレットAのポートレットアクションモジュールで,request.setAttribute("test", "a")と設定したあと,ポートレットBのポートレットアクションモジュールで,request.setAttribute("test", "b")と設定したとします。各ポートレットのJSPやサーブレットに対してポートレットAには,request.getAttribute("test")で,"a"を返します。そして,ポートレットBには,request.getAttribute("test")で,"b"を返します。
なお,そのほかのポートレット(例えば,ポートレットCなど)には,最後に設定したポートレットの情報である"b"が返されます。したがって,全ポートレット共通にパラメタを持つ場合には,一意となるようなパラメタ名称を設定してください。
- 特定のポートレットに対して処理を依頼したり,状態変化を通知したい場合,次の処理を実行します。
- このメソッド内で通知先ポートレットと,メッセージ内容を決定してsendメソッドを呼び出します。
- パラメタ
- request - イベント処理に渡されたリクエストオブジェクト
- response - イベント処理に渡されたレスポンスオブジェクト
- 戻り値
- なし
- 例外
- なし
- 注意事項
- responseに何らかの操作を行っても無視されます。
- responseパラメタのgetOutpuStream()メソッドまたはgetWriter()メソッドを呼び出した場合,JSP(ポートレット)側に制御を渡す処理でjava.lang.IllegalStateExceptionが発生する場合があります。
- action〔使用を推奨しないメソッド〕
- 形式
public void action(HttpServletRequest req)
- 機能
- 旧バージョンとの互換のためのメソッドです。そのため,このメソッドを使用することは,推奨しません。
- パラメタ
- req - イベント処理に渡されたリクエストオブジェクト
- 戻り値
- なし
- 例外
- java.lang.IllegalArgumentException - requestがnullの場合
- ログにエラー情報が出力されますので確認してください。
- getMessage
- 形式
public final java.lang.Object getMessage(javax.servlet.http.HttpServletRequest request)
- 機能
- ポートレット間通信イベントの場合,通信元が設定したメッセージを取得します。receiveメソッドが呼ばれた場合に使用してください。
- パラメタ
- request - イベント処理に渡されたリクエストオブジェクト
- 戻り値
- 通信元のメッセージ内容
- メッセージが設定されていない場合はnullを返します。
- 例外
- java.lang.IllegalArgumentException - requestがnullの場合
- getPortletInfo
- 形式
public final jp.co.hitachi.soft.portal.portlet.beans.PortletInfoBean getPortletInfo(javax.servlet.http.HttpServletRequest request, java.lang.String beanid)
- 機能
- ポートレット情報取得Bean取得メソッド
- ポートレットの情報を取得するためのAPIオブジェクトを取得します。
- ポートレットのパラメタを取得したい場合は,ポートレット定義ファイル(jetspeed-config.jcfg)またはPortal Managerで設定します。
- そのほかに,ポートレットのタイトル,説明文を取得できます。
- パラメタ
- request - イベント処理に渡されたリクエストオブジェクト
- beanid - JSPなどで定義しているbean名称を指定してください。
- JSPファイルのjsp:useBeanアクションで指定するscope属性は,pageでなければなりません。
- ポートレット情報取得Beanオブジェクトが存在しない場合は,新たに生成します。
- 新たにbeanを生成した場合,その情報はpageに保持されます。
- 戻り値
- PortletInfoBean ポートレット情報取得Beanオブジェクト(nullでは返却されません)
- 例外
- java.lang.IllegalArgumentException - 次の場合に発生します。
- uCosminexus Portal Frameworkが状態不正を検出した場合
- 引数のrequestまたはbeanidがnullの場合
- ログにエラー情報が出力されますので確認してください。
- getPortletLog
- 形式
public final jp.co.hitachi.soft.portal.api.log.PortletLog getPortletLog(javax.servlet.http.HttpServletRequest request, java.lang.String beanid)
- 機能
- ポートレットログ出力Bean取得メソッド
- ポートレット単位でログをファイルに出力するための情報が取得できます。
- 利用方法
- jp.co.hitachi.soft.portal.api.log.PortletLogパッケージをインポートしてください。
- actionおよびreceiveメソッド内で,getPortletLogメソッドを呼び出すことによって,ポートレットログ出力Beanオブジェクトを取得できます。
- ログ出力Beanのメソッドを利用して,目的の情報にアクセスしてください。
ログ出力Beanのメソッドについては,「14.7 ログ出力Bean」を参照してください。
- パラメタ
- request - イベント処理に渡されたリクエストオブジェクト
- beanid - JSP等で定義しているbean名称を指定してください。
- JSPファイルのjsp:useBeanアクションで指定するscope属性は,sessionまたはrequestでなければなりません。
- sessionとrequest双方に,指定したbeanidが設定されている場合はsessionを優先的に利用します。
- sessionにポートレットログ出力Beanでないオブジェクトが設定されていて,requestにポートレットログ出力Beanが設定されている場合は,requestに設定されているポートレットログ出力Beanを取得します。
- sessionとrequest双方に存在しない場合は,ポートレットログ出力Beanオブジェクトを保持しません。
- 戻り値
- PortletLog ポートレットログ出力Beanオブジェクト(nullでは返却されません)
- 例外
- java.lang.IllegalArgumentException - 次の場合発生します。
- 引数のbeanidまたはrequestがnullの場合
- ログにエラー情報が出力されますので確認してください。
- getPortletName
- 形式
public final java.lang.String getPortletName(javax.servlet.http.HttpServletRequest request)
- 機能
- 処理中のポートレット名称を取得します。actionまたはreceiveメソッドが呼ばれた場合に使用してください。
- パラメタ
- request - イベント処理に渡されたリクエストオブジェクト
- 戻り値
- 処理中のポートレット名称
- 例外
- java.lang.IllegalArgumentException - requestがnullの場合
- getSrcPortletName
- 形式
public final java.lang.String getSrcPortletName(javax.servlet.http.HttpServletRequest request)
- 機能
- ポートレット間通信イベントの場合,通信元のポートレット名称を取得します。receiveメソッドが呼ばれた場合に使用してください。
- パラメタ
- request - イベント処理に渡されたリクエストオブジェクト
- 戻り値
- 通信元のポートレット名称
- 例外
- java.lang.IllegalArgumentException - requestがnullの場合
- getUserAgentInfoBean
- 形式
public final jp.co.hitachi.soft.portal.portlet.beans.UserAgentInfoBean getUserAgentInfoBean(javax.servlet.http.HttpServletRequest request, java.lang.String beanid)
- 機能
- UserAgent情報取得Bean取得メソッド
- 要求されたリクエストに関して,ユーザエージェントを判定します。
- クライアント情報定義ファイル(UserAgentType.xml)で定義しているuseragentTypeを取得できます。
- 利用方法
- jp.co.hitachi.soft.portal.portlet.beans.UserAgentInfoBeanパッケージをインポートしてください。
- actionおよびreceiveメソッド内で,getUserAgentInfoBeanメソッドを呼び出すことによって,UserAgent情報取得Beanオブジェクトを取得できます。
Bean初期化のためのinitBeanメソッドを明示的に呼び出す必要はありません。
- UserAgent情報取得Beanのメソッドを利用して,目的の情報にアクセスしてください。
UserAgent情報取得Beanのメソッドについては,「14.8 UserAgent情報取得Bean」を参照してください。
- パラメタ
- request - イベント処理に渡されたリクエストオブジェクト
- beanid - JSPなどで定義しているbean名称を指定してください。
- JSPファイルのjsp:useBeanアクションで指定するscope属性は,sessionでなければなりません。
- 指定したbeanidのUserAgent情報取得Beanオブジェクトが存在しない場合は,新たに生成します。
- 新たにbeanを生成した場合,その情報はsessionに保持されます。
- 戻り値
- UserAgent情報取得Beanオブジェクト(nullで返却されることはありません)
- 例外
- java.lang.IllegalArgumentException - 次の場合発生します。
- 引数のbeanidまたはrequestがnullの場合
- uCosminexus Portal Frameworkが状態不正を検出した場合
- ログにエラー情報が出力されますので確認してください。
- getUserInfo
- 形式
public final jp.co.hitachi.soft.portal.api.user.PortalUserInfoBean getUserInfo(javax.servlet.http.HttpServletRequest request, java.lang.String beanid)
- 機能
- ユーザ情報取得Bean取得メソッド
- 現在ログインしているユーザの情報を取得したり,各ユーザのポートレット固有の情報にアクセスしたりできます。
- 現在ログインしているユーザのユーザ情報,組織情報,およびグループ情報が取得できます。
これは,リポジトリファイル(Repository.xml)に定義されたLDAP/DBで定義している情報です。
- 各ユーザのポートレット固有の情報にアクセスできます。
これは,LDAP/DBに保持している情報です。
- 利用方法
- jp.co.hitachi.soft.portal.api.user.PortalUserInfoBeanパッケージをインポートしてください。
- actionおよびreceiveメソッド内で,getUserInfoメソッドを呼び出すことによって,ユーザ情報取得Beanオブジェクトを取得できます。
Bean初期化のためのsetRequestメソッドを明示的に呼び出す必要はありません。
- ユーザ情報取得Beanのメソッドを利用して,目的の情報にアクセスしてください。
ユーザ情報取得Beanのメソッドについては,「14.6 ユーザ情報取得Bean」を参照してください。
- パラメタ
- request - イベント処理に渡されたリクエストオブジェクト
- beanid - JSPなどで定義しているbean名称を指定してください。
- JSPファイルのjsp:useBeanアクションで指定するscope属性は,sessionでなければなりません。
- 指定したbeanidのユーザ情報取得Beanオブジェクトが存在しない場合は,新たに生成します。
- 新たにbeanを生成した場合,その情報はsessionに保持されます。
- 戻り値
- ユーザ情報取得Beanオブジェクト(nullでは返却されません)
- 例外
- java.lang.IllegalStateException -
- uCosminexus Portal Frameworkが状態不正を検出した場合に発生します。ログにエラー情報が出力されますので確認してください。java.lang.IllegalArgumentException -
- 引数のbeanidまたはrequestがnullの場合に発生します。ログにエラー情報が出力されますので確認してください。
- receive〔使用を推奨するメソッド〕
- 形式
public void receive(HttpServletRequest request, HttpServletResponse response)
- 機能
- ポートレット間通信イベント処理
- ほかのポートレットからsendメソッドを呼ばれた場合に,このメソッドが呼び出されます。
- 利用方法
- ほかのポートレットからsendメソッドを呼ばれた場合,何らかの処理が必要なときはこのメソッドをオーバーライドしてください。
- 利用手順
- どのポートレットに対して要求があったのかチェックします。
getPortletName()
- どのポートレットから要求があったのかチェックします。
getSrcPortletName()
- どのようなメッセージをポートレットから受信したのかチェックします。
getMessage()
- インタフェースの内容を参照して処理を実行します。
request.getAttribute(key)の内容
- インタフェースを設定します。
詳細はactionメソッドを参照してください。
- 特定のポートレットに対して処理を依頼したり,状態変化を通知したい場合,次の処理を実行します。
- このメソッド内でsendメソッドを呼び出します。
send(リクエストオブジェクト,送信先ポートレット名称,送信メッセージ)
- パラメタ
- request - イベント処理に渡されたリクエストオブジェクト
- response - イベント処理に渡されたレスポンスオブジェクト
- 戻り値
- なし
- 例外
- java.lang.IllegalStateException - responseパラメタのgetOutpuStream()メソッドまたはgetWriter()メソッドを呼び出した場合,JSP(ポートレット)側に制御を渡す処理で発生する場合があります。
- 注意事項
- responseに何らかの操作を行っても無視されます。
- receive〔使用を推奨しないメソッド〕
- 形式
public void receive(HttpServletRequest req)
- 機能
- ポートレット間通信イベント処理
- ほかのポートレットからsendメソッドを呼ばれた場合に,このメソッドが呼び出されます。
- このメソッドを使用することは,推奨しません。
- 利用方法
- ほかのポートレットからsendメソッドを呼ばれた場合,何らかの処理が必要なときはこのメソッドをオーバーライドしてください。
- 利用手順
- どのポートレットに対して要求があったのかチェックします。
getPortletName()
- どのポートレットから要求があったのかチェックします。
getSrcPortletName()
- どのようなメッセージをポートレットから受信したのかチェックします。
getMessage()
- インタフェースの内容を参照して処理を実行します。
request.getAttribute(key)の内容
- インタフェースを設定します。
詳細はactionメソッドを参照してください。
- 特定のポートレットに対して処理を依頼したり,状態変化を通知したりしたい場合,次の処理を実行します。
- このメソッド内でsendメソッドを呼び出します。
send(リクエストオブジェクト,送信先ポートレット名称,送信メッセージ)
- パラメタ
- req - イベント処理に渡されたリクエストオブジェクト
- 戻り値
- なし
- 例外
- java.lang.IllegalArgumentException - requestがnullの場合
- ログにエラー情報が出力されますので確認してください。
- send
- 形式
public final void send(javax.servlet.http.HttpServletRequest request, java.lang.String portletName, java.lang.Object message)
- 機能
- ポートレット間通信をしたい場合,メッセージを送信します。
- actionメソッドまたはreceiveメソッドから呼び出せます。
- パラメタ
- request - イベント処理に渡されたリクエストオブジェクト
- portletName - 通知先ポートレット名称
- message - 相手側に通知するメッセージオブジェクト
- 戻り値
- なし
- 例外
- java.lang.IllegalArgumentException - 次の場合,例外が発生します。
- request,portletNameがnullの場合
- portletNameで指定されたポートレットが,Cosminexus Portal Frameworkに未登録である場合
- portletNameで指定されたポートレットを,この利用者が利用できない(アクセス権限がない)場合
- デフォルトアクションモジュールを不正に生成した場合
- ログにエラー情報が出力されますので確認してください。
All Rights Reserved. Copyright (C) 2009, 2013, Hitachi, Ltd.
All Rights Reserved. Copyright (C) 2009, 2013, Hitachi INS Software, Ltd.