|
JavaWorld2006/03号に特集されていたJBoss Portalを使ってみます。JBoss PortalはJSR-168に準拠したポータルサーバです。 インストール †ダウンロード †http://www.jboss.org/products/jbossportal/downloads よりダウンロードします。JBossが同梱されている物もありますが、今回は JBoss Portal Binary 2.2 をダウンロードしてインストールします。 インストール †インストールは簡単で、ファイルを解凍してJBossのDeployディレクトリ*1に
を置くだけです。これでJBoss起動時にPortal Serverが起動されます。データベース設定ファイルは、HSQLDBを使うのならば portal-hsqldb-ds.xmlというファイル(解凍したときのsetupディレクトリにある)を同じくDeployディレクトリに置くだけです。 使ってみる †まずはアクセス †http://localhost:8080/portal/ にアクセスするとトップページが表示されます。 このトップページから管理画面などへ入ることができます。左上のログインから遷移して、admin/admin で管理画面を表示することができます。管理画面には
などが用意されています。 Portletなどを組み込む †さて、自作のPortletをポータルコンテナに組み込んでいきます。Portletを組み込むには、普通(?)通りのエンタープライズアプリケーションを作成し、JBoss Portalが動いているJBossサーバにearをデプロイするだけみたいです。 WEB-INF配下に以下のファイル群を置いていきます。
portlet.xmlはJSR168の仕様内のファイルみたいです。 <portlet-name>HelloPortlet</portlet-name> <portlet-class>nu.mine.kino.portlets.HelloPortlet</portlet-class> などのようにして、ポートレット名と実際のクラス名を関連づけます。 jboss-app.xmlは <jboss-app> <app-name>helloworld</app-name> </jboss-app> のようにして、このwar内のポートレットのアプリ名を記述します。 *-object.xmlは実際のポートレットの配置などを定義するファイルのようです。たとえば <?xml version="1.0" encoding="UTF-8"?>
<deployments>
<deployment>
<if-exists>overwrite</if-exists>
<parent-ref>default</parent-ref>
<properties/>
<page>
<!-- tabにあらわれる -->
<page-name>Hello World MyPage</page-name>
<properties/>
<window>
<window-name>HelloWorldPortletWindow</window-name>
<instance-ref>HelloWorldPortletInstance</instance-ref>
<region>center</region>
<height>0</height>
</window>
</page>
</deployment>
<deployment>
<if-exists>overwrite</if-exists>
<instance>
<instance-name>HelloWorldPortletInstance</instance-name>
<component-ref>helloworld.HelloPortlet</component-ref>
</instance>
</deployment>
</deployments>
などのようにします。 <component-ref>helloworld.HelloPortlet</component-ref> は[アプリ名].[ポートレット名]ってなってるみたいです。 この辺はそのうち、後述します*2 また、実装クラスはこんな感じ: package nu.mine.kino.portlets;
import java.io.IOException;
import javax.portlet.GenericPortlet;
import javax.portlet.PortletException;
import javax.portlet.PortletSecurityException;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
/**
* @author Masatomi KINO
* @version $Revision$
*/
public class HelloPortlet extends GenericPortlet {
protected String getTitle(RenderRequest request) {
System.out.println(super.getTitle(request));
return "Hello Portlet Example!";
}
protected void doView(RenderRequest request, RenderResponse response)
throws PortletException, PortletSecurityException, IOException {
response.setContentType("text/html");
response.getWriter().println("Hello Portlet!!");
}
}
データベースをMySQLにする †$ mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 to server version: 5.0.15-max-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> create database jbossportal; Query OK, 1 row affected (0.03 sec) mysql> grant all privileges on jbossportal.* to portal identified by 'xxxx'; Query OK, 0 rows affected (0.04 sec) mysql> としてjbossportalというデータベースとそのデータベースにアクセス可能なportalというユーザを作成します。先ほど置いたportal-hsqldb-ds.xmlは削除して、代わりにportal-mysql-ds.xmlを置きます。パラメタはIPやパスワードなど、適当に変えておきましょう。 次にJBossを起動したときに、自動的にテーブルが作成されるみたいです。見てみたところ、以下のようになってました。 mysql> show tables; +-------------------------+ | Tables_in_jbossportal | +-------------------------+ | JBP_CONTEXT | | JBP_INSTANCE | | JBP_INSTANCE_PREF | | JBP_INSTANCE_PREF_VALUE | | JBP_OBJECT_NODE | | JBP_PAGE | | JBP_PORTAL | | JBP_PORTAL_MODE | | JBP_PORTAL_OBJECT | | JBP_PORTAL_OBJECT_PROPS | | JBP_PORTAL_WINDOW_STATE | | JBP_SECURITY_CONSTRAINT | | JBP_SECURITY_POLICY | | JBP_WINDOW | | jbp_role_membership | | jbp_roles | | jbp_user_pref | | jbp_user_pref_set | | jbp_user_pref_value | | jbp_user_prefs_group | | jbp_user_prop | | jbp_users | +-------------------------+ 22 rows in set (0.01 sec) なんかエラーが一杯コンソールにでてたので、うまくいってないみたいですが、とりあえずこんな感じです。エラーはコミットをしてないから?みたい。。何度かJBossを再起動したら動くようになったみたいですね。 Portletの各メソッドのよばれるタイミング †
これらのコンテナから直接呼び出されるメソッドに加えて、render() メソッドを実装した GenericPortlet? クラスが提供されています。このクラスは、描画要求をポートレットのモードに応じた描画メソッドに渡します。開発者は GenericPortlet? クラスのサブクラスを作成し、これらの特別な描画メソッドのうち、ポートレットに必要なものを実装できます。これらの描画メソッドを次に示します。
はまったのが、processActionで引数のオブジェクトActionRequest?にrequest.setAttribute("hoge",hoge)して JSP側でrequest.getAttribute("hoge");してて取れねーってやってました。正しくはもう一つの引数ActionResponse?に対して、response.setRenderParameter?("hoge",hoge);して、doView()の引数RenderRequest?にrequest.setAttribute("hoge",hoge)する。んで、JSP側では、(たぶん) <portlet:defineObjects/>
<%
Object hoge = renderRequest.getAttribute("hoge");
%>
とするみたいです。はまったー。。。。 描画をJSPにやらせる。 †protected void doView(RenderRequest request, RenderResponse response)
throws PortletException, PortletSecurityException, IOException {
// ココでは、ViewをJSPに任せている。
response.setContentType("text/html");
getPortletContext().getRequestDispatcher("/WEB-INF/jsp/calcPlus.jsp")
.include(request, response);
}
関連リンク †この記事は
現在のアクセス:18618 |