管理コンソールでは、すべてのコンテンツがポートレット内に格納されるため、拡張を最低限にする場合でもポートレット(およびポートレットのコンテンツ)を定義しなければならない場合がほとんどです。ポートレットをデスクトップに直接追加することもできますが、ポートレットをContentBook
内のタブやサブタブとして表示する場合は、それを格納するブックまたはページを定義する必要があります。拡張でNavTreePortletにノードを追加することもできます。そうすることで、追加したポートレットに、ユーザーがデスクトップから直接移動できるようになります。
この節では、ポートレット、UIコントロール、およびNavTreePortletノードを管理コンソールに追加する方法について説明します。
図6-1にこのプロセスを示します。プロセスの手順、および各手順の結果については、表6-1を参照してください。以下の節では、各手順について詳しく説明します。
表6-1 モデルMBeanの開発タスクと結果
手順 | 説明 | 結果 |
---|---|---|
1. ポートレットの定義 |
ポータル・フレームワークでインスタンス化できるポートレットを定義するためのXMLファイルを作成します。ポートレットの定義には、どの種類のデータ(JSP、Struts Action、またはBeehiveページ・フロー)をロードするかを示す指示が含まれます。 ポータルのルック・アンド・フィールによって、ポートレットが枠線や最小化/最大化コントロールを提供するかどうかが決まります。 |
|
|
|
|
ポータルを、ラベル付きUIコントロールの横に表示するか、コントロールを置換して表示するかを記述するXMLファイルを作成します。 |
|
|
NavTreePortletから拡張内のブックやページへのリンクを作成できます。 WebLogic Serverのデフォルトでは、既存のナビゲーション・ツリーの末尾にコントロール名を追加できるようになっています。特定の場所にノードを挿入する場合や、ノード・ツリーを作成する場合は、ノードおよびノードの場所を記述するJavaクラスを独自に作成します。 |
場合によって、追加したノードをより詳細に制御するJavaクラス。 |
|
5.拡張のアーカイブとデプロイメント |
詳細は、第9章「コンソール拡張のアーカイブとデプロイ」を参照してください。 |
拡張を格納したWARファイル。 |
ポートレットはXMLファイルで定義します。ポートレットの定義には、ロードするデータの種類(JSP、Struts Action、またはBeehiveページ・フロー)についての指示が含まれます。以下の節では、ポートレットを定義する方法について説明します。
ポートレットXMLファイルの詳細は、『Portal Support Schema Reference』のエントリを参照してください。
JSPをロードするポートレットを定義するには、次の手順に従います。
root-dir
/portlets
に新しいテキスト・ファイルを作成し、コード・リスト6-1のコードをコピーして貼り付けます。(「拡張のディレクトリ・ツリーの作成」を参照)。
次のネーミング・ルールを使用することをお薦めします。
content-name.portlet
content-name
はポートレットに格納するJSPファイルの名前です。たとえば、ポートレットにmonitorEJB.jsp
という名前のJSPファイルを格納する場合は、ポートレットXMLファイルの名前をmonitorEJB.portlet
にします。
コード・リスト6-1内の以下の値を変更します。
Label
。ポータル・フレームワークでこのポートレットを特定するためのユニークな識別子に変更します。
(オプション) Title
。タイトル・バーが表示される場合にこのポートレットが表示するデフォルトのタイトルを指定します。「ポートレットのタイトル・バーの表示」を参照してください。
URI
。ポートレットに格納するJSPの絶対パスとファイル名に変更します。絶対パスは、拡張のルートから始めます。
例:
/ext_jsp/monitorEJB.JSP
拡張をデプロイする前に、JSPをプリコンパイルする必要があります。
コード・リスト6-1 JSPファイルをロードするポートレットXMLファイルのテンプレート
<?xml version="1.0" encoding="UTF-8"?> <portal:root xmlns:html="http://www.w3.org/1999/xhtml-netuix-modified/1.0.0" xmlns:portal="http://www.bea.com/servers/netuix/xsd/portal/support/1.0.0" xmlns:netuix="http://www.bea.com/servers/netuix/xsd/controls/netuix/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.bea.com/servers/netuix/xsd/portal/ support/1.0.0 portal-support-1_0_0.xsd"> <netuix:portlet definitionLabel="Label" title="Title" > <netuix:content> <netuix:jspContent contentUri="URI"/> </netuix:content> </netuix:portlet> </portal:root>
拡張のビジネス・ロジックとナビゲーション・ロジックをJSPファイルにカプセル化するかわりに、Apache Strutsフレームワークを使用できます。「表およびフォーム用のStruts情報の作成」を参照してください。
Struts Actionをロードする(Struts Actionに転送する)ポートレットを作成するには、次の手順に従います。
root-dir
/portlets
に新しいテキスト・ファイルを作成し、コード・リスト6-2のコードをコピーして貼り付けます。(「拡張のディレクトリ・ツリーの作成」を参照)。
次のネーミング・ルールを使用することをお薦めします。
action-name.portlet
action-name
はポートレットの転送先となるStruts Actionの名前です。
コード・リスト6-2内の以下の値を変更します。
Label
。ポータル・フレームワークでこのポートレットを特定するためのユニークな識別子に変更します。
(オプション) Title
。タイトル・バーが表示される場合にこのポートレットが表示するデフォルトのタイトルを指定します。「ポートレットのタイトル・バーの表示」を参照してください。
Struts-module
。Struts Actionを定義するStrutsモジュールを指定します。
独自のStrutsモジュールを作成して、管理コンソール拡張を使用するActionおよびActionFormを定義する必要があります。デフォルトのStrutsモジュールはOracle ActionおよびActionForm用に予約されています。各モジュールには独自の、ユニークな名前を持つ構成ファイルが含まれます。Strutsモジュールの詳細は、Apache Strutsの『User Guide』(http://struts.apache.org/struts-doc-1.2.x/userGuide/index.html
)を参照してください。
たとえば、Struts-module
に「myModule」
と指定した場合、Strutsコントローラ・サーブレットは次の場所でアクション検索します。
root-dir/WEB-INF/struts-auto-config-myModule.xml
action-path
。Strutsモジュール内で定義したStruts Actionのパスを指定します。
refresh-action-path
。このポートレットの後続のリクエストで呼び出すAction
(たとえば、ドキュメントを更新するユーザー・エージェント)を指定します。
この.portlet
ではJSPの名前は指定しません。かわりに、正常に処理された場合は、Struts Actionマッピングによって特定のJSPに転送されます。
例6-2 Strutsアクションに転送するポートレットXMLファイルのテンプレート
<?xml version="1.0" encoding="UTF-8"?> <portal:root xmlns:html="http://www.w3.org/1999/xhtml-netuix-modified/1.0.0" xmlns:portal="http://www.bea.com/servers/netuix/xsd/portal/support/1.0.0" xmlns:netuix="http://www.bea.com/servers/netuix/xsd/controls/netuix/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.bea.com/servers/netuix/xsd/portal/ support/1.0.0 portal-support-1_0_0.xsd"> <netuix:portlet definitionLabel="Label" title="Title" > <netuix:strutsContent module="Struts-module" action="action-path" refreshAction="refresh-action-path"/> </netuix:portlet> </portal:root>
Beehiveページ・フローをロードするポートレットを定義するには、次の手順に従います。
root-dir
/portlets
に新しいテキスト・ファイルを作成し、コード・リスト6-3のコードをコピーして貼り付けます。(「拡張のディレクトリ・ツリーの作成」を参照)。
次のネーミング・ルールを使用することをお薦めします。
pageFlow-name.portlet
pageFlow-name
はポートレットがロードする(ポートレットの転送先となる)ページ・フローの名前です。たとえば、ポートレットがmyPageFlow.jpf
というページ・フローに転送される場合は、ポートレットXMLファイルの名前をmyPageFlow.portlet
にします。
コード・リスト6-3内の以下の値を変更します。
Label
。ポータル・フレームワークでこのポートレットを特定するためのユニークな識別子に変更します。
(オプション) Title
。タイトル・バーが表示される場合にこのポートレットが表示するデフォルトのタイトルを指定します。「ポートレットのタイトル・バーの表示」を参照してください。
URI
。ページ・フローを定義するJPFファイルの絶対パスとファイル名を指定します。URIはroot-dir
/WEB-INF/classes
ディレクトリから始まる絶対パスにする必要があります。
たとえば、JPFファイルがroot-dir
/WEB-INF/classes/com/mycompany/extension/pageflows/myPageFlow.jpf
である場合は、次の値を指定します。
/com/mycompany/extension/pageflows/myPageFlow.jpf
Action
。ページ・フローを定義するJPFファイルの絶対パスとファイル名を指定します。
例6-3 ページ・フローに転送するポートレットXMLファイルのテンプレート
<?xml version="1.0" encoding="UTF-8"?> <portal:root xmlns:html="http://www.w3.org/1999/xhtml-netuix-modified/1.0.0" xmlns:portal="http://www.bea.com/servers/netuix/xsd/portal/support/1.0.0" xmlns:netuix="http://www.bea.com/servers/netuix/xsd/controls/netuix/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.bea.com/servers/netuix/xsd/portal/ support/1.0.0 portal-support-1_0_0.xsd"> <netuix:portlet definitionLabel="Label" title="Title" > <netuix:content> <netuix:pageflowContent contentUri="URI" action="Action"/> refreshAction="refresh-Action"/> </netuix:content> </netuix:portlet> </portal:root>
ポートレットを管理コンソールのデスクトップ上(「page」
ページのプレースホルダー内)に配置する場合は、タイトル・バーを表示するようにポートレットを構成します。ポートレットをContentBook
に置く場合は、タイトル・バーは表示しません。
タイトル・バーを表示するには、次の手順に従います。
ポートレットの.portlet
XMLファイルで、netuix:portlet
要素のtitle
属性の値を指定します。ローカライズされた値を表示するには、「ポートレット・タイトルのローカライズ」を参照してください。
netuix:portlet
要素の子要素として以下の要素を指定します。
<netuix:titlebar/>
ポートレットを最小化および最大化できるようにするには、空の<netuix:titlebar/>
要素のかわりに以下のスタンザを指定します。
<netuix:titlebar> <netuix:minimize/> <netuix:maximize/> </netuix:titlebar>
コード・リスト6-4では、タイトル・バーを表示するポートレットを定義しています。このポートレットは最小化または最大化でき、タイトルの値はメッセージ・バンドルから取得します。
例6-4 例: ローカライズされたタイトルを表示するポートレット
<?xml version="1.0" encoding="UTF-8"?> <portal:root xmlns:html="http://www.w3.org/1999/xhtml-netuix-modified/1.0.0" xmlns:portal="http://www.bea.com/servers/netuix/xsd/portal/support/1.0.0" xmlns:netuix="http://www.bea.com/servers/netuix/xsd/controls/netuix/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.bea.com/servers/netuix/xsd/portal/ support/1.0.0 portal-support-1_0_0.xsd"> <netuix:portlet definitionLabel="medrecEAR.Monitor.Portlet" title="medrecMBean.myPortlet.title" backingFile="com.bea.medrec.extension.utils.DesktopViewBacking"> <netuix:titlebar> <netuix:minimize/> <netuix:maximize/> </netuix:titlebar> <netuix:content> <netuix:strutsContent module="/medrecMBean" action="RetrieveCustomMBeansAction" refreshAction="RetrieveCustomMBeansAction"/> </netuix:content> </netuix:portlet> </portal:root>
デフォルトでは、ポートレットは<netuix:portlet>
要素のtitle
属性に入力されたリテラル値を表示します。このタイトルをローカライズできるようにするには、次の手順に従います。
title
属性の値を取得し、プロパティ・ファイルでtitle
属性の値に一致するキーを検索して、そのプロパティ・キーの値を返すJavaクラスを作成します。
たとえば、title="myPortlet.title"
と指定した場合、Javaクラスはメッセージ・バンドルを検索してmyPortlet.title=MyCompany's Portlet
を見つけ、表示するテキストとしてMyCompany's Portlet
を返します。
「ポートレット・タイトルをローカライズするためのバッキング・クラスの作成」を参照してください。
.portlet
ファイルで、<netuix:portlet>
要素内に以下の属性を指定します。
title
。メッセージ・バンドルで定義したプロパティのキーを指定します。
backingFile
。前述の手順で作成したJavaクラスの完全修飾名を指定します。
例:
<netuix:portlet definitionLabel="myPortlet" title="myPortlet.title" backingFile="com.mycompany.extension.utils.MyPortletBacking">
バッキング・クラスは、ポータル・フレームワークAPIと直接対話するJavaクラスです。ローカライズされたポートレット・タイトルを取得するバッキング・クラスを作成するには、次の手順に従います。
com.bea.netuix.servlets.controls.content.backing.AbstractJspBacking
を拡張します。
AbstractJspBacking.preRender(HttpServletRequest request, HttpServletResponse response)
メソッドを実装します。
このメソッドの実装で以下を行います。
HttpServletRequest
オブジェクトからロケールを取得します。
次のAPIを使用します。
javax.servlet.http.HttpServletRequest.getSession().getAttribute( "org.apache.struts.action.LOCALE")
メッセージ・バンドルを取得します。
次のAPIを使用します。
org.apache.struts.util.MessageResources.getMessageResources(
"myBundle");
myBundle
はメッセージ・バンドルの名前です。(「メッセージ・バンドルの作成」を参照)。
ポートレットのtitle
プロパティの値を取得します。
次のAPIを使用します。
PortletBackingContext bctx = PortletBackingContext.getPortletBackingContext( HttpServletRequest req); MessageResources.getMessage(locale, bctx.getTitle());
locale
はHttpServletRequest
オブジェクトから取得したロケールです。
ポートレットのtitle
プロパティの値を、前述の手順で取得したローカライズされた値にリセットします。
次のAPIを使用します。
PortletBackingContext.getTitle(String title)
title
メッセージ・バンドルから取得した値です。
コード・リスト6-5例:ポートレット・タイトルをローカライズするためのバッキング・クラス
package com.bea.medrec.extension.utils; import java.util.Locale; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.util.MessageResources; import com.bea.netuix.servlets.controls.content.backing.AbstractJspBacking; import com.bea.netuix.servlets.controls.portlet.backing.PortletBackingContext; public class DesktopViewBacking extends AbstractJspBacking { public boolean preRender(HttpServletRequest req, HttpServletResponse res) { // Get the PortletBackingContext for current portlet. The // PortletBackingContext contains properties and methods // for the current portlet. PortletBackingContext bctx = PortletBackingContext.getPortletBackingContext(req); if (bctx != null) { // If title does not contain a period, assume it's preLocalized // or follow the format for a key if (bctx.getTitle().indexOf(".")!=-1){ // Get the locale from the HTTPServletRequest Locale locale = (Locale) req.getSession().getAttribute( "org.apache.struts.action.LOCALE"); // Find the message bundle named "medrecMBean" MessageResources messages = MessageResources.getMessageResources("medrecMBean"); // Get the value of the portlet's "title" property String msg = messages.getMessage(locale, bctx.getTitle()); // Reset the value of the "title" property with the // localized value. bctx.setTitle(msg); } } return true; } }
管理コンソールにタブまたはサブタブを追加する場合は、既存の階層に適合するブックまたはページUIを定義する必要があります。
最上位のタブ(たとえば「ドメイン:構成」の兄弟)を作成するには、1つまたは複数のページを格納するブックを作成します。各ページには、ポートレットを格納します。
既存のタブのサブタブ(たとえば「ドメイン:構成:全般」の兄弟)を作成するには、1つのポートレットを格納するページを作成します。
ブックおよびページの定義を、1つまたは複数のポータル・ブック(.book
)ファイルに保存します。コントロールの階層グループごとに1つの.book
ファイルを作成します。たとえば、最上位のタブとそのサブタブを作成するブック用に1つの.book
ファイルを作成します。また、既存のWebLogic Serverタブにサブタブを追加するページ用にも別の.book
ファイルを作成します。.book
ファイルのルート要素(portal:root
)には、直接の子要素を1つのみ持たせることができます。
以下の節では、ブックやページの作成について説明します。
サブタブのないタブ(「ドメイン: ノート」など)を定義するポータル・ブック(.book
) XMLファイルを作成するには、次の手順に従います。
コード・リスト6-6のコードをコピーして、新しいテキスト・ファイルに貼り付けます。
たとえば、root-dir
/controls/MyApp.book
root-dir
は開発用のディレクトリです。詳細は、第3章「開発環境の設定」を参照してください。
コード・リスト6-6内の以下の値を変更します。
Page-Label
。ポータル・フレームワークおよびWebLogic Server JSPタグが、ページへのリクエストの転送に使用するユニークな識別子に変更します。
Page-Title
。ユーザーに対して表示するタブの名前、または作成したメッセージ・バンドルのキーに変更します。
指定する値に「.」(ピリオド)が含まれている場合、管理コンソールはこの値がキーであると想定し、メッセージ・バンドルから値を検索しようとします。たとえば、My.Tab
と指定すると、管理コンソールはMy.Tab
というキーを持つプロパティの値を検索します。そのような値が見つからない場合は、タブ名としてnull
と表示します。値としてMy Tab
を指定すると、管理コンソールはMy Tab
と表示します。
Bundle
。作成したメッセージ・バンドルの名前に変更します。netuix:page
要素のtitle
属性の値に「.」が含まれている場合にのみ、このバンドルが使用されます。「JSPでのメッセージ・バンドルの作成と使用」を参照してください。
Portlet-Instance-Label
。ポータル・フレームワークおよびWebLogic Server JSPタグが、ポートレット・インスタンスへのリクエストの転送に使用するユニークな識別子に変更します。
Portlet-URI
。作成したポートレット・ファイルのパスとファイル名に変更します(「ポートレットの定義」を参照)。パスは、ポータルWebアプリケーションのルートに対する相対パスでなければなりません。
例:
/portlets/monitorEJB.portlet
コード・リスト6-6では、ブックではなくページを定義している点に留意します。こうすることで、管理コンソールのルック・アンド・フィールによって、ページがサブタブのないタブとして表示されます。
例6-6 サブタブのないタブを作成する.bookファイルのテンプレート
<?xml version="1.0" encoding="UTF-8"?> <portal:root xmlns:netuix="http://www.bea.com/servers/netuix/xsd/controls/netuix/1.0.0" xmlns:html="http://www.w3.org/1999/xhtml-netuix-modified/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:portal="http://www.bea.com/servers/netuix/xsd/portal/support/1.0.0" xsi:schemaLocation="http://www.bea.com/servers/netuix/xsd/portal/support /1.0.0 portal-support-1_0_0.xsd"> <netuix:page markupName="page" markupType="Page" definitionLabel="Page-Label" title="Page-Title" skeletonUri="/framework/skeletons/default/wlsworkspace/ page_content.jsp"> <netuix:meta name="skeleton-resource-bundle" content="Bundle"/> <netuix:content> <netuix:gridLayout columns="1" markupType="Layout" markupName="singleColumnLayout"> <netuix:placeholder flow="vertical" markupType="Placeholder" markupName="singleColumn_columnOne"> <netuix:portletInstance markupType="Portlet" instanceLabel="Portlet-Instance-Label" contentUri="Portlet-URI"/> </netuix:placeholder> </netuix:gridLayout> </netuix:content> </netuix:page> </portal:root>
タブと1つまたは複数のサブタブを定義するポータル・ブック(.book
) XMLファイルを作成するには、次の手順に従います。
コード・リスト6-7のコードをコピーして、新しいテキスト・ファイルに貼り付けます。そのファイルを、root-dir
の下にあるディレクトリに保存します。
たとえば、root-dir
/controls//MyApp.book
root-dir
は開発用のディレクトリです。詳細は、第3章「開発環境の設定」を参照してください。
タブを定義するには、コード・リスト6-7の値を以下のように置き換えます。
Book-Label
。ポータル・フレームワークおよびWebLogic Server JSPタグがブックへのリクエストの転送に使用する、ユニークな識別子に変更します。これは、WebLogic ServerのUIコントロールの多くに使用されているのと同じ種類のラベルです。「管理コンソールの拡張ポイント」を参照してください。
Book-Title
。ユーザーに対して表示するタブの名前、または作成したメッセージ・バンドルのキーに変更します。
指定する値に「.」(ピリオド)が含まれている場合、管理コンソールはこの値がキーであると想定し、メッセージ・バンドルから値を検索しようとします。たとえば、My.Tab
と指定すると、管理コンソールはMy.Tab
というキーを持つプロパティの値を検索します。そのような値が見つからない場合は、タブ名としてnull
と表示します。値としてMy Tab
を指定すると、管理コンソールはMy Tab
と表示します。
Bundle
。作成したメッセージ・バンドルの名前に変更します。netuix:book
要素のtitle
属性の値に「.」が含まれている場合にのみ、このバンドルが使用されます。「JSPでのメッセージ・バンドルの作成と使用」を参照してください。
最初のサブタブを定義するには、コード・リスト6-7の値を以下のように置き換えます。
Page-Label
。ポータル・フレームワークおよびWebLogic Server JSPタグが、ページへのリクエストの転送に使用するユニークな識別子に変更します。
Page-Title
。ユーザーに対して表示するサブタブの名前、または作成したメッセージ・バンドルのキーに変更します。
指定する値に「.」(ピリオド)が含まれている場合、管理コンソールはこの値がキーであると想定し、メッセージ・バンドルから値を検索しようとします。
(オプション) Metadata-Type
およびMetadata-ID
。管理コンソールの<wl:column-dispatch>
JSPタグを使用してこのページへのハイパーテキスト・リンクを作成する場合は、<netuix:meta>
要素を含めてMetadata-Type
およびMetadata-ID
の値を指定します。「他のページに移動するための表の列の作成」を参照してください。
Portlet-Instance-Label
。ポータル・フレームワークおよびWebLogic Server JSPタグが、ポートレット・インスタンスへのリクエストの転送に使用するユニークな識別子に変更します。
Portlet-URI
。作成したポートレット・ファイルのパスとファイル名に変更します(「ポートレットの定義」を参照)。パスは、ポータルWebアプリケーションのルートに対する相対パスでなければなりません。
例:
/portlets/monitorEJB.portlet
サブタブを追加で作成するには、コード・リスト6-7のnetuix:page
要素の兄弟として別のnetuix:page
要素を追加します。
ポータル・ブックXMLファイルの詳細は、ポータル・サポート・スキーマ・リファレンスを参照してください。
この.book
ファイルでは、以下の要素も使用しています。
netuix:singleLevelMenu
は、ブック内の各ページに1つのサブタブを表示します。コード・リスト6-7では、ブックの親UIコントロールがWebLogic Serverによって提供されることが前提になっていますが、これがブックの最上位のタブを生成する役割を果たします。
netuix:meta name="breadcrumb-context" content="handle"
は、ユーザーがページを訪問した後に、訪問したページの履歴(階層リンク)にそのページのタイトルを追加します。階層リンクは、ContentBook
の上位のデスクトップに表示されます。
例6-7 サブタブを含む最上位タブを定義する.bookファイルのテンプレート
<?xml version="1.0" encoding="UTF-8"?> <portal:root xmlns:netuix="http://www.bea.com/servers/netuix/xsd/controls/netuix/1.0.0" xmlns:html="http://www.w3.org/1999/xhtml-netuix-modified/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:portal="http://www.bea.com/servers/netuix/xsd/portal/support/1.0.0" xsi:schemaLocation="http://www.bea.com/servers/netuix/xsd/portal/support /1.0.0 portal-support-1_0_0.xsd"> <netuix:book markupName="book" markupType="Book" definitionLabel="Book-Label" title="Book-Title"> <netuix:singleLevelMenu markupType="Menu" markupName="singleLevelMenu" skeletonUri="singlelevelmenu_children.jsp"/> <netuix:meta name="skeleton-resource-bundle" content="Bundle"/> <netuix:content> <netuix:page markupName="page" markupType="Page" definitionLabel="Page-Label" title="Page-Title" skeletonUri="/framework/skeletons/default/wlsworkspace/ page_content.jsp"> <netuix:meta name="Metadata-Type" content="Metadata-ID"/> <netuix:meta name="breadcrumb-context" content="handle"/> <netuix:meta name="skeleton-resource-bundle" content="Bundle"/> <netuix:content> <netuix:gridLayout columns="1" markupType="Layout" markupName="singleColumnLayout"> <netuix:placeholder flow="vertical" markupType="Placeholder" markupName="singleColumn_columnOne"> <netuix:portletInstance markupType="Portlet" instanceLabel="Portlet-Instance-Label" contentUri="Portlet-URI"/> </netuix:placeholder> </netuix:gridLayout> </netuix:content> </netuix:page> <!-- Add additional netuix:page elements here --> </netuix:content> </netuix:book> </portal:root>
既存のWebLogic Serverタブに追加できるサブタブを作成するには、次の手順に従います。
ページUIコントロールを定義する.book
ファイルを作成します。コード・リスト6-6を参照してください。
netuix-extension.xml
ファイルで、サブタブを含めるWebLogic ServerブックUIコントロールを指定します。「ContentBookへのタブまたはサブタブの追加」を参照してください。
ContentBook
内のブックやページは、必ずしもタブやサブタブでアクセスできるようにする必要はありません。要約表を表示する多くのWebLogic Serverページは、NavTreePortletからアクセスすることはできますが、タブ付きインタフェースからはアクセスできません(「図2-5」を参照)。
これまでの節のすべてのコード・リストは、子にアクセスするためのタブやサブタブを表示しない親コントロール内にも挿入できます。「ポートレットやUIコントロールの表示位置の指定」を参照してください。
ポートレットやUIコントロールを表示するすべての位置は、管理コンソール内の既存のコントロールに対する相対パスで指定する必要があります。たとえば、作成したポートレットが「システム・ステータス」ポートレットの下のデスクトップに表示されるように指定できます。
ポートレットまたはUIコントロールの表示位置を指定するには、次の手順に従います。
netuix-extension.xml
という名前のXMLファイルを作成し、次のディレクトリに保存します。
root-dir
/WEB-INF
root-dir
は開発用のディレクトリです。詳細は、第3章「開発環境の設定」を参照してください。
NetUI拡張XMLファイル(netuix-extension.xml
)は、拡張のデプロイメント記述子です。拡張の各親UIコントロールと表示位置を宣言しています(コード・リスト6-8を参照)。詳細は、「NetUI拡張スキーマ・リファレンス」を参照してください。
<weblogic-portal-extension>
ルート要素を作成します。
(オプション)拡張について説明する<provider-info>
要素を作成します。
この要素は、あくまで拡張の内容を説明するためのものです。ポータル・フレームワークでこの要素内のデータが使用されることはありません。
次の要素を追加します。
<portal-file>/console.portal</portal-file>
この必須要素では、管理コンソールの.portal
ファイル(現在拡張しているポータル)の名前と相対位置を指定します。
以下のいずれか1つを実行します。
ポートレットを管理コンソール・デスクトップに追加するには、netuix-extension.xml
ファイル内に以下のスタンザを作成します(コード・リスト6-8を参照)。
<page-extension> <page-location> <parent-label-location label="page"/> <page-insertion-point layout-location="layout" placeholder-position="0"/> </page-location> <portlet-content content-uri="portlet-URI" title="title" orientation="top" default-minimized="false" instance-label="portlet-instance-label"/> </page-extension>
説明:
layout
は次のいずれかの値。
ポートレットを管理コンソールの左側に表示する場合は0
(ゼロ)。
拡張ポートレットは常に左の列の最上部に表示されます。
ポートレットを右側に表示する場合は1
。
拡張ポートレットは常に右の列の最下部に表示されます。
portlet-URI
は、.portlet
ファイルのパスとファイル名。パスは、ポータルWebアプリケーションのルートに対する相対パスでなければなりません。
title
は、ポートレットのタイトルバーに表示されるタイトル。null値を指定した場合は、.portlet
ファイルに定義したタイトルが使用されます。
portlet-instance-label
は、ポータル・フレームワークおよびWebLogic Server JSPタグが、ポートレット・インスタンスへのリクエストの転送に使用するユニークな識別子。
タブを表示するコントロールを追加するには、netuix-extension.xml
ファイル内に以下のスタンザを作成します(コード・リスト6-8を参照)。
<book-extension> <book-location> <parent-label-location label="Admin-Console-Book-Label"/> <book-insertion-point action="append"/> </book-location> <book-content content-uri="book-URI"/> </book-extension>
説明:
Admin-Console-Book-Label
は、子ブックにアクセスするためのタブを表示する管理コンソール・ブック・コントロールのdefinitionLabel
。
book-URI
は、タブ(および指定した場合はサブタブ)のブック・コントロールを定義する.book
ファイルのパスとファイル名。パスは、ポータルWebアプリケーションのルートに対する相対パスでなければなりません。
既存のタブにサブタブを表示するコントロールを追加するには、前の手順と同じスタンザを作成し、次の値を指定します。
Admin-Console-Book-Label
は、子ページにサブタブを表示する管理コンソール・ブック・コントロールのdefinitionLabel。
book-URI
は、サブタブのページ・コントロールを定義する.book
ファイルのパスとファイル名。パスは、ポータルWebアプリケーションのルートに対する相対パスでなければなりません。
コード・リスト6-8は、タブをWebLogic Serverの「ドメイン」タブに、サブタブを「ドメイン:構成」タブに、ポートレットをコンソールのデスクトップに追加するnetuix-extension.xml
ファイルです。
例6-8 netuix-extension.xmlファイルのサンプル
<?xml version="1.0" encoding="UTF-8"?> <weblogic-portal-extension xmlns="http://www.bea.com/servers/portal/weblogic-portal/8.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.bea.com/servers/portal/weblogic-portal/ 8.0 netuix-extension-1_0_0.xsd"> <provider-info> <title>My Extension</title> <version>1.0</version> <description>Inserts a portlet on the desktop, a tab next to Domains:Configuration, and a subtab under Domains: Configuration. </description> <author>Me</author> <last-modified>02/03/2005</last-modified> <support-url>http://www.mycompany/support/index.jsp</support-url> </provider-info> <portal-file>/console.portal</portal-file> <!--Adds a tab to the Domain tabs --> <book-extension> <book-location> <parent-label-location label="CoreDomainConfigGeneralBook"/> <book-insertion-point action="append"/> </book-location> <book-content content-uri="/controls/page.book"/> </book-extension> <!-- Adds a subtab to the Domain: Configuration tab--> <book-extension> <book-location> <parent-label-location label="DomainconfigTabPage"/> <book-insertion-point action="append"/> </book-location> <page-content content-uri="/controls/notespage.book"/> </book-extension> <!--Adds a portlet to the console desktop --> <page-extension> <page-location> <parent-label-location label="page"/> <page-insertion-point layout-location="0" placeholder-position="0"/> </page-location> <portlet-content content-uri="/portlets/desktop/desktop_view.portlet" title="My App Status" orientation="top" default-minimized="false" instance-label="PortletExtensionInstanceLabel" /> </page-extension> </weblogic-portal-extension>
ドメイン構造ポートレット(NavTreePortlet)には、管理コンソールのコンテンツに移動するために使用できるツリー・コントロールが含まれています。ツリー内の各ノードはUIページ・コントロールへのリンクです。ノードにはサブノードを含めることができます。
拡張では、ツリー内の任意の場所に単一のノードを追加できます。他のノード(ノード・ツリー)含むノードを任意の場所に追加することもできます。たとえば、既存のナビゲーション・ツリーのルートにノードまたはノード・ツリーを追加できます。また、「環境」ノードにノードまたはノード・ツリーを追加できます。(図6-2を参照してください)。
以下の節では、NavTreePortletへのノードの追加について説明します。
ページ・コントロールの1つにリンクするノードを追加するには、コントロールの.book
ファイル内のnetuix:page
要素に、次の属性と属性値を追加します。
backingFile="com.bea.console.utils.NavTreeExtensionBacking"
たとえば、作成したページへのリンクを追加する場合、そのページを定義する.book
ファイルにbackingFile
属性を追加します。
<netuix:page definitionLabel="MyAppTableBook" title="My Page" markupName="page" markupType="Page" backingFile="com.bea.console.utils.NavTreeExtensionBacking" >
NavTreePortletにより、そのページ要素のtitle
属性の値がリンク・テキストとして表示されます。図6-3を参照してください。
title
属性の値をメッセージ・バンドルのキーにした場合は、そのキーにマッピングされたローカライズ済みの値が表示されます。メッセージ・バンドル名は、ページ構成にメタデータを追加することによって指定します。<netuix:meta>
要素を<netuix:page>
の子として追加します。例:
<netuix:page definitionLabel="MyAppTableBook" title="My Page"> <netuix:meta name="skeleton-resource-bundle" content="3rdbundlename" /> ... </netuix:page>
NavTreePortletに追加するノードの位置を制御する場合や、ノード・ツリーを追加する場合は、独自のNavTreeExtensionBacking
バッキング・クラスを実装します。
以下の節では、ノードまたはノード・ツリーの追加または挿入について説明します。
NavTreeBacking
クラスを作成するには、(コード・リスト6-9を参照)。
com.bea.console.utils.NavTreeExtensionBacking
を拡張します。
このクラスは、あらかじめWebLogic Server実行時環境で利用できる状態になっています。ただし、開発とコンパイルの環境をサポートするためには、以下のJARを環境のクラス・パスに追加する必要があります。
WL_HOME
/server/lib/consoleapp/webapp/WEB-INF/lib/console.jar
WL_HOME
/server/lib/consoleapp/webapp/WEB-INF/lib/netuix_servlet.jar
WL_HOME
は、WebLogic Serverのインストール先ディレクトリです。
NavTreeExtensionBacking.getTreeExtension(
PageBackingContext ppCtx, String extensionUrl, HttpServletRequest request)
メソッドをオーバーライドします。
このメソッドの実装で以下を行います。
親ノードのcom.bea.jsptools.tree.TreeNode
オブジェクトを作成します。
次のコンストラクタを使用します。
TreeNode(String nodeId, String nodeName, String nodeUrl)
説明:
nodeId
は、コントロールのdefinitionLabel
の値です。PageBackingContext.getDefinitionLabel()
を使用してこの値を取得できます。かわりに、コントロールの.book
ファイル内のdefinitionLabel
の値を入力することもできます。
nodeName
は、NavTreePortletに表示するテキストです。テキストを含むString
オブジェクトを作成できます。または、PageBackingContext.getTitle()
を使用して、ページの.book
ファイルからこの値を取得できます。
nodeURL
は、そのコントロールのURLです。このパラメータの値としてextensionUrl
を指定します。
ノードのツリーを追加する場合は、別のTreeNode
オブジェクトを親TreeNode
の子として作成します。
各子ノードで、次のコンストラクタを使用します。
TreeNode(String nodeId, String nodeName, String nodeUrl, TreeNode parent)
説明:
nodeId
は、コントロールのdefinitionLabel
の値です。PageBackingContext.getDefinitionLabel()を使用してこの値を取得することはできません
。これは、このメソッドで使用できるPageBackingContext
が親ノード用であるためです。かわりに、コントロールの.book
ファイル内のdefinitionLabel
の値を入力する必要があります。
nodeName
は、NavTreePortletに表示するテキストです。
nodeURL
は、そのコントロールのURLです。次の値を指定します。
/console/console.portal?_nfpb=true&_pageLabel=definitionLabel
definitionLabel
はリンク先のページのdefinitionLabel
です。
parent
には、作成したTreeNode
のいずれかを指定します。ノード・ツリーに複数のレベルを作成するには、階層内でより上位にあるノードの子を親として指定します。
親TreeNode
オブジェクトをcom.bea.console.utils.NavTreeExtensionEvent
のコンストラクタに渡します。
次のコンストラクタを使用します。
NavTreeExtensionEvent(String pageLabel, String url, String parentPath, TreeNode node, int ACTION)
説明:
pageLabel
は、親ノードのTreeNode
オブジェクトを作成したときに使用したnodeID
と同じ値です。
url
は、親ノードのTreeNode
オブジェクトを作成したときに使用したnodeURL
と同じ値です。
parentPath
は、ノードに表示するノードの名前です。NavTreePortletのナビゲーション・ツリーのルートを表すには/
(スラッシュ)を使用します。
たとえば、ノードまたはノード・ツリーを最上位に表示する場合は/
を指定します。ノードを環境の子として表示する場合は、/Environments
を指定します。
node
手順aで作成した親TreeNodeです。
ACTION
は、NavTreeExtensionEvent.APPEND_ACTION
です。使用できるその他のアクションについては、WebLogic Server管理コンソールAPIリファレンスの「NavTreeExtensionEvent」を参照してください。
作成したNavTreeExtensionEvent
オブジェクトを返します。
コンパイルしたクラスを、拡張のWEB-INF/classes
ディレクトリ内のパッケージ構造に保存します。
例6-9 NavTreeExtensionBackingクラスのサンプル
package com.mycompany.consoleext; import com.bea.netuix.servlets.controls.page.PageBackingContext; import com.bea.jsptools.tree.TreeNode; import com.bea.console.utils.NavTreeExtensionBacking; import com.bea.console.utils.NavTreeExtensionEvent; public class CustomNavTreeExtension extends NavTreeExtensionBacking { public NavTreeExtensionEvent getTreeExtension(PageBackingContext ppCtx, String extensionUrl){ /* * Construct a TreeNode for the control that has invoked this method. */ TreeNode node = new TreeNode(ppCtx.getDefinitionLabel(), ppCtx.getTitle(),extensionUrl); /* * Construct a child TreeNode. */ TreeNode node1 = new TreeNode("MyAppGeneralTabPage", "MyApp General", "/console/console.portal?_nfpb=true&_pageLabel=MyAppGeneralTabPage", node); /* * Add the parent node (which includes its child) below the * Environment node in the NavTreePortlet. */ NavTreeExtensionEvent evt = new NavTreeExtensionEvent(ppCtx.getDefinitionLabel(),extensionUrl, "/Environment",node); return evt; } }
NavTreeBackingクラスを呼び出して、「例: NavTreeExtensionBackingClassによるNavTreePortletへのノード・ツリーの追加方法」に示すプロセスを開始する手順:
親ノードとして追加するUIページ・コントロールを決定します。
NavTreePortletにノードとして追加できるのはページ・コントロールのみです。
コントロールの.book
ファイルにあるnetuix:page
要素に、次の属性と属性値を追加します。
backingFile="your-NavTreeBacking-class"
your-NavTreeBacking-class
は、手順1で作成したクラスの完全修飾名です。
以下の例では、NavTreeExtensionBacking
クラスにおいて、図6-4に示したノード・ツリーを追加する方法について説明します。
ポータル・フレームワークは拡張をロードすると、拡張の.book
ファイルを解析してnetuix:page
要素を検索します。
例:
<netuix:page definitionLabel="MyAppTablePage" title="My App" markupName="page" markupType="Page" backingFile="com.mycompany.utils.MyNavTreeExtension" >
ポータル・フレームワークはcom.bea.netuix.servlets.controls.page.PageBackingContext
オブジェクトをインスタンス化しますが、これはページUIコントロールのインメモリー表現です。オブジェクトには、ページ・コントロールのtitle
やdefinitionLabel
について記述したプロパティが含まれています。
ポータル・フレームワークはnetuix:page
要素内のbackingFile
属性を見つけると、指定されたクラス(MyNavTreeExtension
)を初期化し、ページのPageBackingContext
オブジェクトに渡してクラスを作成します。ページ・コントロールのURIを含むString
オブジェクトも渡します。
MyNavTreeExtension
クラスは、次のことを行います。
PageBackingContext
オブジェクトからtitle
とdefinitionLabel
の値を取得します。
com.bea.jsptools.tree.TreeNode
オブジェクトを作成して、ページ・コントロールのURIと一緒にtitle
とdefinitionLabel
の値をコンストラクタに渡します。
「Monitor EJBs」および「Log Messages」というタイトルの2つのページ用に、さらに2つのTreeNode
オブジェクトを作成します。
この2つのページのPageBackingContext
オブジェクトまたはURIを取得する方法はないため、値をMyNavTreeExtension
クラス内にハード・コード化する必要があります。
ページを「My App」ページ・ノードの子ノードにするため、MyNavTreeExtension
クラスは、親ノードの名前を受け取るTreeNode
コンストラクタのフォームを使用します。例:
TreeNode childnode1 = new TreeNode("MyAppMonitorEJB", "Monitor EJBs", "/console/console.portal?_nfpb=true&_pageLabel=MyAppMonitorEJB", node);
com.bea.console.utils.NavTreeExtensionEvent
オブジェクトを作成して返します。
NavTreeExtensionEvent
オブジェクトには、作成したTreeNode
オブジェクトが記述されており、ノード・ツリーを追加する既存のナビゲーション・ツリー内の位置が示されています。
NavTreePortletはNavTreeExtensionEvent
オブジェクトをリスニングします。ポートレットはツリーを初期化した後、ブロードキャストされるNavTreeExtensionEvent
オブジェクトで指定されているとおりにノードを追加します。
カスタム・セキュリティ・プロバイダを作成し、プロバイダを管理するMBeanをWebLogic MBeanMakerを使用して作成した場合、管理コンソールではそのプロバイダの構成データを表示するページが自動的に生成されます。また、「セキュリティ:プロバイダ」表からそのプロバイダ・ページへのリンクも生成されます。
しかし、独自のページを作成してこの表示をカスタマイズすることもできます。独自のページを作成した場合は、「セキュリティ: プロバイダ」表内のリンク先を、管理コンソールによって自動生成されたページからカスタム・ページに変更する必要があります。
リンク先を変更するには、作成したページの<netuix:page>
要素の子として次の要素を含めます。
<netuix:meta type="configuration" content="MBean-class-name"/>
MBean-class-name
作成したプロバイダのMBeanクラスの完全修飾名です。
例:
<netuix:page markupName="page" markupType="Page" definitionLabel="SimpleSampleAuthorizerAuthorizerConfigCommonTabPage" title="tab.common.label" skeletonUri="/framework/skeletons/default/wlsworkspace /page_content.jsp"> <netuix:meta name="configuration" content="examples.security.providers.authorization.simple. SimpleSampleAuthorizerMBean"/> <netuix:content> ...