PORT4 > Pasta
 

Pastaの起動

Pastaを実行したいんですが...

PastaはApache Excalibur Fortress コンテナ・フレームワーク上で動作します。 Pastaを実行するためには、Fortressを起動することになります。

Fortressをいじったことのある方は、このページの説明を見ながら、いろいろな実行形態を模索することができるでしょう。 しかし、Fortressにつてよく分からない方は、とりあえず実行していろいろいじくってみることをお勧めします。 まずはPastaサーブレットに書かれていることを試してみてください。 そして、Action,Pullなどのコンポーネントを自分で作って追加してみたくなったときに、このドキュメントを読み直してください。

Fortressの概要

要は、いろいろなクラストを登録しておいて、プログラム内で必要に応じて取り出して使えるようにするライブラリです。 なぜこんな物を使うのかというと、一口にクラスと言っても、1つのインスタンスをプログラムのあちこちで共有できる場合と、 その都度new演算子でインスタンス化しなければならないことがあり得ます。 例えば、単純に1回のメソッド呼び出しで住むような計算を行うクラスはインスタンスをあちこちで共有して構いませんが、 データベース接続のような、複数のメソッド呼び出しを伴うクラスのインスタンスを共有すると、とんでもないことになります。 かといって、何でもかんでも毎回newするのは非効率的です。

Fotressにクラスを登録するとき、そのクラスのインスタンスはどのような性質を持つのか (あちこちで共有できるのか?できないのか?使いまわしは効くのか?など)という情報を与えておきます。 そうすれば、Fortress勝手に管理してくれるので、プログラマは自前で管理する必要がなくなります。

例えば、HogeActionというActionを"hoge"という名前で登録するためには、 設定ファイルに次のような記述をするでしょう。

  <hoge-action id="hoge"/>

id属性は、プログラム(おそらくはPastaのCLSプロセッサ)がアクセスする際のキーになります。 hoge-actionという要素をHogeActionというJavaのクラスに結びつける設定(メタ情報)が別途必要なのですが、 後のセクションでそれを説明します。

Fortressには、ここに書かれている以外にも様々な機能があるのですが、そのあたりは本家のサイトを見ながらハックしてください。

Meta Info?

Fortressには、かつでXDocletと呼ばれたJavadocもどきを使って、 メタ情報を生成する便利なツールが含まれています。 例えば、作成したクラスのコメントに以下の記述をします。

/**
 * <p>
 * 各Actionについての説明は <a
 * href="http://www.port4.info/pasta/basic/action.html">ドキュメント </a> を参照してください。
 * </p>
 * 
 * @avalon.component
 * @avalon.service type="Action"
 * @x-avalon.info name="action-default-to"
 * @x-avalon.lifestyle type="singleton"
 * 
 * @author <a href="mailto:miyabe@port4.info>MIYABE Tatsuhiko </a>
 * @version $Id$
 */
public class DefaultToAction extends AbstractAction implements ThreadSafe {
...

これで、設定ファイル内にaction-default-toという要素名でこのクラスの設定が書けるようになります。

この方法は非常に便利であり、Pastaで利用することもできるのですが、 実際は別のアプローチを取っています。

この類の分散管理は、あらかじめ仕様をきっちり定める人には便利かもしれませんが、 躊躇なくリファクタリングをかけ、クラスやパッケージ名の変更や移動をやりまくるような優柔不断な人 が使うと、不要になった、あるいは動かないコードまであちこちに分散することになります (作者は最近流行のアスペクト指向というものに懐疑的でもあります...)。

また、もっと実際的な問題として、このツールはソースからクラス名のリストが格納されたファイルを生成するので、 後で難読化ツールのような、 派手にバイナリを加工し、クラス名を書き換えてしまうようなツールと一緒に使うのが難しいでしょう。

Bootstrap

Mata Infoツールを使う代わりに、プログラムの開発者は、 Bootstrap インターフェイスを実装したクラスを用意し、その中で、クラスと設定ファイル中の要素名とクラスの性質をプログラミングしてください。 記述方法は、info.port4.pasta.samples.bootstrap.SampleBootstrapのソースを参考にするのがよいでしょう。

作成したBootstrapの実装を呼び出す例はPastaサーブレットがあります。 クラス名を文字列として記述するのはこれだけなので、難読化ツール等を使う場合はBootstrapの実装クラスだけを除外すればよいことになります。