2009年7月3日金曜日

CentOSでのTomcat5.5とApache2.2の連携

/etc/httpd/conf.d/mod_proxy_ajp.confを編集する。
ProxyPass /tomcat/ ajp:8009/localhost/tomcat/

2009年7月2日木曜日

CentOSへのTomcat5.5のインストール

# yum install tomcat5 tomcat5-webapps tomcat5-admin-webapps
でインストールする。
webappsとadmin-webappsをインストールしなくてもtomcat自体は起動できるが、初期画面や管理アプリが使えない。

Tomcat Administration Toolにログインするにはadmin、Tomcat Webアプリケーションマネージャーにログインするにはmanagerというロールに属するユーザーが必要だがインストール直後は設定されていないため、$CATALINA_HOME/conf/tomcat-users.xmlを編集する必要がある。
とりあえず、2つのロールを定義し、両方に属するユーザーを追加した。
<role rolename="manager"/>
<role rolename="admin"/>
<user username="admin" password="admin" roles="admin,manager"/>
tomcatを起動し、http://localhost:8080/にアクセスすればtomcat5-webappsでインストールしたwebappが表示される。
# /etc/init.d/tomat5 start

CentOSでApacheをビルドする

準備
Apacheのモジュール開発を簡単にしてくれるapxs(perl script)をインストールする。
# yum install httpd-devel


コンパイル
モジュール名をmod_XXXとすると、mod_XXX.cを作成した後、
# apxs -c mod_XXX.c
とするだけでコンパイルが完了する。ここで、複数のソースに分けている場合は全てのソースをmod_XXX.cに続けて指定しなければならない。指定しなかった場合、指定しなかったソースで定義されている関数が見つからないということでApacheを起動できない。
# apachectl -t
httpd: Syntax error on line 176 of /etc/httpd/conf/httpd.conf:
Cannot load /etc/httpd/modules/mod_dav_fmt.so into server:
/etc/httpd/modules/mod_XXX.so: undefined symbol: 関数名


インストール
apxsはモジュールのインストールも行ってくれる。
# apxs -i -n XXX mod_XXX.la
-iはインストールを指定するオプションであり、-n XXXはモジュールの名前を明示的に指定するオプション。
-aを指定すると、httpd.confにインストールしたモジュールをロードする設定(LoadModule...)を挿入してくれる。
-Aを指定すると、コメントアウトしたロード設定(#LoadModule...)を挿入してくれる。

2008年7月19日土曜日

既存のライブラリJARをプラグイン化する

オープンソースやフリーウェアとして公開されているものや、自作のものなど、既存のライブラリJARファイルをプラグインあるいはRCP開発で使用したい場合、そのJARファイルの保管先をビルドパスに追加するのではなく、ライブラリ自体をラップするプラグインを作成し、そのプラグインを参照するようにする。
必ずしも、外部ライブラリをプラグイン化しなければならない訳ではないが、そのライブラリを使用するプラグイン毎に内部に持つようにすると、重複して持つことになるため、無駄になる上、ライブラリ自体の更新が発生すると、煩雑な作業が必要となる。
この方法はEclipse自体も行っている方法で、JUnitやApache Luceneなどがプラグイン化して使用されている。

方法は、
1.メニューから[New]-[Project]を選択する。

2.[Plug-in Development]のカテゴリにある[Plug-in from existing JAR archives]を選択し[Next]


3.次のページでプラグインに含めるライブラリを指定し、[Next]


4.プラグインプロジェクトの設定を行い、[Finish]


5.これでライブラリプラグインのプロジェクトが作成できたので、適宜、プラグインマニフェストエディターのruntimeタブで公開(エクスポート)するパッケージを指定する。


6.最後にプラグインとしてexportをする。

こうして作成したライブラリプラグインを使用するには、通常のプラグインと同様に、pluginsディレクトリに配置し、使用する側のプラグインでは、プラグインマニフェストエディターのdependenciesタブでRequired Plug-insに追加すればよい。

ちなみに、Eclipse3.1以前は、plugin.xmlに<runtime>要素とその子として<library>要素を追加し、その中に公開するパッケージを記述していたが、3.2以降はMANIFEST.MFにExport-Package:として記述するようになっている。

参考:
Eclipse Platform Plug-in manifest ver3.0 ver3.2

2008年4月3日木曜日

StatusとMultiStatusとその他Statusと...

ILogインターフェースでのログ出力の際に、引数として渡すIStatusの実装クラスは大きく分けて2つある。

Status
単一のメッセージとExceptionのみで構成されるログ情報。

ILog log = activator.getDefault().getLog();
log.log(new Status(Status.CANCEL, PLUGIN_ID, "これはCANCELメッセージ", null)); // 独自エラーコードなし
log.log(new Status(Status.ERROR, PLUGIN_ID, 9, "これはERRORメッセージ", null)); // Exceptionなし
log.log(new Status(Status.WARNING, PLUGIN_ID, 40, "これはWARNINGメッセージ", new Exception()));
log.log(new Status(Status.INFO, PLUGIN_ID, 2, "これはINFOメッセージ", new Exception()));
log.log(new Status(Status.OK, PLUGIN_ID, 1, "これはOKメッセージ", new Exception()));

上記は次のようになる。


MultiStatus
複数のStatusから構成される階層化ステータス。
上位ステータスは下位ステータスのSeverityが高いものが反映される。

MultiStatus multiStatus = new MultiStatus(PLUGIN_ID, 0, "これはMultiStatusのRootメッセージ", null);
multiStatus.add(new Status(Status.WARNING, PLUGIN_ID, "危険!!", null));
multiStatus.add(new Status(Status.INFO, PLUGIN_ID, "参考情報", null));
MultiStatus multiStatus2 = new MultiStatus(PLUGIN_ID, 0, "これはMultiStatus2のRootメッセージ", null);
multiStatus2.add(multiStatus);
log.log(multiStatus2);

上記は次のようになる。


その他Statusのサブクラス
MergeStatusやOperationStatusなど、個々の機能に特化したステータスクラスがある。それらもやはりStatusクラスから派生している。

2008年4月1日火曜日

EventManager

org.eclipse.core.commands.common.EventManagerクラスはスレッドセーフなListener管理実装を持つ抽象クラスであり、Listenerを管理する必要のあるクラスはこのクラスから派生させると便利。
AbstractActionやPreferenceStoreなどがこのクラスから派生している。

2008年3月31日月曜日

RCPにError Logビューを表示する

RCPに標準のError Logビューを表示するには、IPerspectiveFactoryの実装クラスのcreateInitialLayout()メソッドで次のようにする。
Error Logビューはorg.eclipse.pde.runtimeプラグインで定義されているため、プラグインの依存関係にorg.eclipse.pde.runtimeを追加すること。

public class Perspective implements IPerspectiveFactory {
public void createInitialLayout(IPageLayout layout) {
// Error Logビューをパースペクティブに追加する
layout.addView("org.eclipse.pde.runtime.LogView", IPageLayout.BOTTOM, IPageLayout.DEFAULT_VIEW_RATIO, IPageLayout.ID_EDITOR_AREA);
}
}