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

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

JBossと3層構造について

スポンサーリンク

化石のようなJBossを動かしていたら、以下のようなエラーが出た。

javax.management.InstanceNotFoundException: JMImplementation:service=LoaderRepository,name=Default 
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1010)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:804) 
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:784) 
at org.jboss.system.server.ServerImpl.initBootLibraries(ServerImpl.java:440) 
at org.jboss.system.server.ServerImpl.doStart(ServerImpl.java:261) 
at org.jboss.system.server.ServerImpl.start(ServerImpl.java:221) 
at org.jboss.Main.boot(Main.java:148) 
at org.jboss.Main$1.run(Main.java:381) 
at java.lang.Thread.run(Thread.java:595) 
javax.management.InstanceNotFoundException: JMImplementation:service=LoaderRepository,name=Default 
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1010)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:804) 
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:784) 
at org.jboss.system.server.ServerImpl.initBootLibraries(ServerImpl.java:440) 
at org.jboss.system.server.ServerImpl.doStart(ServerImpl.java:261) 
at org.jboss.system.server.ServerImpl.start(ServerImpl.java:221) 
at org.jboss.Main.boot(Main.java:148) 
at org.jboss.Main$1.run(Main.java:381) 
at java.lang.Thread.run(Thread.java:595) 
続行するには何かキーを押してください . . .

これは単純にJDKが新しすぎるからで、JAVA_HOMEのパスをJDK1.4くらいのやつに通せばこのエラーはなくなる。

Antを実行した時に起きた以下のエラーも同様。コンパイルするJDKのバージョンが新しすぎるとエラーが生じる。

- nested throwable: (java.lang.UnsupportedClassVersionError: Unsupported major.minor version 50.0

ここまでやって気付いたけど、やっぱりもう、日本語の書籍でJBossの勉強をするのは厳しい。
洋書でやるしかない。今の新しいバージョンのJBossの情報は日本語書籍ではもうほとんど出ていないし、あるとしても2005年より昔の、俺が高校生の頃に使われていたような化石の解説の本ばかりだ。
JBossは非常に便利なのに、なんでこんなに書籍が少ないのか。それはきっと、需要がないからなのだろう。
需要が無いから本が書かれないし、洋書も翻訳されない。
Springの本も数えるほどしかない。自分でオープンソースを開けて勉強するか、洋書を読むか、あるいはどっちもやるか、しかない。
何事も、中級者からが難しい。初心者向けは裾野が広いが、そこから登って行くにはさらに苦労して自分で切り開いていく必要があるのだろう。
中級者への一歩を踏み出したいものだ。

サーブレットコンテナ

サーブレットコンテナはJavaEEにおけるWeb層のコアとなるテクノロジーだ。
JSPサーブレットはスタンドアローンで起動することはできない。コンテナの中で動くための特殊なインターフェースを実装する必要がある。

JBoss4.2はTomcat5.5.9がデフォルトのサーバコンテナである。
JBoss3.Xではたしか、Jettyがデフォルトだったと思う。
TomcatはSARファイルとしてデプロイされている

$JBOSS_HOME/server/default/deploy/jbossweb-tomcat55.sar

普通のTomcatと同じようにserver.xmlがあり、Tomcatのリッスンポートの変更ができる。

3層アプリケーション

JavaEEアプリケーションには3つの基本的な層がある。
・プレゼンテーション層
・ビジネス層
・永続化層
の3つである。

良いアプリケーションとは、それぞれの層が高い凝集力、低い結合度で構成されているものだ。

In a well-engineered application, components in each tier are "highly cohesive" and "loosely coupled".

低い結合度とは、それぞれの層が不必要に依存しないということだ。

プレゼンテーション層

プレゼンテーション層ではModel/View/Controllerパターンが知られている。
ビュー:実際にブラウザなどで見られるものを指す
モデル:Plain Old java Object(POJO)で作られたシンプルなJavaBean
コントローラ:ビューとモデルをつなぐもの。リクエストを処理してコントロールする。基本的にはサーブレット

JSPJavaのコードをHTMLに埋め込むのは得策ではない。
第一にscriptletのコードはruntimeまでコンパイルされない。
コンパイルなしでは徹底的にテストすることはdけいない。アプリケーション横断的に利用することができない。

だから、JSPJavaのコードを埋め込むのではなく、Tag Librariesを使うべきだ。
TaglibはJavaのクラスにコンパイルされて、整形されてHTMLに埋め込まれる。
またTaglibはJARファイルとして再配賦、再利用可能である。

読んだ本

JBoss at Work: A Practical Guide

JBoss at Work: A Practical Guide

感謝のプログラミング

今回で感謝のプログラミングは【280時間目】
10000時間まで、あと【9720時間】