Jackrabbit の練習(2) PersistenceManager の変更
少し間が空きましたが、再開。
うちの Win は古いので、あと Macports がステキなので
mac で開発することにしました。
環境は、
Eclipse 3.2.0
MacOSX JVM 1.5.0
PostgreSQL 8.3.1
PersistenceManager の設定
Jackrabbit に登録するデータをどこに保存するかを設定するのは、repository.xml内の
※ 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にデータが格納されてきます。きっと。