PDK-Java による Web...

Preview:

Citation preview

PDK-Java によるWeb ポートレット 開発ガイド

Creation Date: Apr. 19, 2001Last Update: Nov. 16, 2001Version: 1.1

4

Agenda

Oracle9iAS Portal とポートレットOracle9iAS Portal アーキテクチャWeb ポートレットと PDK-JavaPDK-Java アーキテクチャWeb ポートレットの実装例キャッシュの利用

スケーラブルな構成

5

Oracle9iAS Portal

1つのポータル・ページから、イントラネット/インターネット上の様々なアプリケーションや

サービスにアクセス

EIP (Enterprise Information Portal) を簡単に構築可能

Oracle9iASの1コンポーネント

6

WebDB から Oracle9iAS Portal へ

機能WebDB

R2.x

セルフ・サービスパブリッシング

WebDB サイト

DBアプリケーションの構築

コンポーネント

PortalR3.x

コンテンツ領域

アプリケーション

パーソナライズされたポータル

NewN/A

7

ポートレット

ポータル・ページを構成するコンポーネント– Web サイト / Webアプリケーションへのアクセスの一元化

– コンテンツのパブリッシング

– 動的データ・サービスの統合

ポートレットの2つのタイプ– 組込みポートレット

– カスタム・ポートレット

8

ポートレット・プロバイダ

1つ以上のポートレットを管理するコンテナプロバイダを Portal に登録すると、ポートレットが利用可能に

Portal は、プロバイダを介してポートレットと通信

プロバイダ

ポートレット

ポートレット

Oracle9iASPortal

9

組込みポートレット (1)

Portal アプリケーション・ポートレット– フォーム、レポート、チャートなどの Portal アプリケーションを、ポートレットとして公開可能

10

組込みポートレット (2)

Portal コンテンツ領域ポートレット– コンテンツ領域のフォルダに含まれるコンテンツやリンクを、ポートレットとして公開可能

11

カスタム・ポートレット

データベース・ポートレット

– ストアド・プロシージャとして実装

– PL/SQL (または Java)– Portal ノード (DB) 上で動作

Web ポートレット– SOAP / HTTP を用いて Portal と通信– 任意のノードで動作させることが可能

– 任意の言語で実装できる

– PDK-Java を利用すれば、実装が簡単

12

ポートレットのモード (1)

表示モード (共有スクリーン・モード)– Portal ページの一部として表示されるコンテンツ詳細モード (全画面モード)– ポートレットのタイトルのリンクからアクセス

ヘルプ・モード

– 「ヘルプ」リンク

情報モード– 「情報」リンク

詳細モード ヘルプ・モード 情報モード編集モード

13

ポートレットのモード (2)

編集モード

– 「カスタマイズ」リンク

デフォルト編集モード– 「ページのカスタマイズ」 → 「デフォルトの編集」

– ページ管理者のみアクセス可能

14

ポートレットのモード (3)

プレビュー・モード

– 「ポートレットの追加」ダイアログで表示される

– ページ編集権限を持つユーザのみアクセス可能

15

Agenda

Oracle9iAS Portal とポートレットOracle9iAS Portal アーキテクチャWeb ポートレットと PDK-JavaPDK-Java アーキテクチャWeb ポートレットの実装例キャッシュの利用

スケーラブルな構成

16

Oracle9iAS Portal アーキテクチャ

HTTP Net8ModPL/SQL

ModJserv

ParallelPage

Engine(s)

OracleHTTPServer

ModPL/SQL

ModJserv

ParallelPage

Engine(s)

OracleHTTPServer

Oracle H

TTP Server

mod_plsql

mod_ jserv

ParallelPage

Engine

Portal リポジトリ

Portal ノード

組込みプロバイダ

DBLink

Oracle DB

HTTP

Web サイト/ サービス

LoginServer OID

LDAPV3

Net8

PortalCache

HTTP

HTTPSOAP XML

データ・ソース

HTTP

カスタムWeb プロバイダ

カスタム DB プロバイダブラウザ

Web サイト/ サービス 任意の

プロトコル

17

Portal ノード

Oracle8i DatabasePortal の PL/SQL パッケージおよびデータ

Portalリポジトリ (次ページ参照)組込み / DB ポートレットのストアド・プロシージャ

分散構成をとることも可能– 複数の Portal ノードで、負荷を分散

Portal リポジトリ

Portal ノード

組込みプロバイダ

カスタム DB プロバイダ

18

Portal リポジトリ

メタ・データ、ユーザ・データ、関連プロシージャを格納– Portal ページ、スタイルの定義– パーソナライズ・データ

– コンテンツ領域、Portal アプリケーションの定義

– アクセス・コントロール

– Portal へのアクセス・ログ– …

Portal リポジトリ

Portal ノード

組込みプロバイダ

カスタム DB プロバイダ

19

Portal Middle Tier

Oracle9i Application Server次のコンポーネントを利用– Oracle HTTP Server

mod_plsqlmod_jserv

– Apache JServParallel Page Engine

– Portal Cache(PL/SQLキャッシュ)

– Oracle9iAS Single Sign-On

Oracle H

TTP Server

mod_plsql

mod_ jserv

ParallelPage

Engine

PortalCache

20

Parallel Page Engine

ステートレス ServletApache JServ 上で動作複数のポートレットとの通信を、並行して行う– Portal ノードの負荷を軽減

容易に、スケール・アウトが可能– 複数の Oracle9iAS ノード

Oracle H

TTP Server

mod_plsql

mod_ jserv

ParallelPage

Engine

PortalCache

21

リクエスト・フロー

HTTPNet8

ModPL/SQL

ModJserv

ParallelPage

Engine(s)

OracleHTTPServer

ModPL/SQL

ModJserv

ParallelPage

Engine(s)

OracleHTTPServer

Oracle H

TTP Server

mod_plsql

mod_ jserv

ParallelPage

Engine

Portal リポジトリ

Portal ノード

組込みプロバイダ

DBLink

Oracle DB

HTTP

Web サイト/ サービス

LoginServer OID

LDAPV3

Net8

PortalCache

HTTP

HTTPSOAP XML

データ・ソース

HTTP

カスタムWeb プロバイダ

カスタム DB プロバイダブラウザ

Web サイト/ サービス 任意の

プロトコル

12

4 3

33

22

リクエスト・フロー

1. ブラウザからのページ・リクエストを受信2. Portal リポジトリから、ページ定義を取得

– ページに含まれるポートレットの情報

– ページのレイアウト (HTML スケルトン)– 有効なキャッシュがある場合は、それを利用

3. すべてのポートレットに、並行してリクエスト– DB ポートレットは、PL/SQLプロシージャ・コール

(mod_plsql を経由する HTTP リクエスト)– Web ポートレットは、リモートのWeb サーバへの

HTTP リクエスト (PDK-Javaでは Servlet をコール)– 有効なキャッシュがある場合は、それを利用

23

リクエスト・フロー

4. Portal ページ (HTML) の生成– ページ・レイアウトに、各ポートレットのコンテンツを組み込む

5. ブラウザに、ページを送信

24

Portal Cache

ファイル・ベースのキャッシュ– mod_plsql の PL/SQL キャッシュ– Web Cache、Database Cache とは別のレベルのキャッシュ機能

キャッシュの対象

– ページ定義

– ポートレット・コンテンツ

– Portal ページ

Oracle H

TTP Server

mod_plsql

mod_ jserv

ParallelPage

Engine

PortalCache

25

Portal Cache

キャッシュ・エントリの失効化

– 妥当性ベース

バージョン ID を用いて、キャッシュが有効かどうか、毎回確認

"ETag" HTTP ヘッダを利用– 期限ベース

有効期限内は、無条件で使用

"Expires" HTTP ヘッダを利用

Oracle H

TTP Server

mod_plsql

mod_ jserv

ParallelPage

Engine

PortalCache

26

Portal Cache

キャッシュ・レベル

– システム・レベル

キャッシュ・エントリを、全ユーザで共有

– ユーザ・レベル

ユーザごとに、個別のキャッシュ・エントリ

Oracle H

TTP Server

mod_plsql

mod_ jserv

ParallelPage

Engine

PortalCache

27

Oracle9iAS Single Sign-On(Login Server)

Oracle9iAS のコンポーネントCookie を利用して、Web シングル・サインオンを実現

次のコンポーネントからなる– Oracle8i Database

PL/SQLパッケージおよびデータ (表)ユーザ名/パスワードを格納

– Oracle9iASmod_plsql

LoginServer OID

LDAPV3

28

Oracle9iAS Single Sign-On(Login Server) –対象アプリケーションパートナ・アプリケーション– Login Serverの認証機能を利用して、認証を行う– SSO SDK を利用して開発– Portal も 1 パートナ・アプリケーション外部アプリケーション– 独自の認証機能を持つ (既存のWeb アプリケーションなど)

– Login Server 側に、外部アプリケーションのユーザ名/ パスワードを格納

– HTML フォームでログインするアプリケーションをサポート (BASIC 認証もサポート予定)

29

Oracle9iAS Single Sign-On(Login Server)

LDAP サーバ Oracle Internet Directory (OID) との連携が可能– LDAPエントリのユーザ名/パスワードを利用

他のユーザ・リポジトリやSSO サーバとも連携可能

– 連携モジュールを作成

LoginServer OID

LDAPV3

30

Agenda

Oracle9iAS Portal とポートレットOracle9iAS Portal アーキテクチャWeb ポートレットと PDK-JavaPDK-Java アーキテクチャWeb ポートレットの実装例キャッシュの利用

スケーラブルな構成

31

Web ポートレットの実装方法

すべて独自に実装– Web対応の任意の言語で実装が可能

Perl、C、ASP …– 実装が難しい

PDK-Java (PDK Services for Java)– Javaによる実装– PDK-Java APIが、Portalとの通信を抽象化– Portal フレームワーク・サービスを利用可能

NLS、パーソナライズ、セッション・ストレージ、セッション・コンテキスト、セキュリティ、ロギング…

32

Oracle Portal Development Kit (PDK)

ポートレット開発に役立つリソースを提供

ドキュメント、APIドキュメント、サンプル…– DB ポートレット (PL/SQL)– Web ポートレット (Java)

OTN、OTN-J で公開– http://otn.oracle.com/products/iportal/– http://portalstudio.oracle.com/– http://otn.oracle.co.jp/software/app_server/portal/p

ortal.html注) 日本オラクルがサポートするPDKは、OTN-Jで公開しているもののみ

33

34

PDK Services for Java (PDK-Java)

Java によるWeb ポートレット開発に利用ドキュメント、JavaDoc、サンプルコード…provider.jar ファイル– Java インタフェース– デフォルト実装クラス

– 関連クラス

35

PDK-Java インストール

Portal が動作している 9iAS 以外のノードでも可Oracle JSP、Oracle XML Parser の設定を確認

– wrapper.classpath=<9iAS_Home>/xdk/lib/xmlparserv2.jar– wrapper.classpath=<9iAS_Home>/jsp/lib/ojsp.jar

jserv.properties に次のエントリを追加– wrapper.classpath=<PDK-Java_Home>/lib/provider.jar

(サンプルのWeb ポートレットをインストール)(Portal ページにポートレットを配置し、動作を確認)

36

Agenda

Oracle9iAS Portal とポートレットOracle9iAS Portal アーキテクチャWeb ポートレットと PDK-JavaPDK-Java アーキテクチャWeb ポートレットの実装例キャッシュの利用

スケーラブルな構成

37

PDK-Java アーキテクチャ

Portal からのリクエスト

Provider Adaptor

Provider

Portlet

Renderer Personalization Security

<provider><portlet>…</portlet><portlet>…</portlet></provider>

provider.xml

38

Web プロバイダ・アダプタ

oracle.portal.provider.v1.http.HttpProviderServlet として動作PDK-Java で作成されたWeb プロバイダへのエントリ・ポイント

Portal とWeb プロバイダの間の通信を仲介Web プロバイダごとに、1つの Servlet インスタンス

39

PDK-Java アーキテクチャ

Portal からのリクエスト

Provider Adaptor

Provider

Portlet

Renderer Personalization Security

<provider><portlet>…</portlet><portlet>…</portlet></provider>

provider.xml

40

Web プロバイダ・インタフェース

5つの Java インタフェース– Provider– Portlet– PortletRenderer– PortletPersonalizationManager– PortletSecurityManager

Web プロバイダが Portal と正しく通信するために必要なメソッドを定義

開発者は、このインタフェースを実装したクラスを作成すればよい

41

Web プロバイダ・ランタイム

Web プロバイダ・インタフェースのベース実装クラス

provider.xml ファイルに記述された、ポートレットの構成情報を利用 (宣言的)ベース実装クラスをそのまま利用可能

サブクラスの作成により、機能拡張も可能

42

PDK-Java アーキテクチャ

Portal からのリクエスト

Provider Adaptor

DefaultProvider

DefaultPortlet

RenderManager

FilePersonalization

Manager

DefaultSecurityManager

<provider><portlet>…</portlet><portlet>…</portlet></provider>

provider.xml

43

Provider インタフェース

oracle.portal.provider.v1.Provider1つ以上のポートレットを管理するプロバイダ次のメソッドを定義– register()、deregister()

プロバイダのPortalへの登録/削除時に実行– getPortlet()、getPortlets()

管理するポートレットを返す

– initSession()Portal とWeb プロバイダ間のセッション確立時に実行

– …

44

DefaultProvider クラス

oracle.portal.provider.v1.http.DefaultProviderProvider インタフェースのベース実装クラスprovider.xml ファイルに、管理するポートレットの情報を指定

<provider class="oracle.portal.provider.v1.http.DefaultProvider"><portlet class="className"> ... </portlet>...<portlet class="className"> ... </portlet>

</provider>

45

PDK-Java アーキテクチャ

Portal からのリクエスト

Provider Adaptor

DefaultProvider

DefaultPortlet

RenderManager

FilePersonalization

Manager

DefaultSecurityManager

<provider><portlet>…</portlet><portlet>…</portlet></provider>

provider.xml

46

Portlet インタフェース

oracle.portal.provider.v1.Portlet単一のサービスを提供するポートレット

プロバイダを介して、Portal に公開されるポートレットの静的なメタデータを保持– getId()、getTitle()、getTimeout() …

3つのコントローラのコンテナ– getRenderer()– getPersonalizationManager()– getSecurityManager()

47

DefaultPortlet クラス

oracle.portal.provider.v1.http.DefaultPortlet Portlet インタフェースのベース実装クラスprovider.xml に、ポートレットの構成情報を指定

<portlet class="oracle.portal.provider.v1.http.DefaultPortlet"><id>1</id><name>PortletName</name><title>Portlet Title</title>

<renderer class="className"> ... </renderer><personalizationManager class="className">

... </personalizationManager ><securityManager class="className"> ... </securityManager>

</portlet>

48

PDK-Java アーキテクチャ

Portal からのリクエスト

Provider Adaptor

DefaultProvider

DefaultPortlet

RenderManager

FilePersonalization

Manager

DefaultSecurityManager

<provider><portlet>…</portlet><portlet>…</portlet></provider>

provider.xml

49

PortletRenderer インタフェース

oracle.portal.provider.v1.PortletRendererポートレットのすべてのモードの描画を担当するコントローラ

3つのコントローラのうち、これだけが必須render() メソッドのみを定義

50

RenderManager クラス

oracle.portal.provider.v1.RenderManagerPortletRenderer インタフェースのベース実装クラス

各モードごとに 、コンテンツを生成するManagedRenderer をプラグイン可能

<renderer class="oracle.portal.provider.v1.RenderManager"><showPage class="oracle.portal.provider.v1.http.JspRenderer">

<name>hello.jsp</name><appPath>/hello</appPath><appRoot>/htdocs/hello</appRoot>

</showPage><editPage> ... </editPage>...

</renderer>

51

ManagedRenderer インタフェース

oracle.portal.provider.v1.ManagedRendererRenderManager にプラグインして利用個別のモードの描画を担当

次のメソッドを定義– prepareResponse()

キャッシュ・エントリが有効かどうか、判断

– renderBody()ポートレット・コンテンツの描画

– …

52

XXXRenderer クラス

oracle.portal.provider.v1.XXXRendererManagedRenderer インタフェースのベース実装クラス

5つの実装クラス– FileRenderer 静的 HTML– JspRenderer JSP ページ– Servlet20Renderer Servlet クラス– JavaRenderer Java クラスのメソッド– JspValidateRenderer 妥当性ベースのキャッシュを

利用する JSP ページ

53

PDK-Java アーキテクチャ

Portal からのリクエスト

Provider Adaptor

DefaultProvider

DefaultPortlet

RenderManager

FilePersonalization

Manager

DefaultSecurityManager

<provider><portlet>…</portlet><portlet>…</portlet></provider>

provider.xml

54

PortletPersonalizationManager インタフェース

oracle.portal.provider.v1.PortletPersonalizationManager

ポートレットのパーソナライズ (カスタマイズ) を管理するコントローラ

次のメソッドを定義– create()、destroy()

カスタマイズ・データの作成 / 削除– read()、write()

カスタマイズ・データの読取り / 書込み– …

55

FilePersonalizationManager クラス /DBPersonalizationManager2 クラス

oracle.portal.provider.v1.XXPersonalizationManagerPortletPersonalizationManager インタフェースのベース実装

パーソナライズ・データをファイル / DB に格納データを格納するオブジェクト・クラスも指定– PersonalizationObject インタフェースの実装クラス

<personalizationManagerclass="oracle.portal.provider.v1.FilePersonalizationManager"><dataClass>

oracle.portal.provider.v1.NameValuePersonalizationObject</dataClass>

</personalizationManager>

56

PDK-Java アーキテクチャ

Portal からのリクエスト

Provider Adaptor

DefaultProvider

DefaultPortlet

RenderManager

FilePersonalization

Manager

DefaultSecurityManager

<provider><portlet>…</portlet><portlet>…</portlet></provider>

provider.xml

57

PortletSecurityManager インタフェース

oracle.portal.provider.v1.PortletSecurityManagerポートレットへのアクセス・コントロールを担当するコントローラ

hasAccess() メソッドのみを定義– ポートレットへのアクセスの可否を返す

58

DefaultSecurityManager クラス

oracle.portal.provider.v1.DefaultSecurityManagerPortletSecurityManager インタフェースのベース実装クラス

Portal ユーザの認証レベル (ログインしているかどうか) ベースのアクセス・コントロール

<securityManagerclass="oracle.portal.provider.v1.DefaultSecurityManager">

</securityManager>

59

Agenda

Oracle9iAS Portal とポートレットOracle9iAS Portal アーキテクチャWeb ポートレットと PDK-JavaPDK-Java アーキテクチャWeb ポートレットの実装例キャッシュの利用

スケーラブルな構成

60

Web ポートレット 実装例 (1)

PortletRenderer インタフェースを、独自に実装ベース実装クラス FilePersonalizationManager を利用

PortletSecurityManager インタフェースは、使用しない

DefaultProvider

DefaultPortlet

CustomRenderer

FilePersonalization

Manager

61

provider.xml の設定

<provider class="oracle.portal.provider.v1.http.DefaultProvider"><portlet class="oracle.portal.provider.v1.http.DefaultPortlet"><id>1</id><name>SampleRenderer</name><title>SampleRenderer example</title><description>Rendererを実装するサンプルWebポートレット</description><showEdit>true</showEdit><showEditDefault>true</showEditDefault><showPreview>true</showPreview><showDetails>true</showDetails><hasHelp>true</hasHelp><hasAbout>true</hasAbout><renderer class="yourpackege.SampleRenderer" /><personalizationManager class="oracle.portal.provider.v1.FilePersonalizationManager" ><dataClass>oracle.portal.provider.v1.NameValuePersonalizationObject</dataClass>

</personalizationManager></portlet></provider>

62

Render() メソッドの実装 (1)

PortletRenderer インタフェースの唯一のメソッドrender() を実装通常は、モードごとに個別のメソッドを定義し、個別のメソッド内でコンテンツを生成

63

Render() メソッドの実装 (2)

public void render(PortletRenderRequest pr)throws PortletException, AccessControlException {//...switch ( pr.getMode() ) {case PortletRenderer.MODE_SHOW:renderShow(pr); break;case PortletRenderer.MODE_ABOUT:renderAbout(pr); break;case PortletRenderer.MODE_HELP:renderHelp(pr); break;

//...default:

throw new PortletException("Not supported");} // end of switch//...}

64

各モードの実装

すべてのモードを実装する必要はない

必要なモードのみを実装

public void renderShow(PortletRenderRequest pr)throws IOException {PrintWriter out = pr.getWriter();out.println("<b>表示</b>モードです");}

public void renderAbout(PortletRenderRequest pr)throws IOException {PrintWriter out = pr.getWriter();out.println("<b>情報</b>モードです");}

65

編集モードの実装 (1)

パーソナライズを可能にする場合に実装

パーソナライズ・データを扱うロジックが必要

– パーソナライズ・データを表示

– 「OK / Apply」ボタンが押されたときに、データを保存

66

編集モードの実装 (2)

public void renderEdit(PortletRenderRequest pr)throws IOException, AccessControlException {PrintWriter out = pr.getWriter();//...NameValuePersonalizationObject data =(NameValuePersonalizationObject)PortletRendererUtil.getEditData(pr);

out.println("<p><table border=¥"0¥" cellspacing=¥"0¥">");out.println("<tr><td>Title:</td><td>");out.println("<input type=¥"text¥" size=¥"40¥" " +

"maxlength=¥"60¥" " + "name=¥"dr_title¥"" +" value=¥"" + data.getPortletTitle() + "¥" />");

out.println("</td></tr></table></p>");}

67

編集モードの実装 (3)

protected void handleEditData(PortletRenderRequest pr)throws IOException, AccessControlException,

PortletException {String actionParam = retrieveActionParam(pr);String action = pr.getParameter(actionParam);

NameValuePersonalizationObject data =(NameValuePersonalizationObject)PortletRendererUtil.getEditData(pr);

data.setPortletTitle(pr.getParameter("dr_title“));PortletRendererUtil.submitEditData(pr, data);//...}

68

Web ポートレット 実装例 (2)

デフォルトの RenderManager クラスを利用ポートレットの各モードのコンテンツは、JSP、HTML、Servlet、またはJavaクラスのメソッドで記述

DefaultProvider

DefaultPortlet

RenderManager

JSP HTML

Servlet Javaクラス

69

provider.xml の設定

<provider class="oracle.portal.provider.v1.http.DefaultProvider"><portlet class="oracle.portal.provider.v1.http.DefaultPortlet"><id>2</id><name>SampleRenderManager</name><title> Sample RenderManager</title><description>RenderManagerを利用するサンプルWebポートレット</description><hasHelp>true</hasHelp><renderer class="oracle.portal.provider.v1.RenderManager" ><appPath>&virtualRoot;sample</appPath><appRoot>&physicalRoot;sample</appRoot><charSet>Shift_JIS</charSet><showPage>sample_show.jsp</showPage><helpPage>sample_help.html</helpPage><renderContainer>true</renderContainer>

</renderer></portlet></provider>

70

各モードの実装

モードごとに、JSP、HTML、Servlet、またはJavaクラスのメソッドを使って、コンテンツを生成

<%@ page import = "oracle.portal.provider.v1.*,oracle.portal.provider.v1.http.*"

contentType="text/html; charset=Shift_JIS"%><%PortletRenderRequest pr = (PortletRenderRequest)request.getAttribute(HttpProvider.PORTLET_RENDER_REQUEST);

%><p>こんにちは、<%= pr.getUser().getName() %> さん</p>

71

Web ポートレットの利点

Java による、オブジェクト指向 / コンポーネント指向の開発が可能

既存のプレゼンテーション・ロジックの再利用が可能– RenderManager クラスの利用

Java からアクセスできる、さまざまなリソースをポートレットにすることが可能

Web ポートレットは、スケール・アウトが容易

72

Web ポートレット vs DB ポートレット

利用可能な Portal フレームワーク・サービスは、ほぼ同等– パーソナライズ、セッション・ストレージ、キャッシュ…

DB ポートレットを使うべきケース– データ集中型の処理が必要

Web ポートレットを使うべきケース– ネットワークベースのサービスを統合

– Java の柔軟性、拡張性を活用– ファイア・ウォールが存在する場合

73

Agenda

Oracle9iAS Portal とポートレットOracle9iAS Portal アーキテクチャWeb ポートレットと PDK-JavaPDK-Java アーキテクチャWeb ポートレットの実装例キャッシュの利用

スケーラブルな構成

74

パフォーマンス & スケーラビリティ

Oracle9iAS Portal は、負荷の高い処理が多い– 複数のポートレットへのリクエスト

– Portal ページの生成– …高いパフォーマンスを維持するためには…– Portal Cache の利用– 各ノードのスケール・アップ / スケール・アウト

Portal Middle Tier (Oracle9iAS)Portal ノード (Oracle8i Database)Web ポートレットが動作するノード (Oracle9iAS)

75

キャッシュの利用 -宣言的方法

provider.xml で指定個別のモードごとに、<pageExpires> タグで有効期限 (分) を指定ベース実装クラス RenderManager /ManagedRenderer (または、そのサブクラス) を利用している場合のみ

期限ベースのキャッシュのみ

76

期限ベースのキャッシュ - provider.xml<provider class="oracle.portal.provider.v1.http.DefaultProvider"><portlet class="oracle.portal.provider.v1.http.DefaultPortlet"><id>1</id><name>ExpiresSample</name><title>Expires Sample</title>

<renderer class="oracle.portal.provider.v1.RenderManager"><appPath>&virtualRoot;cache</appPath><appRoot>&physicalRoot;cache</appRoot><renderContainer>true</renderContainer><contentType>text/html</contentType><showPage class="oracle.portal.provider.v1.http.JspRenderer"><name>time.jsp</name><pageExpires>1</pageExpires></showPage>

</renderer></portlet></provider>

77

キャッシュの利用 – プログラム的方法

JspValidateRenderer クラスを利用次の2つのメソッドを実装したサブクラスを作成– isValid()

リクエストのキャッシュのバージョンIDが有効かどうか– getNewVersion()

最新のコンテンツのバージョンIDを返す

ベース実装クラス RenderManager を利用している場合のみ

妥当性ベースのキャッシュのみ

78

妥当性ベースのキャッシュ- JspValidateRenderer

public class SampleValidateRendererextends JspValidateRenderer {

protected SimpleDateFormat mFormatter= new SimpleDateFormat("mm");

public String getNewVersion(PortletRenderRequest prr) {Date t = new Date(System.currentTimeMillis());return mFormatter.format(t);}

public boolean isValid(PortletRenderRequest prr,String oldVersion) {

return getNewVersion(pr).equals(oldVersion);}}

79

キャッシュの利用 – プログラム的方法

前述の方法が使えない場合は、ユーティリティ・メソッドを利用して、キャッシュ機能を実装– oracle.portal.provider.v1.http.

HttpPortletRendererUtil クラス

期限ベースのキャッシュ– setCacheExpires()

有効期限、キャッシュ・レベルを設定

80

キャッシュの利用 – プログラム的方法

妥当性ベースのキャッシュ– getCachedVersion()

リクエストのキャッシュのバージョンIDを取得– getCachedLevel()

リクエストのキャッシュ・レベル (システム / ユーザ) を取得

– setCachedVersion()レスポンスのバージョンID、キャッシュ・レベルを設定

– useCachedVersion()Portal に、キャッシュ・エントリを使用することを指示

81

妥当性ベースのキャッシュ –処理フロー

(1) Portalからのリクエストの、バージョンID、キャッシュ・レベルを取得

(2) (取得したキャッシュ・レベルの) 最新のコンテンツのバージョンIDと比較

(3-a) バージョンIDが同じ場合 :Portal にキャッシュ・エントリの使用を指示

(3-b) バージョンIDが異なる場合 :バージョンID、キャッシュ・レベルを設定してからコンテンツを生成

82

Agenda

Oracle9iAS Portal とポートレットOracle9iAS Portal アーキテクチャWeb ポートレットと PDK-JavaPDK-Java アーキテクチャWeb ポートレットの実装例キャッシュの利用

スケーラブルな構成

83

Portal Middle Tier のスケール・アウト

中間層のスケール・アウトにより、ステートレスServlet であるParallel Page Engine の負荷を分散– 複数の Oracle HTTP Server (OHS) プロセス– 複数の JServ インスタンス

OHS のロード・バランシング– ハードウェア・ロード・バランサ– ラウンド・ロビン DNS– Oracle9iAS Web Cache

JServ のロード・バランシング– mod_jserv

84

Portal Middle Tier のスケール・アウト

HTTP

OracleHTTPServer

ブラウザ mod_jserv

ParallelPage

Engine

mod_jserv

ParallelPage

Engine

mod_jserv

ParallelPage

Engine

mod_jserv

ParallelPage

Engine

ロード・バランサ /RRDNS /

Web Cache

OracleHTTPServer

HTTP

AJP

85

Portal ノードのスケール・アウト

Portalの分散構成– 相互にデータベース・リンクされている、複数のPortalノード

Portalノード 間で負荷を分散– Portal リポジトリ– DB ポートレット– コンテンツ領域

– …

86

Oracle9iAS Portal アーキテクチャ

HTTP

Net8ModPL/SQL

ModJserv

ParallelPage

Engine(s)

OracleHTTPServer

ModPL/SQL

ModJserv

ParallelPage

Engine(s)

OracleHTTPServer

Oracle H

TTP Server

mod_plsql

mod_ jserv

ParallelPage

Engineブラウザ

DBLinkPortal リポジトリ

Portal ノード

組込みプロバイダ

カスタム DB プロバイダ

Portal ノード

Portal ノード

87

Oracle.com Online Services

Oracle9iAS Portal を利用したサービスMy Oracle– http://my.oracle.com/– 個人向けのポータル・サービス

Oracle Portal Online– http://portal.oracle.com/– Oracle9iAS Portal のホスティング・サービス

Portal Community– http://portalstudio.oracle.com/– ポートレット開発者向けのポータル・サイト– PDK も公開

88

my.oracle.com