月曜日 6 02, 2008

プロジェクト WebSynergy のテーブルの拡張

原文: 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 のテーブル拡張はこの様に簡単です。この例を他の機能、ウィキやブックマーク等に応用できます。

 


日曜日 4 06, 2008

Portlet-Repository の Yahoo Suggest and Search ポートレット

原文: Yahoo Suggest and Search Portlet in Portlet-Repository

porlet-repository に Suggest and Search ポートレットの追加がありました。これは、JSR286 ポートレットで、ユーサーの入力した単語に対して Yahoo Contextual Search  と  Yahoo Web Search サービス API をベースに web (Ajax と serveResource を利用し)から、検索に関連した提案を提供します。   ポートレットは、サービスに対し REST クライアントコールをし、XML/JSON フォーマットの結果を解析し、ユーザーに表示します。 

これは、オープンソースポートレットコンテナ 2.0 でテストしてきました。詳細は、ここの blog の投稿 と wiki ページ を参照してください。

 

About

user12617983

Search

Archives
« 4月 2014
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
今日