|
Administration Console では、すべてのコンテンツがポートレット内に格納されるため、拡張を最低限にする場合でもポートレット (およびポートレットのコンテンツ) を定義しなければならない場合がほとんどです。ポートレットをデスクトップに直接追加することもできますが、ポートレットを ContentBook 内のタブやサブタブとして表示する場合は、それを格納するブックまたはページを定義する必要があります。拡張で NavTreePortlet にノードを追加することもできます。そうすることで、追加したポートレットに、ユーザがデスクトップから直接移動できるようになります。
この節では、ポートレット、UI コントロール、および NavTreePortlet ノードを Administration Console に追加する方法について説明します。
図 6-1 にこのプロセスを示します。プロセスの手順、および各手順の結果については、表 6-1 を参照してください。以下の節では、各手順について詳しく説明します。

ポートレットは XML ファイルで定義します。ポートレットの定義には、ロードするデータの種類 (JSP、Struts Action、または Beehive ページ フロー) についての指示が含まれます。以下の節では、ポートレットを定義する方法について説明します。
ポートレット XML ファイルの詳細については、『Portal Support Schema Reference』の portlet エントリを参照してください。
JSP をロードするポートレットを定義するには、次の手順に従います。
root-dir/portlets に新しいテキスト ファイルを作成し、コード リスト 6-1 のコードをコピーして貼り付けます (「拡張のディレクトリ ツリーの作成」を参照)。
次の命名規約を使用することをお勧めします。content-name.portlet
content-name は、ポートレットに格納する JSP ファイルの名前です。たとえば、ポートレットに monitorEJB.jsp という名前の JSP ファイルを格納する場合は、ポートレット XML ファイルの名前を monitorEJB.portlet にします。
Label。ポータル フレームワークでこのポートレットを特定するためのユニークな識別子に変更します。Title。タイトル バーが表示される場合にこのポートレットが表示するデフォルトのタイトルを指定します。「ポートレットのタイトル バーの表示」を参照してください。URI。ポートレットに格納する JSP の絶対パスとファイル名に変更します。絶対パスは、拡張のルートから始めます。
次に例を示します。/ext_jsp/monitorEJB.JSP
<?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 の名前です。
Label。ポータル フレームワークでこのポートレットを特定するためのユニークな識別子に変更します。Title。タイトル バーが表示される場合にこのポートレットが表示するデフォルトのタイトルを指定します。「ポートレットのタイトル バーの表示」を参照してください。Struts-module。Struts Action を定義する Struts モジュールを指定します。
独自の Struts モジュールを作成して、Administration Console の拡張を使用する 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 に転送されます。
<?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-path
action=""refresh-action-path
refreshAction=""/></netuix:portlet>
</portal:root>
Beehive ページ フローをロードするポートレットを定義するには、次の手順に従います。
root-dir/portlets に新しいテキスト ファイルを作成し、コード リスト 6-3 のコードをコピーして貼り付けます (「拡張のディレクトリ ツリーの作成」を参照)。
次の命名規約を使用することをお勧めします。pageFlow-name.portlet
pageFlow-name はポートレットがロードする (ポートレットの転送先となる) ページ フローの名前です。たとえば、ポートレットが myPageFlow.jpf というページ フローに転送される場合は、ポートレット XML ファイルの名前を myPageFlow.portlet にします。
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 ファイルの絶対パスとファイル名を指定します。 <?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>
ポートレットを Administration Console のデスクトップ上 (「page」ページのプレースホルダ内) に配置する場合は、タイトル バーを表示するようにポートレットをコンフィグレーションします。ポートレットを ContentBook に置く場合は、タイトル バーは表示しません。
.portlet XML ファイルで、netuix:portlet 要素の title 属性の値を指定します。ローカライズされた値を表示するには、「ポートレット タイトルのローカライズ」を参照してください。netuix:portlet 要素の子要素として以下の要素を指定します。
ポートレットを最小化および最大化できるようにするには、空の <netuix:titlebar/> 要素の代わりに以下のスタンザを指定します。
<netuix:titlebar> <netuix:minimize/> <netuix:maximize/>
</netuix:titlebar>
コード リスト 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> 要素内に以下の属性を指定します。
バッキング クラスは、ポータル フレームワーク API と直接対話する Java クラスです。ローカライズされたポートレット タイトルを取得するバッキング クラスを作成するには、次の手順に従います。
com.bea.netuix.servlets.controls.content.backing.AbstractJspBackingAbstractJspBacking.preRender(HttpServletRequest request, HttpServletResponse response) メソッドを実装します。
『WebLogic Portal API Reference』の「AbstractJspBacking.preRender()」を参照してください。
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 はメッセージ バンドルから取得した値です。
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) {
// 現在のポートレットの PortletBackingContext を取得する。
// PortletBackingContext には、現在のポートレットの
// プロパティとメソッドが含まれている
PortletBackingContext bctx =
PortletBackingContext.getPortletBackingContext(req); if (bctx != null) {
// タイトルにピリオドがない場合は、preLocalized と想定するか、
// キーのフォーマットに従う
if (bctx.getTitle().indexOf(".")!=-1){
// HTTPServletRequest からロケールを取得する
Locale locale = (Locale) req.getSession().getAttribute(
"org.apache.struts.action.LOCALE");
// 「medrecMBean」というメッセージ バンドルを見つける
MessageResources messages =
MessageResources.getMessageResources("medrecMBean");
// ポートレットの「title」プロパティの値を取得する
String msg = messages.getMessage(locale, bctx.getTitle());
// 「title」プロパティの値をローカライズされた値で
// リセットする
bctx.setTitle(msg);
}
}
return true;
}
}
Administration Console にタブまたはサブタブを追加する場合は、既存の階層に適合するブックまたはページ UI を定義する必要があります。
ブックおよびページの定義を、1 つまたは複数のポータル ブック (.book) ファイルに保存します。コントロールの階層グループごとに 1 つの .book ファイルを作成します。たとえば、最上位のタブとそのサブタブを作成するブック用に 1 つの .book ファイルを作成します。また、既存の WebLogic Server タブにサブタブを追加するページ用にも別の .book ファイルを作成します。.book ファイルのルート要素 (portal:root) には、直接の子要素を 1 つのみ持たせることができます。その子要素には、複数の子を持たせることができます。
サブタブのないタブ ([ドメイン : メモ] など) を定義するポータル ブック (.book) XML ファイルを作成するには、次の手順に従います。
たとえば、root-dir/controls//MyApp.book というファイルを作成します。root-dir は開発用のディレクトリです。詳細については、「開発環境の設定」を参照してください。
Page-Label。ポータル フレームワークおよび WebLogic Server JSP タグが、ページへのリクエストの転送に使用するユニークな識別子に変更します。 Page-Title。ユーザに対して表示するタブの名前、または作成したメッセージ バンドルのキーに変更します。
指定する値に「.」(ピリオド) が含まれている場合、Administration Console はこの値がキーであると想定し、メッセージ バンドルから値を検索しようとします。たとえば、My.Tab と指定すると、Administration Console は My.Tab というキーを持つプロパティの値を検索します。そのような値が見つからない場合は、タブ名として null と表示します。値として My Tab を指定すると、Administration Console は My Tab と表示します。
Bundle。作成したメッセージ バンドルの名前に変更します。netuix:page 要素の title 属性の値に「.」が含まれている場合にのみ、このバンドルが使用されます。「JSP でのメッセージ バンドルの作成と使用」を参照してください。Portlet-Instance-Label。ポータル フレームワークおよび WebLogic Server JSP タグが、ポートレット インスタンスへのリクエストの転送に使用するユニークな識別子に変更します。 Portlet-URI。作成したポートレット ファイルのパスとファイル名に変更します (「ポートレットの定義」を参照)。パスは、ポータル Web アプリケーションのルートに対する相対パスでなければなりません。
コード リスト 6-6 では、ブックではなくページを定義している点に留意します。こうすることで、Administration Console のルック アンド フィールによって、ページがサブタブのないタブとして表示されます。
<?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 ファイルを作成するには、次の手順に従います。
root-dir の下にあるディレクトリに保存します。
たとえば、root-dir/controls//MyApp.book というファイルを作成します。root-dir は開発用のディレクトリです。詳細については、「開発環境の設定」を参照してください。
Book-Label。ポータル フレームワークおよび WebLogic Server JSP タグがブックへのリクエストの転送に使用する、ユニークな識別子に変更します。これは、WebLogic Server の UI コントロールの多くに使用されているのと同じ種類のラベルです。「Administration Console の拡張ポイント」を参照してください。Book-Title。ユーザに対して表示するタブの名前、または作成したメッセージ バンドルのキーに変更します。
指定する値に「.」(ピリオド) が含まれている場合、Administration Console はこの値がキーであると想定し、メッセージ バンドルから値を検索しようとします。たとえば、My.Tab と指定すると、Administration Console は My.Tab というキーを持つプロパティの値を検索します。そのような値が見つからない場合は、タブ名として null と表示します。値として My Tab を指定すると、Administration Console は My Tab と表示します。
Bundle。作成したメッセージ バンドルの名前に変更します。netuix:book 要素の title 属性の値に「.」が含まれている場合にのみ、このバンドルが使用されます。「JSP でのメッセージ バンドルの作成と使用」を参照してください。Page-Label。ポータル フレームワークおよび WebLogic Server JSP タグが、ページへのリクエストの転送に使用するユニークな識別子に変更します。 Page-Title。ユーザに対して表示するサブタブの名前、または作成したメッセージ バンドルのキーに変更します。
指定する値に「.」(ピリオド) が含まれている場合、Administration Console はこの値がキーであると想定し、メッセージ バンドルから値を検索しようとします。
Metadata-Type および Metadata-ID。Administration Console の <wl:column-dispatch> JSP タグを使用してこのページへのハイパーテキスト リンクを作成する場合は、<netuix:meta> 要素を含めて Metadata-Type および Metadata-ID の値を指定します。「他のページに移動するためのテーブル カラムの作成」を参照してください。Portlet-Instance-Label。ポータル フレームワークおよび WebLogic Server JSP タグが、ポートレット インスタンスへのリクエストの転送に使用するユニークな識別子に変更します。 Portlet-URI。作成したポートレット ファイルのパスとファイル名に変更します (「ポートレットの定義」を参照)。パスは、ポータル Web アプリケーションのルートに対する相対パスでなければなりません。netuix:page 要素の兄弟として別の netuix:page 要素を追加します。
ポータル ブック XML ファイルの詳細については、『Portal Support Schema Reference』を参照してください。
この .book ファイルでは、以下の要素も使用しています。
netuix:singleLevelMenu は、ブック内の各ページに 1 つのサブタブを表示します。コード リスト 6-7 では、ブックの親 UI コントロールが WebLogic Server によって提供されることが前提になっていますが、これがブックの最上位のタブを生成する役割を果たします。netuix:meta name="breadcrumb-context" content="handle" は、ユーザがページを訪問した後に、訪問したページの履歴 (階層リンク) にそのページのタイトルを追加します。階層リンクは、ContentBook の上位のデスクトップに表示されます。<?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 タブに追加できるサブタブを作成するには、次の手順に従います。
.book ファイルを作成します。コード リスト 6-6 を参照してください。netuix-extension.xml ファイルで、サブタブを含める WebLogic Server ブック UI コントロールを指定します。「ContentBook へのタブまたはサブタブの追加」を参照してください。
ContentBook 内のブックやページは、必ずしもタブやサブタブでアクセスできるようにする必要はありません。要約テーブルを表示する多くの WebLogic Server ページは、NavTreePortlet からアクセスすることはできますが、タブ付きインタフェースからはアクセスできません (図 2-5 を参照)。
これまでの節のすべてのコード リストは、子にアクセスするためのタブやサブタブを表示しない親コントロール内にも挿入できます。「ポートレットや UI コントロールの表示位置の指定」を参照してください。
ポートレットや UI コントロールを表示するすべての位置は、Administration Console 内の既存のコントロールに対する相対パスで指定する必要があります。たとえば、作成したポートレットが [システム状態] ポートレットの下のデスクトップに表示されるように指定できます。
ポートレットまたは UI コントロールの表示位置を指定するには、次の手順に従います。
netuix-extension.xml という名前の XML ファイルを作成し、次のディレクトリに保存します。root-dir/WEB-INF root-dir は開発用のディレクトリです。詳細については、「開発環境の設定」を参照してください。
NetUI 拡張 XML ファイル (netuix-extension.xml) は、拡張のデプロイメント記述子です。拡張の各親 UI コントロールと表示位置を宣言しています (コード リスト 6-8 を参照)。詳細については、『NetUI Extensions Schema Reference』を参照してください。
<weblogic-portal-extension> ルート要素を作成します。<provider-info> 要素を作成します。
この要素は、あくまで拡張の内容を説明するためのものです。ポータル フレームワークでこの要素内のデータが使用されることはありません。
<portal-file>/console.portal</portal-file>
この必須要素では、Administration Console の .portal ファイル (現在拡張しているポータル) の名前と相対位置を指定します。
ポートレットを Administration Console デスクトップに追加するには、netuix-extension.xml ファイル内に以下のスタンザを作成します (コード リスト 6-8 を参照)。
<page-extension>layout
<page-location>
<parent-label-location label="page"/>
<page-insertion-point layout-location=""portlet-URI
placeholder-position="0"/>
</page-location>
<portlet-content
content-uri="" title="title"portlet-instance-label
orientation="top" default-minimized="false"
instance-label=""/>
</page-extension>
タブを表示するコントロールを追加するには、netuix-extension.xml ファイル内に以下のスタンザを作成します (コード リスト 6-8 を参照)。
<book-extension> Admin-Console-Book-Label
<book-location>
<parent-label-location label=""/>book-URI
<book-insertion-point action="append"/>
</book-location>
<book-content content-uri=""/>
</book-extension>
既存のタブにサブタブを表示するコントロールを追加するには、前の手順と同じスタンザを作成し、次の値を指定します。
コード リスト 6-8 は、タブを WebLogic Server の [ドメイン] タブに、サブタブを [ドメイン : コンフィグレーション] タブに、ポートレットをコンソールのデスクトップに追加する 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>
<!-- [ドメイン] タブにタブを追加する -->
<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>
<!-- [ドメイン : コンフィグレーション] タブにサブタブを追加する -->
<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>
<!-- コンソールのデスクトップにポートレットを追加する -->
<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) には、Administration Console のコンテンツに移動するために使用できるツリー コントロールが含まれています。ツリー内の各ノードは 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:page>
<netuix:meta name=”skeleton-resource-bundle” content=”3rdbundlename” />
...

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 Administration Console API Reference』の「NavTreeExtensionEvent」を参照してください。
NavTreeExtensionEvent オブジェクトを返します。WEB-INF/classes ディレクトリ内のパッケージ構造に保存します。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){
/*
* このメソッドを呼び出したコントロールの TreeNode を作成する
*/
TreeNode node = new TreeNode(ppCtx.getDefinitionLabel(),
ppCtx.getTitle(),extensionUrl);
/*
* 子 TreeNode を作成する
*/
TreeNode node1 = new TreeNode("MyAppGeneralTabPage",
"MyApp General",
"/console/console.portal?_nfpb=true&_pageLabel=MyAppGeneralTabPage",
node);
/*
* 親ノード (その子ノードを含む) を NavTreePortlet の
* Environment ノードの下に追加する
*/
NavTreeExtensionEvent evt =
new NavTreeExtensionEvent(ppCtx.getDefinitionLabel(),extensionUrl,
"/Environment",node);
return evt;
}
}
NavTreeBacking クラスを呼び出して、「例 : NavTreeExtensionBacking クラスによる NavTreePortlet へのノード ツリーの追加方法」に示すプロセスを開始するには、次の手順に従います。
以下の例では、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 の値をコンストラクタに渡します。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 オブジェクトが記述されており、ノード ツリーを追加する既存のナビゲーション ツリー内の位置が示されています。
NavTreeExtensionEvent オブジェクトをリスンします。ポートレットはツリーを初期化した後、ブロードキャストされる NavTreeExtensionEvent オブジェクトで指定されているとおりにノードを追加します。
カスタム セキュリティ プロバイダを作成し、プロバイダを管理する MBean を WebLogic MBeanMaker を使用して作成した場合、Administration Console ではそのプロバイダのコンフィグレーション データを表示するページが自動的に生成されます。また、[セキュリティ : プロバイダ] テーブルからそのプロバイダ ページへのリンクも生成されます。
しかし、独自のページを作成してこの表示をカスタマイズすることもできます。独自のページを作成した場合は、[セキュリティ : プロバイダ] テーブルからのリンク先を、Administration Console によって自動生成されたページからカスタム ページに変更する必要があります。
リンク先を変更するには、作成したページの <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>
...
|