JSF 2.0 と JCR 2.0(Jackrabbit)を併用してみる。
JDBC の DataSource に JNDI 経由でアクセスするのと同じやり方で、JCR の Repository を扱いたい。ただし ManagedBean が Repository にアクセスするときには、JNDI は使わずに、標準アノテーション(JSR-250)によりインジェクトされたリソースとして扱いたい。
■ 前提- プロジェクトディレクトリ直下に、既に Jackrabbit の repository.xml と repository フォルダがある。
- このリポジトリの /hello/world@message に、文字列"Hello, World!"が格納されている。(前ポスト参照)
■ プロジェクトを作る
■ コードを書く
以下のような ManagedBean を書いてみる。
package mypackage;
import 略
@ManagedBean
public class JcrBean {
private static final String USERNAME = "username";
private static final char[] PASSWORD = "password".toCharArray();
@Resource(name="jcr/repository", type=Repository.class)
private Repository repository;
public String getGreet() {
Session session = null;
try {
session = repository.login(
new SimpleCredentials(USERNAME, PASSWORD));
Node node = session.getNode("/hello/world");
return node.getProperty("message").getString();
} catch (RepositoryException e) {
return e.getMessage();
} finally {
if (null != session) session.logout();
}
}
}
この管理 bean を使う jcrtext.xhtml を書く。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:body>#{jcrBean.greet}</h:body>
</html>
■ 確認- ブラウザでhttp://localhost:8080/jcr-tomcat/jcrtest.faces を見てみる
- "Hello, World!"が表示されたら JSF から Jackrabbit まで疎通OK
■ 後記- ここでやった JNDI のセッティングは、アプリ毎に別々のリポジトリを使うやり方だけど、共有するとか、他にも構成のパターンがある。(参考URL)
- 試行錯誤しながらやってると、いろんなタイミングでしょっちゅう.lock ファイルが残って面倒くさい。本番で使うときは、なんか考えておいた方がいいかも。
0 件のコメント:
コメントを投稿