読者です 読者をやめる 読者になる 読者になる

感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

【プログラミング163.5時間目】JBossの入門知識のまとめ

<スポンサーリンク>


・分散オブジェクトとは、ネットワークで結ばれたマシンや異なるプロセス上で動作するオブジェクトが、お互いの隔たりを意識せずにメソッド呼び出しを行える環境を実現するための技術のこと。

EJBの特徴は、CMP(Container-managed Persistence)と呼ばれる、データベース・アクセスを自動化する機能が用意されている点である。

O/Rマッピングとは、オブジェクト指向とリレーショナル・データベース間の隔たりを埋めるメカニズムのことである。

・大規模データベースを使用するケースや、多数のテーブル間の結合が必要になるケースなど、SQL文レベルでのパフォーマンス・チューニングが必須とされる用途には、CMPは向いていない。

・DDファイルによるセキュリティ管理
ejb-jar.xml

<method-permission>
	<role-name>Mizky</role-name>
	<method>
		<ejb-name>MyEjb</ejb-name>
		<method-name>doSomething</method-name>
	</method>
</method-permission>

このように書いた場合は、EJBコンテナがメソッド呼び出し前に、そのロールがMizkyであるかをチェックしてくれる。
ロールがMizkyじゃないと、例外が送出されてメソッドの呼び出しは中断される。

・コネクションプーリングとは、データベース。コネクションの再利用によってリクエストの処理を高速化する仕組みである。

・Enterprice Beanには分散オブジェクト機能をもたせることができる。

・ネットワークを隔てたマシンや異なるJVM上で動作するEnterprice Bean同士があたかも同じJVM上で動作しているかのように簡単にアクセスし合うことができる。

EJBには敷居の高さがあるが、そうした点を踏まえてEJBを使いこなすことがえきれば、EJBはサーバ・サイド開発において極めて強力な武器になる。

コンポーネントとは、コンテナによって実行環境から隔離されたオブジェクトの集まりのこと

JavaEEAPIの例

API サービス内容
JNDI ネーミング、ディレクトリサービス
JDBC データベース・アクセス
Servlet/JSP サーブレットJSP
EJB EJBコンポーネントの機能
JTA 分散トランザクション管理
JMS 非同期メッセージング
JAXP XML文書処理
JavaMail メール機能


・JBossとは、オープンソースJavaEEサーバである。
JavaEEサーバ製品は1ノード当たり100万円以上といった価格が設定されていて、クラスタ構成にしようとしたら、その数倍の費用が必要だった。
今読んでいる本が2003年に出版された本だから、当時はそれくらい"J2EEサーバ"は高価なものだったのだろう。

J2EEサーバで稼げていた人達は、JBossの台頭をどのような気分で見ていたのだろうか。
オープンソースで無料で商用サーバと同等の機能をどんどん提供されていくのはどんな気分なのだろう。

使う側から見ると、オープンソースによって救われること限りない。

・JBossはホットデプロイ機能を備えている。
ホットデプロイ機能があれば、deployディレクトリにEARファイルを置くだけで、自動的に配備作業が開始されるというもの。
EARファイルとは、JavaEEアプリケーションをパッケージ化したファイルのことである。

・JBossのセッションレプリケーションとは二重化のこと。

・JBossのインストール手順
JDKをインストールして、環境変数を設定する
②JBossのインストールパッケージを入手する。zipファイル
③zipを解凍して、解凍したパスに環境変数を設定する。
たとえば、
C:\jboss-3.2.1_tomcat-4.1.24
にJBossを解凍したとしたら、
環境変数「JBOSS_DIST」に「C:\jboss-3.2.1_tomcat-4.1.24」を設定する。
④JBossの起動
>cd %JBOSS_DIST%\bin
>run.bat

とすると、起動するはずがこんなエラーが・・・

00:16:53,752 ERROR [Server] Failed to start
javax.management.InstanceNotFoundException: JMImplementation:service=LoaderRepository,name=Default
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1094)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:833)
        at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:761)
        at org.jboss.system.server.ServerImpl.initBootLibraries(ServerImpl.java:480)
        at org.jboss.system.server.ServerImpl.doStart(ServerImpl.java:316)
        at org.jboss.system.server.ServerImpl.start(ServerImpl.java:272)
        at org.jboss.Main.boot(Main.java:150)
        at org.jboss.Main$1.run(Main.java:388)
        at java.lang.Thread.run(Thread.java:662)
Failed to boot JBoss:
javax.management.InstanceNotFoundException: JMImplementation:service=LoaderRepository,name=Default
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1094)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:833)
        at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:761)
        at org.jboss.system.server.ServerImpl.initBootLibraries(ServerImpl.java:480)
        at org.jboss.system.server.ServerImpl.doStart(ServerImpl.java:316)
        at org.jboss.system.server.ServerImpl.start(ServerImpl.java:272)
        at org.jboss.Main.boot(Main.java:150)
        at org.jboss.Main$1.run(Main.java:388)
        at java.lang.Thread.run(Thread.java:662)

ちょっと検索してみると、以下のような答えがあった。
http://www.coderanch.com/t/546363/JBoss/failed-boot-jboss

You cannot run JBoss AS 3.2.2 using JDK 6. You will need an ancient JDK instead, such as 1.3.1 or 1.4.2.
Why did you download JBoss AS 3.2.2? That is really, really old.

これはJBoss3.1.XがJDK6では動かないことを意味する。

なので、早速JDK1.4.2をダウンロードする。
http://java.sun.com/j2se/1.4.2/download.html
ここからたどっていって、
「j2sdk-1_4_2_19-windows-i586-p.exe」をダウンロードする。
exeを実行すると、ここにJavaがインストールされた。

それでは、さっきのJBossのrun.batをラップするバッチを作る。
JBossを起動するときだけJava1.4を使うようにするためである。

my_run.bat

set JAVA_HOME=C:\j2sdk1.4.2_01\bin
./run.bat

あれ、今度はこんなエラーが。

C:\jboss-3.2.1_tomcat-4.1.24\bin>./run.bat
Could not locate C:\j2sdk1.4.2_01\bin\lib\tools.jar. Unexpected results may occu
r.
Make sure that JAVA_HOME points to a JDK and not a JRE.
===============================================================================
.
  JBoss Bootstrap Environment
.
  JBOSS_HOME: C:\jboss-3.2.1_tomcat-4.1.24\bin\\..
.
  JAVA: C:\j2sdk1.4.2_01\bin\bin\java
.
  JAVA_OPTS:  -Dprogram.name=run.bat
.
  CLASSPATH: ;C:\j2sdk1.4.2_01\bin\lib\tools.jar;C:\jboss-3.2.1_tomcat-4.1.24\bi
n\\run.jar
.
===============================================================================

要は、C:\j2sdk1.4.2_01\bin\の下に
「lib\tools.jar」が無いからダメってこと。
何が間違ったかというと、my_run.bat。

JAVA_HOMEにはset JAVA_HOME=C:\j2sdk1.4.2_01\をsetする。

set JAVA_HOME=C:\j2sdk1.4.2_01\
./run.bat

すると一応起動した。

16:15:48,695 INFO  [URLDeploymentScanner] Started
16:15:48,707 INFO  [MainDeployer] Deployed package: file:/C:/jboss-3.2.1_tomcat-
4.1.24/server/default/conf/jboss-service.xml
16:15:48,708 INFO  [Server] JBoss (MX MicroKernel) [3.2.1 (build: CVSTag=JBoss_3
_2_1 date=200305041533)] Started in 7s:131ms

あとは、8080がOracleか他のtomcatと競合しているから、ポートの設定をを変更しなければいけない。

参考にした本はこちら。
ちょっと古いけれど、日本語の書籍が少ない中、非常に助かる。

EJB+J2EE入門―JBossとStrutsで作るWebアプリケーション (Java WORLD BOOKS)

EJB+J2EE入門―JBossとStrutsで作るWebアプリケーション (Java WORLD BOOKS)