M12i.

学術書・マンガ・アニメ・映画の消費活動とプログラミングについて

"KETTLE_SHARED_OBJECTS"を巡る謎、もしくは不満

以前のポストで、PentahoでDB接続情報を複数ジョブ/データ変換で共有化かつパラメータ化する方法について述べました。この方法は3つの要素からなります:

.kettleディレクトリ──環境変数もしくはシステム・プロパティKETTLE_HOMEで指し示されたディレクトリ配下に作られる隠しディレクト
kettle.propertiesファイル──上記.kettleディレクトリに作られるプロパティファイル。Spoonなどを起動するときに作成/ロードされる。
shared.xmlファイル──Spoon上で作成し「共有」設定をしたDB接続情報などの定義が格納されるXMLファイル。Spoon使用中に作成され、その後の起動時にロードされる。

この中で③のXMLファイルのパスはあくまでも①のディレクトリのパスを通じて間接的に解決される(決定される)に過ぎません。そして①のディレクトリ・パス自体もあくまでもそのベースのディレクトリを指定できるだけで、あくまでも間接的に解決される(決定される)に過ぎません。そのものズバリ③のファイルのパスを指定する方法はないのでしょうか?

実のところ、Spoonのプログラム・ロジック上、環境変数もしくはシステム・プロパティKETTLE_SHARED_OBJECTSでそのものズバリのパスを指定できる「ような」コードが存在します。「ような」というのは実際にはそれが限定された条件でしか機能しないからです。

その条件というのも手元であれこれ試して見つけたものなので、これがすべてではないかもしれませんが、「Pentaho Data IntegrationのSpoon.batのなかで構築される、Spoon起動時のシステム・プロパティ指定のコマンドラインのうち、"-DKETTLE_HOME=%KETTLE_HOME%"を削除し"-DKETTLE_SHARED_OBJECTS=file:///X:/path/to/shared.xml"を追加する」というものです。

KETTLE_HOMEの指定を消さないとKETTLE_SHARED_OBJECTSが有効になりません。またKETTLE_SHARED_OBJECTSはプログラム・コード中には「環境変数もしくはシステム・プロパティ」と記述されていますが、試してみた限りではシステム・プロパティによる指定でないと無効でした。

このようにすればshared.xmlを完全に任意の場所に置くことができる(KETTLE_HOMEではあくまで①のディレクトリの位置を、それすらも半ば間接的に指定できるに過ぎない)のですが、それでは②のプロパティ・ファイルやその他①のディレクトリ配下に作られるファイルはどうなるのだろうという、疑問というか不安も残ります。仕事で使うにはこの方法はちょっと怖いですね。。

というわけでKETTLE_SHARED_OBJECTSを巡るPentahoの挙動は謎で、「せっかくそれっぽいものを用意しておきながら使えない」という不満が残った次第。そもそも用途が違うのでしょうか(いやそんなはずは…)。

m12i.hatenablog.com