Eclipse 上の JBoss ランタイムに新たなライブラリを認識させる方法

 
Tomcat だと何も考えずにいけることが JBoss だとうまくいかなかったのでメモ。

アプリケーションサーバに jar を配置する

一部のライブラリ(jar ファイル)はアプリケーションだけでなく、アプリケーションサーバからも参照することがあります。その代表格が JDBC ドライバです。

その場合、アプリケーションサーバにあるライブラリ置き場に jar ファイルを置いてあげると、自動的に使えるようになります。Tomcat の場合、[TOMCAT_HOME]/lib ディレクトリです。
Eclipse での言い方をすると、サーバランタイムに jar ファイルを追加したことになります。

JBoss の場合、[JBOSS_HOME]/modules ディレクトリ以下に置くのですが、ひと工夫が必要です。ディレクトリ直下に置くのではなく、ライブラリのパッケージ構成を意識して、ディレクトリを切って jar ファイルを配置します。

OracleJDBC ドライバの場合、[JBOSS_HOME]/modules/com/oracle/db/main/ojdbc6.jar という感じです。ちょっと面倒です。すなおにサブディレクトリ全部を走査してほしいです。

一度理解すると、なぜここに jar ファイルを置くのかが腹落ちするのですが、よく知らない人は「なんで WEB-INF/lib に置かねえんだ?」となりますね。

EclipseJBoss ランタイムに認識させる

開発時は IDE(ここでは、Eclipse)にアプリケーションサーバに jar ファイルがあることを知らせてあげないと、クラスが見つからなくてコンパイルできなかったり、ClassNotFoundException が発生します。
ということで、通常サーバランタイムを参照するように設定して、クラスパスを通すことになります。

ここで、サーバランタイムに新しい jar ファイルを追加した際、Tomcat の場合はサーバランタイムとして、[TOMCAT_HOME]/lib ディレクトリを参照するように設定されています。自動的に認識されます。

ところが、JBoss の場合、[JBOSS_HOME]/modules ディレクトリ以下を参照するようには設定されておらず、その配下のディレクトリ群を個別に参照設定しています。下図を参考にしてください。

新たな jar ファイルを追加した場合は、[サーバ]→[ランタイム環境]→[Default Classpath Entries] に設定を追加剃る必要があります。これも下図を参考にしてもらえれば理解できるかと思います。

これも一度理解すれば、簡単に設定できるのですが Tomcat の要領に慣れていたので、なぜ自動的にサーバランタイムに追加されないのか悩みました。