Jackrabbit の練習(2) PersistenceManager の変更

少し間が空きましたが、再開。
うちの Win は古いので、あと Macports がステキなので
mac で開発することにしました。

環境は、

Eclipse 3.2.0
MacOSX JVM 1.5.0
PostgreSQL 8.3.1

PersistenceManager の設定

Jackrabbit に登録するデータをどこに保存するかを設定するのは、repository.xml内のの設定。ここではまりました。。。(Postgresqlもほぼ初めて触ったので、そこでも色々とはまりましたが。。。)
※ postgres用JDBCドライバのjarも要ります。
PostgreSQL JDBC Driver


repository.xmlの構造をざっくり見てみると、こんな感じ。

<!-- Example Repository Configuration File -->
<Repository>
    <FileSystem />
    <Security />
    <Workspaces />
    <Workspace>
        <FileSystem>
        <PersistenceManager>
        <SearchIndex>
    </Workspace>
   <Versioning>
        <FileSystem>
        <PersistenceManager>
    </Versioning>
    <SearchIndex>
</Repository>

リポジトリのデータ保管領域にはで、Workspace と Versioning があって(Data Storeというのもあるけどそれはもっと先でやります。)、フツウにデータを登録するのがworkspaceで、チェックインして履歴管理の対象になるとそれはVersioning領域に保管されるようになる、というのがJCRの仕様。ざっくりだけど。で、ここではそれぞれの領域のPersistenceManager(永続的にデータを保管するやり方みたいなイメージかな)を選ぶと。今回はPostgresqlに保存しようと思ったので、
デフォルト設定の

        <PersistenceManager class="org.apache.jackrabbit.core.persistence.bundle.DerbyPersistenceManager">
          <param name="url" value="jdbc:derby:${wsp.home}/db;create=true"/>
          <param name="schemaObjectPrefix" value="${wsp.name}_"/>
        </PersistenceManager>

を、

        <PersistenceManager
		  class="org.apache.jackrabbit.core.state.db.SimpleDbPersistenceManager">
		  <param name="driver"             value="org.postgresql.Driver"/>
		  <param name="url"                value="jdbc:postgresql://localhost:5432/jcr?charSet=utf8"/>
		  <param name="schema"             value="postgresql"/>
		  <param name="user"               value="test"/>
		  <param name="password"           value="test"/>
		  <param name="schemaObjectPrefix" value="${wsp.name}_"/>
		  <param name="externalBLOBs"      value="false"/>
		</PersistenceManager>

に変更。
※ schema は postgresql とやるとpublicスキーマにアクセスされる様子。
pgAdminIIIをインストールしたので、手動でスキーマつくってみたいに設定したのだけど、どうしても接続できず。postgreSQLが分かってないので、とりあえずpostgresqlでつないでます。


こうやってPersistenceManagerを設定しておけば、接続時に勝手にJackrabbitがテーブルつくってくれるのですね。これはらくちん。


が、これで、FirstHop.javaやThirdHop.java とかを実行したところ、Versioning のテーブルは自動で作成されるが Workspace 側は作成されず。(作成されないけどエラーが出ないということは、デフォルトの Derby に登録されてるってことですね。)


で、数時間悩んだあげくひらめいた(思い出した)のが、workspace.xml
repository.xmlはここにあるのですが、

これで一度なんらかのプログラムを実行すると

    <Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="jcr"/>

の記述に従って、workspaceフォルダが作成されます。
(ちなみに他のところで ${wsp.name} で置換される対象となるのが、ここの defaultWorkspace 属性。)


このWorkspaceフォルダに workspace.xml が。。。!


で、こちらにもPersistenceManager設定があるので書き換え。

<?xml version="1.0" encoding="UTF-8"?>
<Workspace name="jcr">
        <!--
            virtual file system of the workspace:
            class: FQN of class implementing the FileSystem interface
        -->
        <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
            <param name="path" value="${wsp.home}"/>
        </FileSystem>
        <!--
            persistence manager of the workspace:
            class: FQN of class implementing the PersistenceManager interface
        -->
        <PersistenceManager
		  class="org.apache.jackrabbit.core.state.db.SimpleDbPersistenceManager">
		  <param name="driver"             value="org.postgresql.Driver"/>
		  <param name="url"                value="jdbc:postgresql://localhost:5432/jcr?charSet=utf8"/>
		  <param name="schema"             value="postgresql"/>
		  <param name="user"               value="test"/>
		  <param name="password"           value="test"/>
		  <param name="schemaObjectPrefix" value="${wsp.name}_"/>
		  <param name="externalBLOBs"      value="false"/>
		</PersistenceManager>
       
        <!--
            Search index and the file system it uses.
            class: FQN of class implementing the QueryHandler interface
        -->
        <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
            <param name="path" value="${wsp.home}/index"/>
            <param name="textFilterClasses" value="org.apache.jackrabbit.extractor.MsWordTextExtractor,org.apache.jackrabbit.extractor.MsExcelTextExtractor,org.apache.jackrabbit.extractor.MsPowerPointTextExtractor,org.apache.jackrabbit.extractor.PdfTextExtractor,org.apache.jackrabbit.extractor.OpenOfficeTextExtractor,org.apache.jackrabbit.extractor.RTFTextExtractor,org.apache.jackrabbit.extractor.HTMLTextExtractor,org.apache.jackrabbit.extractor.XMLTextExtractor"/>
            <param name="extractorPoolSize " value="2"/>
            <param name="supportHighlighting" value="true"/>
        </SearchIndex>
    </Workspace>

これで再度プログラムを実行すると、晴れてテーブルが作成。やったー。


これで今後はPostgreSQLにデータが格納されてきます。きっと。