Upload
others
View
1
Download
0
Embed Size (px)
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