Service Builderについて調べたのでメモ
Liferayってなんでこんなに日本語の情報が少ないの!? LiferayのService Builderについてちょっと調べたのでメモっておきます。
参考サイト(全部英語です)
- http://www.liferay.com/ja/community/wiki/-/wiki/Main/Service+Builder
- http://www.emforge.net/web/liferay-petstore-portlet/wiki/-/wiki/Main/Step1%3A+From+DB+to+simple+UI
- http://milen.commsen.com/2009/10/creating-liferay-portlet-with-liferay-maven-sdk.html
- http://www.liferay.com/ja/community/wiki/-/wiki/Main/Understanding+ServiceBuilder+and+JavaScript+for+Liferay
- http://content.liferay.com/4.3/doc/devel/liferay_4_portlet_development_guide/multipage/ch05.html
Service Builderとは?
Liferayが提供している開発ツールです。DBテーブルに対応するエンティティの情報からモデル、サービス層、パーシステンス層のコードを自動生成するツールです*1。
どこで手に入るの?
- Liferay Plugin SDKについています。SourceForgeからliferay-plugins-sdk-6.0.6-20110225.zipとか落とせばOK。
- このSDKに付属のAntビルドスクリプトを使用すれば、"ant build-service"で実行できます。
簡単な使い方
Liferay Plugin SDKからポートレットを作れば簡単に使えますんでその手順を紹介。Liferayはインストール済みであることが前提です。
- Liferay Plugin SDKを解凍し任意のディレクトリに配置する
- "SDK/build.properties"を開き、app.server.dirにLiferay本体のパスを設定する。例えばTomcatバンドル版の場合は以下ような設定にする。
app.server.type=tomcat app.server.dir=/Applications/liferay/liferay-portal-6.0.6/tomcat-6.0.29
- (Macの場合)Terminalを開き、カレントディレクトリをSDK/portletsにする。create.shに実行権限を与えておく。
- 以下のようにcreate.shを実行し、ポートレットプロジェクトの雛形を生成する。引数にはポートレットIDとポートレット表示名を指定する。
./create.sh sample "Sample Portlet"
- 上記の場合は、sample-portletというディレクトリが生成される。そこにカレントディレクトリを移す。
- "sample-portlet/docroot/WEB-INF/service.xml"を新規作成する。ここに生成の元ネタとなるエンティティ情報を記述します。なお、type属性の値が"long"とか"string"みたいに先頭小文字だと謎のエラーに出るので要注意。
<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE service-builder PUBLIC "-//Liferay//DTD Service Builder 6.0.0//EN" "http://www.liferay.com/dtd/liferay-service-builder_6_0_0.dtd"> <service-builder package-path='org.example.myservice'> <namespace>myservice</namespace> <entity name='Item' local-service='true' remote-service='false'> <column name='itemid' type='Long' primary='true'/> <column name="productid" type="String" /> <column name="name" type="String" /> <column name="description" type="String" /> <column name="imageurl" type="String" /> <column name="imagethumburl" type="String" /> <column name="price" type="Double" /> </entity> </service-builder>
- service.xmlを作成すれば、後はAntで"build-service"ターゲットを実行します。
ant build-service
これでわらわらとソースファイルや設定ファイルが生成されます。なお、自動生成されたソースは○○Impl.javaを除いて直接編集はしてはいけないようです。service.xmlの変更後の再作成でコンフリクトしてしまうからですね。生成されるのは、Javaソース以外に各種XML(SpringのBean定義、Hibernateのマッピング定義など)のようです。
個人的には、ちょっと過剰に自動生成しすぎじゃないかなぁ〜という印象。未だにSpringやHibernateでXML使うというのも正直残念。LiferayはSSHが流行ったときに作られて、そのアーキテクチャを引きずっているんだなぁという感じですね。
*1:個人的にはこの手の自動生成ツールを使って開発はしたくない...