カテゴリ: JavaEE

先週javax.xml.bindをjakarta.xml.bindに変えたばっかだが、JAX-RS1.0のライブラリresteasyが動作しなくなったので戻す。ぐぬぬ。resteasyごと最新化すると、これがまた最新版では使い方が大きく変わっていて大変だからな。新プロトコルに対応するためにインスタンス作成をnewからbuilder経由に変える必要ってあるか?Javaのライブラリは割とこのタイプの謎改変が多いけど、最初からbuilder経由ならまだしも何でそんな事をするのだろう…。作者が皆デザパタ本読んで被れたとか?
ちなみにIvyで指定するライブラリはJakartaの時にあれこれ試して決めたコンビのVer2を指定するのが良いみたい。
<dependency org="javax.xml.bind" name="jaxb-api" rev="2.3.1"/>
<dependency org="org.glassfish.jaxb" name="jaxb-runtime" rev="2.3.5"/>
com.sun.xml.bindのはJava 17だと内部クラスにアクセスするので駄目みたい。ちなみにactivemqは先月出た最新版でも未だにsunの方を使っている。まぁそのうち誰か文句言って直すだろう。
ドタバタしてしまったが、jaxbの必須ライブラリが整理できたしまぁヨシ。
あと、副作用として何故かJavaメールが文字化けしなくなった。何か、キャラクタセット関係のデフォルト値が変わったのかしら。あるいは今回バタバタしてjarが結構入れ替わったからか。



このエントリーをはてなブックマークに追加 mixiチェック

よくわからぬので色々試したが、結局、Ivyの設定は以下が良いようだ。
<dependency org="jakarta.xml.bind" name="jakarta.xml.bind-api" rev="3.0.1"/>
<dependency org="org.glassfish.jaxb" name="jaxb-runtime" rev="3.0.2"/>
revは固定しないとRC版拾ってきたりするので3.x.xを固定すること。どうもJAXBはv2までがjavax.xml.bind、jakarta.xml.bindはv3からの模様。
あと実装はeclipseのやつはjaxb.propertiesとか必要だったりJAXB.unmarshalが使えなかったり制限があるのでglassfishの方を使うのが良さげ。
こんな手間を喰うのもJava 11で標準ライブラリがごそっと消えたから…。お陰でMohoの作業が全くできなかったよ。ボーダーブレイクはやったけど。


このエントリーをはてなブックマークに追加 mixiチェック

You can run the Oracle Universal Installer in either graphical mode or silent mode.

Fusion Middleware Installing Software with the Oracle Universal Installer

マジかよ。不便過ぎる…。
WebLogicのためにXを入れろというのか。サイレントモードなんて怪しいものはいきなり使いたくないし。GUIにしたからと言って別に便利になった訳でもないし。
そもそもサーバ製品なので機械にX端末ついてない事がしばしば。なのでどこかにXを飛ばさねばならぬが、昨今はセキュリティにやかましく、昔のようにxhost +してからDISPLAY設定するだけでスパッと手元のEWSの画面にemiclockが出る環境は稀。VNCを設定してからプロキシを経由してSSHポート転送…等々それだけで一苦労。客先に行ってこれが元でインストールできない事態も多いにあり得る。私などVNC Viewerでポート番号を指定すべきところ*1画面番号を指定して繋げずよく悩んだ。
返す返すもBEA Systemsは惜しい人を亡くした…。

*1:SSH転送の時は何故か画面番号ではなくlocalhost:ポート番号である

このエントリーをはてなブックマークに追加 mixiチェック

20-22章
Strutsの後釜(になりたがっているらしい)。ちょっと微妙だな。Strutsの宜しく無い点は、URLとクラスの対応及びページ遷移をstruts-config.xmlに書くのが大変面倒くさいのとカスタムタグ暗記が大変点なんだけど、JSFもこれまたページ遷移をfaces-config.xmlに書いてカスタムタグ使うという…。殆ど一緒じゃないか。
Beehive netui流行らないかなー*1

*1:あれはJavaソース中のアノテーションでページ遷移を指定するのだ

このエントリーをはてなブックマークに追加 mixiチェック

16章/17章
JMSの説明と、MDBじゃない単体APでのJMSプロデューサとJMSコンシューマの例。
JMSの良い点は通信の確実性だな。受信側の処理が正常終了してから始めてキューから削除されるんで途中でサーバが落ちても大丈夫。ただヘボい事すると「受信→処理失敗→また同じメッセージ受信→処理失敗」を延々繰り返すポイズンメッセージ。
・JMSプロバイダに対してキューからの削除指示は、AUTOだとOnMessageを抜けると同時に消え、CLIENTだとメソッドコールで明示するタイミングで消える。
・JMSプロバイダに対して複数メッセージ送信を1トランザクションに、複数メッセージ受信を1トランザクションにすることが出来る。ロールバック発生時は再度最小のメッセージ送信or受信からやり直し。
・他のDB更新等と一緒にグローバルトランザクションに参加することも出来る。

17章はMDBのコードサンプル。
以下の2つの状態がある
1.アクティブ(=メモリ上にプールされている状態)、2.存在しない。
管理はコンテナで不定期。生成、破棄の際に呼ばれるコールバックをアノテーションで指定できる。

このエントリーをはてなブックマークに追加 mixiチェック

15章。11章〜14章のJPAは眠くなって仕方ないのでスキップ。
1.同期・要求応答型
2.一方向型
3.非同期/コールバック型
4.非同期/ポーリング型
があるよ、という常識的な話。
ちなみに私の好きなパターンは4。処理要求をHTTPで受けたらJMSキューに入れ、入れる処理成功を確認して200をリプライ。後ほどブラウザから処理結果画面を参照。と書いてみると実は2と1の組み合わせなのか。

このエントリーをはてなブックマークに追加 mixiチェック

11章。長い。余りの長さと詰まらなさに1章分は読めず。つか私の経歴からすっぽり抜けているのがこのDB設計とファームウェア系。
11.1.1
・リレーションシップの実装はJavaのクラスとRDBとで異なる。概念や出来る事も微妙に異なる。
JPAではエンティティクラスとテーブルとの対応をアノテーションで示す。リレーションシップもアノテーションで示す。
11.1.2
・リレーションシップのパターンには1.方向 2.多重度がある。
1.方向には単方向と双方向がある。
2.多重度には One-To-One Many-To-One One-To-Many Many-To-Many の4つがある。
具体例がP226に載っていて判り易いので参照。

このエントリーをはてなブックマークに追加 mixiチェック

10章。
・DAOとJPAのコード比較が。JPAの方が微妙に短い、が、かなり似ている。
JPAはコードとは別に定義ファイル(persistence.xml)が必要。META-INFに置く。
 JDBCドライバのクラス名とかDBへのログイン用情報とかトランザクション参加方法とか
・DAOパターンの場合は
 DAOクラス=DBにアクセスしてDTOを返す
 DTOクラス=ROW1つ分の情報
JPAの場合は
 エンティティ操作クラス(=DAOクラスに相当)。ユーザがプログラム。エンティティマネージャを呼んでエンティティを取得したり。
 エンティティマネージャがSQLを発行する。
 エンティティクラス(=DTOに相当)
・リレーションシップの無いエンティティを使った例
・フィールドとカラムの対応は、エンティティクラスのアクセサメソッド前のアノテーションに記述する(XML定義ファイルではなくソースに書くのでこれは良い)。
・エンティティマネージャの取得方法は、
 1.コンテナ管理 2.AP管理の二種類。persistence.xmlに記述。
 EJB中で使うなら前者。サーブレットで使うなら後者が良い。理由はP207〜参照。エンティティマネージャはスレッドセーフではない。
トランザクション
 1.JTAに参加 2.リソースローカルTXに参加 がある。persistence.xmlに記述。EJBなら前者が、サーブレットなら後者がよさげ。
・コールバックメソッド
 SQL発行する前後にJPAエンジン側から呼ばれるメソッド。
 DBへのSQL発行を契機に呼ばれる(SQL発行はJPAエンジンが色々まとめて最適化して行う)。INSERT発行前とかSELECT発行後とかいくつか。

うーむ、結構面倒そう。JPAは余り流行らなそうな予感。DAOでいいじゃんみたいな。エンティティオブジェクト/エンティティマネージャのライフサイクルやスコープで何かハマりそうな気がする。でもHibernateは流行りつつあるというし需要はあるんだろうな。

このエントリーをはてなブックマークに追加 mixiチェック

9章 O/Rマッピングの概要
JavaのオブジェクトとリレーショナルDBのマッピング、がO/Rマッピング
・自前マッピング
 ・直接JDBCを操作 原始的
 ・DAOパターン 現在メジャーな手法。永続化ロジック専門のクラスを噛ませる。
・自動マッピング
 ・エンティティBean イマイチ流行らなかった。
 ・O/Rマッピングフレームワーク。 Hibernateとか。
JPAは自動マッピングの仕組み
 エンティティBeanの後継でHibernateの影響を受けたPOJOベースの自動マッピングアーキテクチャ
 JPAは仕様。実際に使うには「JPAエンジン」が必要。GlassFishに内蔵されたOracle TopLinkが一例。WebLogicのはBEA KodoでそれをApacheに寄贈してオープンソースにしたのがOpenJPA

このエントリーをはてなブックマークに追加 mixiチェック

7章と8章
アスペクト指向プログラミングの概要。
 名前は聞いた事あるけどこれはやったこと無い新技。んー…Javaって#ifdefを捨てたばかりにこんなモノを…。
 ・Javaを拡張した特殊言語で記述されたソースを特殊コンパイラで処理し、コンパイル時に織り込むタイプ…AspectJ
 ・定義ファイルに基き、特殊クラスローダがクラスロード時に織り込むタイプ…JBoss AOP
 ・定義ファイルに基き、実行時に織り込むタイプ…Spring AOP
 ジョインポイントは関数の呼び出しの前後とか色々。決め打ちだったり。クラスロード時派や実行時派はおそらくメソッド呼び出しの前後に限られるだろう事は想像に難くない。
EJB3.0におけるインターセプタ
 EJBコンテナがBeanを呼ぶ時にFacadeなクラスを挟むという機能。挟む場所はアノテーションで記述。クラスに指定するとすべてのメソッドが挟むことになる。メソッドに指定するとそのメソッドの時だけ挟む。ソースコードに記述する他に、ejb-jar.xmlで指定することも出来る。
EJBタイマーサービス
 「今からn秒後にコールバックを呼び出して」とコンテナに指定する。指定した関数を抜けても作動する。あんまり使わないな。

このエントリーをはてなブックマークに追加 mixiチェック

↑このページのトップヘ