管理コンソールでは、すべてのコンテンツがポートレット内に格納されるため、拡張を最低限にする場合でもポートレット(およびポートレットのコンテンツ)を定義しなければならない場合がほとんどです。ポートレットをデスクトップに直接追加することもできますが、ポートレットを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ファイルの詳細は、ポータル・サポート・スキーマ・リファレンスのエントリを参照してください。
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のユーザー・ガイド(http://struts.apache.org/)を参照してください。
たとえば、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>
...