JBossASは、オープンソースのJ2EEサーバー。
RedHat社がサポートしているものはJBossEAS(Enterprise Application
Server)(JBossEAP(Enterprise Application Platform)の一部)という名で、バージョンが異なる。JBossASを元にして色々まとめたりテストしたりしたもの。
(jboss.orgが元祖(オープンソース)、jboss.comとredhat.comがRedHat)
JBossASのAPサーバー部分はTomcatがベースになっているらしい。
Tomcat自体はEJBの機能を持っておらず、JBossでEJBその他の機能を追加しているらしい。
|
|
JBoss | JDK | JavaEE | 備考 |
---|---|---|---|
JBossAS 4.2.2.GA | 1.5 | 1.4、1.5の一部 | |
JBossAS 4.2.3.GA | 1.5、1.6 | JDK1.6版も用意された。 | |
JBossAS 5.0.0.CR1 | 1.6 | 1.5 | CRとは「Candidate Release」つまり「リリース候補」。 beta版を脱し、正式リリース直前ということか? |
JBoss | JDK | JavaEE | Oracle | 備考 | 更新日 |
---|---|---|---|---|---|
JBossEAP 4.2 | 1.5 | 9i・10gR2に対し 10.2用のJDBC |
|||
JBossEAP 4.3 | 1.5、CP02から1.6に対応 | 1.4、1.5の一部 | JBossAS 5.0.0がベース? | 2008-10-04 |
jboss-4.2.3.GA-jdk6.zipをダウンロードしてみた。
ファイルサイズは95MB程度だがSourceForgeからだと転送速度が10〜12kB/s程度しか出ない為、ダウンロードに2〜3時間かかる。
ダウンロードしてきたアーカイブを展開するだけ。
ここでは「C:\jboss」というディレクトリーを作り、その下に展開した。
「C:\jboss\jboss-4.2.3.GA」という形になっている。このディレクトリーをJBOSS_HOMEと呼ぶ。
(プログラム(ウェブアプリ)内からは、jboss.home.dirといったシステムプロパティーで取得できる。[2008-10-14])
JBossAS4.2.3のドキュメントには「コンフィグをいじって云々」と書かれているように思われるが、たぶんJDK1.5版からJDK1.6にする為の設定のことだと思われる。
JDK1.6版は特に何もいじらなくても動いた。
jboss-4.2.3.GA-jdk6の場合、実行にはJRE1.6が必要。
環境変数JAVA_HOMEはjavaコマンドの場所(自分は「C:\Program
Files\Java\jdk1.6.0」)をセットしておく。
環境変数JAVA_HOMEが定義されていない場合、「java」で実行できるバージョンの(つまりパスが通っている)javaコマンドが実行される。(WindowsではJDK1.6をインストールしていれば、環境変数JAVA_HOMEを定義してなくても動く)
JBOSS_HOME/bin/run.batを実行すると、コンソール(コマンドプロンプトの画面)が開く。
=============================================================================== JBoss Bootstrap Environment JBOSS_HOME: C:\jboss\jboss-4.2.3.GA JAVA: C:\Program Files\Java\jdk1.6.0\bin\java ←ここに環境変数JAVA_HOMEが使われる JAVA_OPTS: -Dprogram.name=run.bat -server -Xms128m -Xmx512m -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 CLASSPATH: C:\Program Files\Java\jdk1.6.0\lib\tools.jar;C:\jboss\jboss-4.2.3.GA\bin\run.jar ===============================================================================
しばらく待って、一番下にStartedのメッセージが出ていればOK。
22:47:19,406 INFO [Server] JBoss (MX MicroKernel) [4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA date=200807181439)] Started in 30s:594ms
あとは管理画面が表示できれば成功。
JBossを起動した後、ブラウザーでURLに「http://localhost:8080/」を入力すると「Welcome to JBoss」のページが表示される。
ここにはJBoss Managementという管理メニューがある。
JMX consoleのリンクをクリックすると、http://localhost:8080/jmx-console/に遷移する。
ここで、JBossが管理しているオブジェクトを見ることが出来る。
JMX仕様に則ったオブジェクトをただ表示しているだけらしいが、
画面からメソッドの引数を入力して実行ボタンを押下することで、JMXオブジェクトのメソッド呼び出しが出来てしまう!
これでオブジェクトの内容を表示したり、物によっては値を設定したり出来るらしい。
ディレクトリ・ファイル | 概要 | 備考 | |||
---|---|---|---|---|---|
インストールディレクトリ (JBOSS_HOME/) |
bin | run.bat | JBossを起動するバッチ | ||
shutdown.bat | JBossを終了するバッチ | ||||
client | *.jar | クライアント用ライブラリー | JBossAS管理外のバッチアプリで使用する。 (JNDIの初期コンテキスト取得とか) |
||
docs | DTD等 | JBossの説明が入っているわけではない。 | |||
examples | 設定例 | ||||
lib | *.jar | ||||
server | default | conf | 設定ファイル類 | ||
data | 永続データ | ||||
deploy | デプロイ | →動作させる実験 | |||
lib | 全アプリ共通のライブラリー | JBossが使うものも入っている。 HttpServlet等はservlet-api.jarにある。 |
|||
log | ログ | ||||
tmp | earファイルやwarファイルを展開したもの。 | ||||
work | 作業用ディレクトリー | jspを変換したjavaファイルやclassファイル。 |
ディレクトリ・ファイル | 概要 | 更新日 | ||
---|---|---|---|---|
jboss-web.deployer | server.xml | Tomcatのserver.xmlと同等。 | 2008-11-23 | |
conf | web.xml | デフォルト(*.jspやindex.html)のサーブレット定義。 | 2008-11-30 | |
*-ds.xml | データソースの設定ファイル。 | 2008-11-23 |
JBOSS_HOME/server/default/deploy/の下にディレクトリーを作る
(あるいはWARファイルを置く)と自動的にデプロイされる。
「http://localhost:8080/test/」というコンテキストルートtestでアクセスしたい場合、ディレクトリー名は「test.war
」とする。
(内容はWARファイルを展開したのと同じだが、単純に試すだけならWEB-INFは省略可)
デプロイされるとコンソールに以下のようなメッセージが表示される。
22:55:11,828 INFO [TomcatDeployer] deploy, ctxPath=/test, warUrl=.../deploy/test.war/
HTMLファイルやJSPファイルは普通にそのディレクトリーの下に置けばよい。
>cd %JBOSS_HOME%\server\default\deploy C:\jboss\jboss-4.2.3.GA\server\default\deploy>tree /f 〜 ├─test.war │ sample.html │ sample.jsp │ 〜
これでhttp://localhost:8080/test/sample.htmlで そのHTMLを表示できる。
なお、JSPから変換されたjavaファイルやclassファイルは以下のような場所に置かれる。
>cd %JBOSS_HOME%\server\default\work\jboss.web\localhost\test C:\jboss\jboss-4.2.3.GA\server\default\work\jboss.web\localhost\test>tree /f フォルダ パスの一覧 ボリューム シリアル番号は BYYY-9ZZZ です C:. │ tldCache.ser │ └─org └─apache └─jsp sample_jsp.class sample_jsp.java
ほんと、Tomcatそっくり(笑)
Tomcatの場合と同様にtest.warの直下にWEB-INFを作り、その下にweb.xmlとclassesを作り、コンパイルしたサーブレットクラスをclassesに入れればよい。
なお、サーブレット(HttpServlet)をコンパイルする為に必要なライブラリーはJBOSS_HOME/server/default/lib/servlet-api.jar。
ちなみに、web.xmlを書き換えると自動的に再デプロイしてくれる。
JNDIを使用するには最初にコンテキストを取得する必要がある。
JBoss上で動くアプリ(サーブレット等)では、以下のようにして取得できる。
import javax.naming.*; public Context initContext() throws NamingException { InitialContext ctx = new InitialContext(); return ctx; }
バッチアプリ(リモート)では、以下のようにして取得する。
public static Context initContext() throws NamingException { Hashtable<String, String> ht = new Hashtable<String, String>(); ht.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); //又は ht.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.NamingContextFactory"); ht.put(Context.PROVIDER_URL, "localhost"); //又は ht.put(Context.PROVIDER_URL, "localhost:1099"); //又は ht.put(Context.PROVIDER_URL, "jnp://localhost:1099"); InitialContext ctx = new InitialContext(ht); return ctx; }
なお、実行時のクラスパスにJBOSS_HOME/client/jbossall-client.jarが必要。
無いと以下のような例外が発生する。
javax.naming.NoInitialContextException: Cannot
instantiate class: org.jnp.interfaces.NamingContextFactory [Root
exception is java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory]
localhost以外(リモート)のJBossのJNDIからContextを取得したい場合、JBossをIPアドレスを指定して起動する必要がある。[2008-12-06]
(そのIPアドレスをPROVIDER_URLに指定する)
JBoss内に登録されているJNDIを確認するには、JNDIViewを使う。
Web Applications java:comp namespace of the http-invoker.sar/invoker.war application: +- UserTransaction[link -> UserTransaction] (class: javax.naming.LinkRef) +- env (class: org.jnp.interfaces.NamingContext) | +- security (class: org.jnp.interfaces.NamingContext) 〜 java: Namespace +- XAConnectionFactory (class: org.jboss.mq.SpyXAConnectionFactory) +- DefaultDS (class: org.jboss.resource.adapter.jdbc.WrapperDataSource) 〜 Global JNDI Namespace +- TopicConnectionFactory (class: org.jboss.naming.LinkRefPair) +- jmx (class: org.jnp.interfaces.NamingContext) | +- invoker (class: org.jnp.interfaces.NamingContext) | | +- RMIAdaptor (proxy: $Proxy47 implements interface org.jboss.jmx.adaptor.rmi.RMIAdaptor,interface org.jboss.jmx.adaptor.rmi.RMIAdaptorExt) | +- rmi (class: org.jnp.interfaces.NamingContext) | | +- RMIAdaptor[link -> jmx/invoker/RMIAdaptor] (class: javax.naming.LinkRef) +- HTTPXAConnectionFactory (class: org.jboss.mq.SpyXAConnectionFactory) +- ConnectionFactory (class: org.jboss.mq.SpyConnectionFactory) 〜
JBossAS4.2.3でJMSのキューを登録するには、以下の設定ファイルに定義を追加する。[2008-08-16]
JBOSS_HOME/server/default/deploy/jms/jbossmq-destinations-service.xml:
〜 <server> 〜 <mbean code="org.jboss.mq.server.jmx.Queue" name="jboss.mq.destination:service=Queue,name=MyQueue1"> <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends> </mbean> </server>
JNDI名としては「queue/MyQueue1」となる。
JNDIビューでは、グローバルJNDIの所に「queue」→「MyQueue1」として表示される。
もしくは、「JBOSS_HOME/server/default/deploy/jms」直下に自分で「なんちゃら-service.xml」というファイルを作ってもよい。
JBOSS_HOME/server/default/deploy/jms/hishidama-service.xml:
<?xml version="1.0" encoding="Shift_JIS"?> <server> <mbean code="org.jboss.mq.server.jmx.Queue" name="jboss.mq.destination:service=Queue,name=MyQueue1"> <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends> </mbean> </server>
jmsディレクトリー配下のファイルを変更すると、自動的にデプロイされる。