原文: Extending Project WebSynergy's Tables

Project WebSynergy 

私達は、最近 プロジェクト 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\BlogsEntryLocalServiceBlogsEntryLocalServiceUtilを開くと、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 のテーブル拡張はこの様に簡単です。この例を他の機能、ウィキやブックマーク等に応用できます。

 


投稿されたコメント:

コメント
  • HTML文法 不許可

This blog copyright 2009 by Jai Suri