原文:
Extending Project WebSynergy's Tables
私達は、最近 プロジェクト WebSynergy のコニュニティフィーチャーでセマンティック化の作業を始めました。
そのことに関しては、私の ブログ を読んでください。
これを行うため、新規のカラムを追加したり、新規のテーブルを作成したり、既存のテーブル構造を拡張しなければなりませんでした。
このブログでは、プロジェクト WebSynergy の ServiceBuilder フレームワークを使うことでどの様に簡単にできるかを説明します。
例として、ontologyId カラムを既存のBlogsEntry テーブルに追加してみます。
また、新規に BlogsEntryOntologyMapping テーブルも追加してみましょう。
好きな IDE (NetBeans を勧めますが) で
<synergy-workspace>\e2demo\synergy\liferay\patch\portal-impl\src\com\liferay
\portlet\blogs\service.xml
を開いてください。
それぞれの <entity> タグは DB 内のテーブルに対応しています。
"OntologyId" カラムを BlogsEntry テーブルに追加するために、
<entity name="BlogsEntry"> </entity> タグに以下を追加してください。
<column name="ontologyId" type="String" />
また、追加したカラムに対応する finder メソッドも追加します。
これを使い、コーラーは、ontologyId に対応した、ブログエントリを得ることができます。
<finder name="OntologyId" return-type="Collection">
<finder-column name="ontologyId" />
</finder>
これは、BlogsEntryPersistence内と BlogsEntryPersistenceImpl内で findByOntologyId() を生成します。
新規 BlogsEntryOntlogyMapping テーブルを追加するために、以下を追加してください。
<entity name="BlogsEntryOntlogyMapping" local-service="true" remote-service="true">
<column name="entryId" type="long" primary="true" />
<column name="ontologyId" type="long" />
</entity>
次に、getBlogEntriesByOntologyId() を BlogsEntryLocalServiceImpl クラスに追加する必要があります。
public List getBlogEntriesByOntologyId(String ontologyId) throws SystemException{
List blogtnriesList = blogsEntryPersistence.findByOntologyId(ontologyId);
return blogtnriesList;
}
blogsEntryPersistence.findByOntologyId(ontologyId) 行で、コンパイルエラーが発生します。
これは、BlogsEntryPersistence インターフェースにメソッドがまだ追加されていないのが理由です。
しかし、この時点では気にしないでください :)
これらの変更後、
<synergy-workspace>\e2demo\synergy\liferay\portal\portal-impl へ コマンドプロンプトで cd し
以下の ant スクリプトを実行します。
ant build-service-portlet-blogs
これは、ブログに関係のある、全てのサービス、util、persistence と factory クラスを作成します。
<synergy-workspace>\e2demo\synergy\liferay\portal\portal-service\src\com\liferay\portlet\blogs \service\persistence\BlogsEntryPersistenceを開くと、findByOntologyId() が新たに生成されていることがわかると思います。
<synergy-workspace>\e2demo\synergy\liferay\portal\portal-service\src\com\liferay\portlet\blogs\ service\BlogsEntryLocalService と BlogsEntryLocalServiceUtilを開くと、getBlogEntriesByOntologyId() が新たに生成されていることがわかると思います。
これで、BlogsEntryLocalServiceUtil .getBlogEntriesByOntologyId()ポートレットクラスや jsp から BlogsEntryLocalServiceUtil .getBlogEntriesByOntologyId() を呼び出すことができ、
特別な ontologyId を適用した、ブログエントリを得ることができます。
次は、スクリプトを変更します。
このために、開く前に、ant build-db をコマンドプロンプトで実行します。
<synergy-workspace>\e2demo\synergy\liferay\portal\sql\portal-tables.sql と <synergy-workspace>\e2demo\synergy\liferay\portal\sql\create-*.sql を開きます。
スクリプトが適切に変更された事がわかります。
変更が DB (MySQL, HSQL, etc)に反映される様に、
lPortal データベースd下へ既存のテーブルをドロップし、サーバーを再起動します。
ontologyId カラムが BlogsEntry テーブルに追加され、 BlogsEntryOntologyMapping テーブルが作成されます。
プロジェクト WebSynergy のテーブル拡張はこの様に簡単です。この例を他の機能、ウィキやブックマーク等に応用できます。