iDempiere(アイデンピエレ)とは
iDempiereは、オープンソースのERPパッケージ(統合業務パッケージ)ソフトウェアです。
受注から出荷までの一連のサプライチェーンマネージメント(SCM)と管理会計、財務会計人事管理を含めた企業の基幹業務、顧客管理機能(CRM)などもサポートします。
iDempiereは、販売管理、購買管理、在庫管理、生産管理、固定資産管理、人事給与管理、財務会計といった基幹業務機能を提供しているだけでなく、それらの機能や情報を相互に連携することで、業務の効率化、見える化も推進できるソフトウェアであり、世界で最も高機能なオープンソースERPのひとつとして近年注目が集まっています。
使用するもの
- Mac OS X 10.8
- Eclipse Juno
前提
- PostgreSQL 9.2がインストールされ、接続可能な状態であること。
準備
Eclipse Buckminster プラグインの導入
BuckminsterとはEclipse Plug-inのビルドやテストを補助するEclipseプラグインです。プラグインのためのプラグイン!
Eclipseメニュー: Help > Install New Software からInstallダイアログを表示して、アップデートサイト(Work with:)に、 http://download.eclipse.org/tools/buckminster/updates-4.2 を指定し、"core", "maven", "pde" の3つのパッケージを選択してインストールします。
iDempiereのソースツリーをクローンする
hg clone https://bitbucket.org/idempiere/idempiere idempiere
これに時間がかかるようなら、Bitbucketからアーカイブをダウンロードしてもよい、https://bitbucket.org/idempiere/idempiere/downloads のTagsにあるv2.0を選択
Eclipseの設定
ワークスペースディレクトリの指定
Eclipseのメニュー: File > Switch Workspace > Other からワークスペースを切り替えます。
クローンした下記のような構成のディレクトリをワークスペースとして指定します。
Buckminsterでマテリアル化
Eclipseのメニュー: File > Import から、Importダイアログを表示します。
ここから、Materialize from Buckminster MSPEC, CQUERY, or BOM を選択します。
次に、adempiere.mspecを選択します。
Nextで次へと進んでいきFinish後には、Eclipseが下記のようにパッケージが多数ロードされた状態になります。
この状態で、Eclipseメニュー: Project > Clean… を実行します。
idempiere.propertiesの配置
idempiere.propertiesをワークスペースの直下に配置します。
#Adempiere
#Fri Dec 06 19:35:08 JST 2013
SingleInstancePerWindow=xyzN
WarningD=Einstellungen_nicht_aendern,_da_diese_undokumentierte_Nebenwirkungen_haben.
OpenWindowMaximized=xyzN
LoadTabMetaDataBackground=xyzN
UILookFeel=xyzAdempiere
StorePassword=xyzY
DataSource=xyzjava\:adempiereDB
Role=xyzGardenWorld Admin
CacheWindow=xyzY
ApplicationPassword=xyzGardenAdmin
Warning=Do_not_change_any_of_the_data_as_they_will_have_undocumented_side_effects.
TempDir=xyz/tmp
TraceLevel=xyzWARNING
LogMigrationScript=xyzN
AdempiereSys=xyzN
CDate=xyz2013-12-06 07\:44\:53.585
ShowTrl=xyzN
TraceFile=xyzN
Printer=xyz
AutoLogin=xyzN
Organization=xyz*
Client=xyzGardenWorld
PrintPreview=xyzN
ApplicationUserID=xyzGardenAdmin
Language=xyzEnglish
Charset=xyzUS-ASCII
ValidateConnectionOnStartup=xyzN
AutoNew=xyzN
Connection=xyzCConnection[name\=idempiere{idempiere-idempiere-adempiere},AppsHost\=idempiere,WebPort\=8080,SSLPort\=8443,type\=PostgreSQL,DBhost\=127.0.0.1,DBport\=5432,DBname\=idempiere,BQ\=false,FW\=false,FWhost\=,FWport\=0,UID\=adempiere,PWD\=adempiere]
UITheme=xyzAdempiere Theme
AutoCommit=xyzY
ShowAcct=xyzY
データベースの設定
PostgreSQLにiDempiereのDDLを流し込みます。
DDLは、クローンしたものには含まれていないようなので、本家のアーカイブから取り出します。http://www.idempiere.org/downloads ここから idempiereServer.gtk.linux.x86_64.zip
を取得します。
zipファイルを展開したあと、data/seed/Adempiere_pg84.jar からPostgreSQLのdumpファイルを取り出します。
jar xf data/seed/Adempiere_pg84.jar
とすると、Adempiere_pg84.dmp
が取り出せます。
これを、psql -h localhost -d idempiere -f Adempiere_pg84.dmp
としてデータベースに展開します。
起動
実行設定のダイアログを表示します。
Eclipseメニュー: Run > Run Configurations
ダイアログ中の、Eclipse Application > server.product を選択します。
Mac OS Xでの実行時の注意
Macで実行するときはArgumentsタブのProgram arguments: を調整します。
最初は、-os ${target.os} -arch ${target.arch} -nl ${target.nl} -consoleLog
こうなっています。が、${target.arch}の部分が正しく認識されないのでx86を指定します-os ${target.os} -arch x86 -nl ${target.nl} -consoleLog -console
--launcher.secondThreadという指定も必要なようですが、これが何を示しているかは、調べていません。ごめんなさい。追記: どうやらこれはSwingのスレッドをメインスレッドで実行しないためのオプションのようです。なので、WebUIには関係ありませんでした。
最終的にProgram arguments:は、-os ${target.os} -arch x86 -nl ${target.nl} -consoleLog -console --launcher.secondThread
になります。
これで、 Runを実行し、ブラウザで http://localhost:8080/ を開けばiDempiereの画面が見えているはずです。他のプロセスが8080ポートを使っている場合は、事前にそのプロセスのポートを変更するか、idempiere.propertiesでポートを変更します。
IDの固定化
iDempiereが使用しているZK Frameworkは、UI要素のID(HTMLエレメントのID)を動的に生成しています。これは自動テストには非常に厄介なので無効化します。
幸い、iDempiereにはID Generatorが用意されていてこれを使うだけで固定IDにすることが可能です。
ローカル環境での変更
EclipseのRun Configurationから、server.product.functionaltest を選択して起動します。
プロダクション環境での変更
zk.xmlというXML設定ファイルのコメントを外します。
<!-- system-config>
<id-generator-class>org.adempiere.webui.AdempiereIdGenerator</id-generator-class>
</system-config -->
これを、
<system-config>
<id-generator-class>org.adempiere.webui.AdempiereIdGenerator</id-generator-class>
</system-config>
こうして、service idempiere restartで再起動します。
プロダクション環境にiDempiereを構築するには、私が用意したVagrantとChefレシピを使うと簡単に構築できます。https://github.com/reoring/idempiere_vagrant