エキスパートに会う: WebSphere Portalプログラミングに関するStefan HepperとのQ&A

この記事には、WebSphere® PortalのエキスパートであるStefan Hepperへの、ポータル・プログラミングとJSR 168ポートレット仕様に関する質問と回答が記載されています。

Stefan Hepper, WebSphere Portal Programming Model Architect, IBM

Stefan HepperStefan Hepper is the responsible architect for the WebSphere Portal and Workplace programming model and public APIs. He co-led the Java Portlet Specification V1.0 (JSR 168) and is now leading the V2.0 (JSR 286) effort. Stefan received a Diploma of Computer Science from the University of Karlsruhe, Germany, and in 1998 he joined the IBM Böblingen Development Laboratory.



2006年 8月 04日 (初版 2005年 12月 14日)

はじめに

WebSphere PortalのエキスパートStefan Hepperが、ポータル・プログラミング、JSR 168ポートレット仕様、およびJava™ポートレット開発について、読者からの質問に答えます。現在の仕様が定められた理由、特定の問題の解決方法、実装されていない機能がある理由、アーキテクチャーや戦略に関するより一般的な質問などが寄せられています。WebSphere Portalは市場をリードするポータル製品で、アプリケーション、コンテンツ、プロセス、およびユーザーとの間でパーソナライズされた対話を行うシングル・ポイントを提供します。ポートレットは、ポータルにプラグイン可能な動的コンテンツを生成するJavaベースのWebコンポーネントです。WebSphere Portalの詳細については、WebSphere Portal zone (US)を参照してください。

質問:ポートレット内から HttpSession にアクセスする推奨方法は何でしょうか?セッション内の特定のユーザーに関する情報を保存し、すべてのポートレットでその情報を利用したいと思っています。

回答:ポートレット・セッションは、HttpSession 上に置かれています。アプリケーション・スコープのポートレット・セッションに配置したものは、このポートレット・アプリケーション内のすべてのポートレットとサーブレットからアクセスできます。APPLICATION_SCOPE と共に PortletSession を使用してください。

質問:IBM がWebSphere Portal を介して提供する .Net アプリケーションのサンプルはありますか?

回答:はい。http://wps51.dfw.ibm.com/ で、デモ用のWebSphere Portal にログインできます。登録後、My Work Developer の Area\WSRP ページで、WebSphere Portal 内の Web Services for Remote Portlets (WSRP) を介して .Net ポートレットが表示されます。

質問:Portal の使用状況の統計を作成する最も良い方法はどれですか?ポートレット内で選択されているアイテムの情報は、どのような方法で取得しますか? たとえば、バックエンドの Lotus Domino Server にある文書へのリンクなどです。

回答:現在 Web サイトの分析に使用しているどのようなツールでも使用できます。WebSphere Portal は、Web サイト分析ツールが読み取りおよび評価できる NCSA Combined ログ形式と互換性がある sa.log ファイルを生成します。詳細については、『Configuring WebSphere Portal for site analysis logging (US)』と『Understanding the site analysis log (US)』を参照してください。

質問:JSR 168 ポートレットで、最大化ボタンと最小化ボタンを非表示にする方法は?

回答:これらのボタンはポータルによって作成されるため、ポートレット内では非表示にできません。このため、ポータルで、特定のポートレットにこれらのボタンをレンダリングしないように設定する必要があります。WebSphere Portal では、特殊なスキンを作成することでこれを行うことができます。

質問:JSR 168 ポートレットを使用してインターネット・バンキング・アプリケーションを開発するとき、Spring、Struts などの J2EE、EJB フレームワークのうち、WebSphere Portal ではどれを用いるのが良いソリューションでしょうか?このサイトには 25 万人のユーザーがアクセスしますが、WebSphere Portal のパフォーマンスはどうですか?WebSphere Portal での開発およびデプロイには、どのような種類のアプリケーションを推奨されますか?私が知るところでは、サード・パーティーとの統合とコラボレーションを含むコンテンツ配信システムを開発する場合、WebSphere Portal が最も適しているようです。しかし、トランザクション管理システム、B2B アプリケーションについてはどうでしょうか?WebSphere Portal は、これらに適していますか?

回答:WebSphere Portal は WebSphere プラットフォームで動作し、WebSphere のすべての J2EE 機能を利用できます。これには、トランザクション管理も含まれます。WebSphere Portal はエンタープライズ・アプリケーションにたいへん適していて、数百万のユーザーを持つ WebSphere Portal を実行されているお客様もいらっしゃいます。多くのお客様が、Spring、Struts、または JSF などのフレームワークを WebSphere Portal と共に使用されています。

質問:ある程度独立したアプリケーションがいくつかあり、これらがまとまって動作し、プレゼンテーション用に Web ポータルを使用します。どのアプリケーションでも、ユーザーが各種フォームに入力する必要があります。これに最も適したアーキテクチャーは何でしょうか?各フォームごとに異なるポートレットが必要ですか、または「テーブル駆動」方式でこれを実現できますか?サービス指向アーキテクチャーの精神に基づくと、このジョブを行う「フォーム・サービス」を作成できるのではないでしょうか。

回答:Workplace Forms Designer を使用すると、これらのフォームを WYSIWYG 方式で作成し、ポートレットとしてエクスポートできます。

質問:パスワードの入力に何回か失敗すると一定時間アクセスをブロックするアクセス制御を WebSphere Portal ユーザーに適用しようとしています。このために必要な設定またはソリューションはありますか?あるいは、これについての情報はどこかにありますか?この問題についての推奨事項や対策を IBM や WebSphere サイトで探しましたが、見つかりませんでした。

回答:現在、そのまま使えるソリューションはありませんが、WebSphere Portal V5.1.0.1 にはユーザー管理パッケージ com.ibm.portal.um が含まれているため、ポートレットから LDAP ディレクトリーに直接書き込むことができます。

質問:私たちの WAR 内の Java クラスは、WAR 外部のクラスを参照する必要があります。WebSphere Portal V5.1 では、これを行うためにどのような方法がサポートされていますか?

回答:jar ファイルを PortalServer/shared/app ディレクトリーに配置すると、すべてのポートレット・アプリケーションからこのファイルにアクセスできます。

質問:Theme JSP ファイルで、ログイン・ユーザーのアクセス属性にスクリプト変数としてアクセスする方法は?私はカスタマイズしたテーマを持っています。このテーマの Banner.jsp で、スクリプトレット内でストリング・オブジェクトとしてユーザー属性にアクセスするために、ユーザー・オブジェクトからログイン・ユーザーの属性にアクセスしようとしています。ユーザー属性を表示するために、<wps:if loggedIn="yes">内で<wps:user attribute=""/>タグを使用できます。しかし、残念ながら、<wps:user>タグは、スクリプトレット内でカスタム・コードを書き込むためのスクリプト変数をまったく返しません。また、Banner.jsp で次のコードを書き、ユーザー・オブジェクトのインスタンスの生成を試みました。

<%@ taglib uri="/WEB-INF/tld/portlet.tld" prefix="portletAPI" %>
<portletAPI:init />
User user = portletRequest.getUser();

しかし、ポートレット API は、ポータル・レベルで初期化できません。上記のコードでは、いくつかの例外が発生します。「ユーザーのニックネームが存在する場合はニックネームを表示し、それ以外の場合はユーザーのフルネームを表示する」というロジックを実装する必要があります。

回答:WebSphere Portal V5.1.0.1 から、ポートレット、またはテーマとスキンからユーザー管理システムにアクセスできるようになりました。テーマとスキンでは、ポートレット・タグ・ライブラリーまたは API がサポートされていないことに注意してください。テーマ内では次の方法が可能です。

Context ctx = new InitialContext();
com.ibm.portal.um.PumaHome home = (PumaHome) 
ctx.lookup(portal:service/usermanagement/Puma);  
// note: you need to do the lookup only once
PumaProfile profile = home.getProfile(request); 
// note: you need to get the profile for each request again
Map userattributes = profile.getAttributes(profile.getCurrentUser(), 
listOfAttributes) ;

if ( userattributes.containsKey(nickname) )

質問:無効なログインのエラー・メッセージをログイン・ポートレットとログイン画面の両方に表示する必要があります。ユーザーが無効なユーザー ID またはパスワードを入力したとき、デフォルトのログイン・ポートレットとデフォルトのログイン画面の両方に、適切なエラー・メッセージを表示します。現在、エラー・メッセージは、ログイン・ポートレットまたはログイン画面の一方にのみ表示できます。しかし、エラー・メッセージの表示機能を両方で有効にしなければなりません。AuthenticationService.properties ファイルで authentication.screen.login プロパティーの値を変更しましたが、問題は解決しませんでした。アドバイスをお願いします。

回答:どちらか一方を使用してください。ログイン・ポートレットを使用することをお勧めします。

質問:いくつかのフィールドを追加して、ログイン・ポートレットと Selfcare ポートレットをカスタマイズする必要があります。画面オプションとポートレット・オプションのどちらを選べばよいでしょうか?これを決定するための要因は何ですか?私たちは、ニーズに適合するよう Selfcare ポートレット JSP を変更しました。うまく動作しているようですが、これは正しい方法ですか?それとも、画面オプションによる方法に切り替えるべきでしょうか?

回答:ポートレットを使用するほうが、より柔軟性があります。画面オプションは、主に既存の方法のためにまだサポートされています。

質問:私たちは、ポートレット間のデータ交換をポータル・メッセージング機能に強く依存するポータル・アプリケーションを持っています。このアプリケーションを、WebSphere 以外のお客様にも利用可能にする必要があります。しかし、JSR 168 はポートレット間のメッセージングをまったくサポートしていないようです。JSR 168 がメッセージングをサポートする予定はありますか?かわりに利用できる手法はありますか?

回答:データを交換する標準の方法は、1 つのポートレット・アプリケーション内で、ポートレットのポートレット・セッション・アプリケーション・スコープを使用する方法と、アプリケーション間で EJB を使用する方法のいずれかがあります。ポートレット間通信は、JCP に JSR 286 として送付された Portlet Specification のバージョン 2.0 で解決される予定です。

質問:ポートレットを単独のモードでポップアップ・ウィンドウに表示しなければなりません。ポップアップ・ウィンドウに表示するポートレットは、他の 2 つのポートレットを持つページ上にあります。urlGeneration タグで使用するために、このポートレットを含むコントロールのオブジェクト ID または固有名を取得する方法は?

回答:現在、ポートレットに固有の名前を割り当てる唯一の方法は XMLAccess を使用することです。WebSphere Portal の今後のリリースで、UI を介してこの機能が提供される予定です。現在は、XMLAccess スクリプトで次の方法を使用してください。

<request ...>
<portal action="locate">
    ...
    <content-node content-parentref="Content.Root.My_Portal" action="update" 
    active="true" objectid="my.page.1" uniquename="my.unique.name.page" 
    type="page" skinref="undefined">
	...
	<component action="update" ordinal="100" type="control" 
	uniquename="my.unique.name.portlet">
	<portletinstance action="update" objectid="my.page.1.portlet1" 
      portletref="ExtReg"/>
	</component>
	...
   </content-node>
  </portal>
</request>:

ポップアップ・ウィンドウを表示するだけであれば、次の方法も使用できます。

<portal:urlGeneration contentNode="my.unique.name.page"
layoutNode="my.unique.name.portlet"
portletWindowState="maximized" newWindow="true">
<a href="<% wpsURL.write(out); %>">MyPortletInNewWindow</a>
</portal:urlGeneration>

現在、単独のモードのサポートは、JSR 168 ポートレットでは使いやすくありません。これらのポートレットは、com.ibm.portal.state API を使用して自分自身でリターン URL を作成しなければならないためです。

参考文献

学ぶために

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Lotus, WebSphere
ArticleID=341932
ArticleTitle=エキスパートに会う: WebSphere Portalプログラミングに関するStefan HepperとのQ&A
publish-date=08042006