JBoss

最終更新日時:2007-03-01 17:53:34
その他のめも

JBoss


JBoss は 100% Pure Java で開発されたオープンソースな EJB サーバです。
一般にアプリケーションサーバというと非常にライセンス料が高いので、それら高価なアプリケーションサーバを使う前に EJB を使ってみたいという場合に非常におすすめできます。
機能的には EJB1.1 をサポートしているものの、現在はまだ EJB2.0 はサポートしていません。
また、たいていの商用アプリケーションサーバで対応しているクラスタリングにも対応していないのが最大の弱点ですが、クラスタリングも現在αバージョンである 3.0 で対応される予定みたいです。

JBoss の特徴としては、とにかく簡単に使えるということが挙げられます。
とても簡単にインストールできますし、ホットデプロイ等の便利な機能もあります。
また、パフォーマンス的にも悪くないですし、かなり安定してますので非常に使い勝手はいいと思います。

インストール


JBoss-2.4.4 での例です。

まず、JBoss.ORGから JBoss のバイナリアーカイブ(例えば JBoss-2.4.4.zip とか)を入手します。
zip ファイルを jar とか unzip とかを使って解凍し、展開されたディレクトリをインストールしたい場所に置きます。
例えば、/usr/local/JBoss-2.4.4 とか。
これで終了。
あとは、bin/run.sh が起動スクリプトなので、これに実行権限を付けて置いた方が便利です。

JBoss はバイナリアーカイブだけでなくソースもあるので、ソースからビルドしてインストールするという手もありますが、ここでは紹介しません(/o\)

設定


JBoss には設定セットという概念があります。
conf 以下のディレクトリが設定セットとなっていて、最初は default というディレクトリだけ存在します。
新しい設定セットを作成するには default をディレクトリごとコピーして編集すると簡単です。
私の場合は DB に Postgres を使いたかったので、コピーした default 設定セット(Postgres を使うので postgres という名前にしました)に対して以下のような編集をしました。

Hypersonic の設定の削除


default では Hypersonic という DB が動くようになっているので、これの設定を削除します。
この設定は conf/postgres/jboss.jcml の JDBC というコメントのある部分でされているので、この部分を全て削除します。
その後に同じような設定を Postgres 用に行うので、削除して新規に書くよりも上書きの方が良いかもしれません。

JDBC の設定


使用する DB にマッチした JDBC ドライバの指定です。
上記で削除した部分の上の方にあたります。
Postgres を使うので、以下のような指定になります。

 <mbean code="org.jboss.jdbc.JdbcProvider" name="DefaultDomain:service=JdbcProvider">
   <attribute name="Drivers">org.postgresql.Driver</attribute>
 </mbean>


データソースの設定


データソースとは一般に「アクセスするデータそのものと、そのデータを取得するために必要な情報」を差しますが、ここでは「データを取得するために必要な情報」を設定します。
上記で削除した部分の下の方にあたります。
例えばこんな感じになります。

 <mbean code="org.jboss.jdbc.XADataSourceLoader" name="DefaultDomain:service=XADataSource,name=PostgresDB">
   <attribute name="PoolName">DefaultDS</attribute>
   <attribute name="DataSourceClass">org.jboss.pool.jdbc.xa.wrapper.XADataSourceImpl</attribute>
   <attribute name="URL">jdbc:postgresql://localhost/test</attribute>
   <attribute name="JDBCUser">jdbcuser</attribute>
   <attribute name="Password">jdbcpass</attribute>
 </mbean>


'URL' の 'localhost' は Postgres が動いているホスト名、'test' はデータベース名です。
データソースの設定にはこれ以外にもまだまだ設定可能な項目がいろいろあります。

起動方法


起動は bin/ に移動して

 % ./run.sh 


が基本的な起動ですが、これだと設定セットは default が読み込まれてしまいます。
設定セットを指定したい場合には、run.sh に単に設定セット名を指定するだけです。

 % ./run.sh postgres 


これで設定セット 'postgres' を読み込んでくれます。
終了は単に Ctrl-C で止めてしまえばOKです。
ちゃんと正常に起動できたかどうかは、端末に表示されるログでもいいんですが、log/ の下の server.log にちゃんとログが書き込まれるのでこちらを見て確認します。

Tomcat との連携


JBoss には Tomcat をバンドルしたバージョン(便宜上 JBoss/Tomcat と呼びます)がありますので、Tomcat との連携も簡単です。
簡単なだけでなく、JBoss と Tomcat とが同一 VM で動くことになるのでパフォーマンス的にも優れたものになります。

バイナリの入手


JBoss/Tomcat も通常の JBoss 同様、JBoss 公式サイト から取得することが出来ます。

インストール


通常版と同様 zip ファイルを解凍して適当なディレクトリに置くだけでOKです。

設定


Tomcat の設定については tomcat/conf 以下で行います。
設定内容については通常の Tomcat と同様です。
Apache - Tomcat の連携も同様にできます。
JBoss の設定については jboss/conf 以下で行います。
ここにある tomcat というディレクトリが Tomcat 連動用の設定セットです。
ですので、この設定セットを元にして設定を変更していきます。
設定方法については 通常の JBoss の設定と同様です。
つまり、Tomcat, JBoss ともに普通に設定すればいいだけです。

起動


通常の JBoss 同様 jboss/bin ディレクトリに移動後、./run.sh でOKです。
例えば設定セット postgres を指定して起動なら

 % ./run.sh postgres 


です。
ただし、Tomcat で JSP を使いたい場合には JDK の tools.jar を CLASSPATH に含めないといけないので、run.sh で tools.jar を CLASSPATH に追加する処理を追加しておきます。

 JBOSS_CLASSPATH=$JBOSS_CLASSPATH:run.jar:$JAVA_HOME/lib/tools.jar 


ear ファイルについて


普通に jar ファイルを JBoss に deploy させることは問題なくできますが、EJB を使ったサーブレットを Tomcat から実行させるとおそらくエラーが出てうまく実行できないはずです。
これを回避するには Tomcat の CLASSPATH に EJB のクラスが入った jar ファイルを追加すればいいのですが、JBoss/Tomcat では ear ファイルというものを使ってもっとスマートに解決することが出来ます。
ear ファイルとは、簡単に言えば EJB の jar と サーブレットを含むような Web コンテンツからなる war ファイルを合わせたものです。
そして、この ear ファイルを JBoss/Tomcat に deploy させることにより、EJB モジュールと Web コンテンツの双方を JBoss/Tomcat に認識させることができます。
ear ファイルの作り方ですが、EJB の jar ファイルとサーブレットを含む war ファイルは普通に作り、その他に META-INF/application.xml というファイルを作成します。
application.xml はこんな感じです(マニュアルに載ってたサンプル)

      <?xml version="1.0" encoding="ISO-8859-1"?>
            
      <application>
          <display-name>My application</display-name>
 
          <module>
              <web>
                  <web-uri>webmodule.war</web-uri>
                  <context-root>/servlets</context-root>
              </web>
          </module>
            
          <module>
              <ejb>beans.jar</ejb>
          </module>
                      
      </application>


そして、この3つのファイルを jar で固めて ear ファイルとしてできあがりです。
後は、出来た ear ファイルを jboss/deploy にコピーすれば完了です。

JavaMail


JBoss では JavaMail の機能を使うことが可能です。
EJB 内部だけではなく外部でも使用可能なので、例えば Tomcat バンドル型の JBoss では、EJB を全く使わないようなサーブレットで JBoss 内の JavaMail を使うことができたりもします。
以下、使用方法です。

jboss.jcml の編集


jboss.jcml の「 Mail Connection Factory 」の部分を編集します。
設定項目は、JNDIName, Configuration, User, Password とありますが、実際に修正するのは User と Password だけでOKでしょう。

メール設定ファイルの編集


メール設定ファイルとは、jboss.jcml と同じディレクトリにある、mail.properties のことです。
ただし、jboss.jcml の「 Configuration 」で設定を変えている場合にはその設定したファイルとなります。
ここでは、メール送受信の際のプロトコル、ユーザー名、メール送受信のためのサーバ、from 行のアドレス、デバッグオプションが設定できます。
もともとある mail.properties ファイルの設定例を上書きしていけば簡単に設定できるはずですので特に細かいことは書きません。
デバッグオプションはマニュアルによると、とりあえず1度うまく動けば false にしておけばいいようです。

ejb-jar.xml (配備記述子)の編集


ejb-jar.xml の の子ノードとして以下のような設定を追加します。

 <resource-ref>
     <res-ref-name>mail/Mail</res-ref-name>
     <res-type>javax.mail.Session</res-type>
     <res-auth>Container</res-auth>
 </resource-ref>


res-ref-name で設定した名前は任意に付けられますが、次に設定をする jboss.xml と合わせないとダメです。

jboss.xml の設定


jboss.xml の の子ノードとして以下のような設定を追加します。

 <resource-managers>
     <resource-manager>
         <res-name>mail/Mail</res-name>
         <res-jndi-name>Mail</res-jndi-name>
     </resource-manager>
 </resource-managers>


res-name には ejb-jar.xml の res-ref-name で設定した名前を、res-jndi-name には jboss.jcml で設定した JNDI の名前を設定します。

以上で、JavaMail が使える環境となります。
実際のコードは以下のような感じになります。

 try {
     session = (Session)PortableRemoteObject.narrow(new InitialContext().lookup("java:Mail"), Session.class); } catch (javax.naming.NamingException e) {
     e.printStackTrace();
 }
 
 try {
     MimeMessage m = new MimeMessage(session);
     m.setFrom();
     Address[] to = new InternetAddress[] {
         new InternetAddress("koumei2@k2.desu.com")
     };
     m.setRecipients(Message.RecipientType.TO, to);
     m.setSubject("JavaMail Test");
     m.setText("Test from inside EJB Using JBoss\n てすとでっす", "iso-2022-jp");
     Transport.send(m);
 }
 catch (javax.mail.MessagingException e) {
     e.printStackTrace();
 }


お問い合わせは 掲示板 にて。