S2TopLink現状まとめ
TopLink Essentialsの問題
- PersistenceProvider.createEntityManagerFactoryで、TopLink以外のPersistenceProviderを定義したpersistence-unit名を渡すとエラーが発生
- S2TopLink側で対応済
- EntityManager.createNamedQueryで、存在しないNamedQuery名を渡してもエラーが発生しない
- S2TopLink側で対応済
- マッピングファイルで、query記述にCDATA表記が使えない
- sql-result-set-mappingのcolumn-result名を大文字にしないと判別してくれない
- Entityのフィールドにアノテーションを定義していると、N:1のLAZYロードが失敗する
- 現状では、アノテーションをgetterに書くしかない。これはかなり致命的なので、早急に直して欲しいのだが・・・
S2TopLinkの課題
- TopLinkのEntity自動登録を利用するときのTempClassLoader定義
- HotdeployClassLoaderはNamingConventionに依存するので、TopLink自動登録のときは使えない。でも自動登録自体はS2が提供する自動登録規約を使っていた方がいいと思うけど
- javaagent起動用jarを別に用意するかどうか?
- Maven2でのテスト時にjavaagentオプションをつける方法
- Maven弱者なのでよく分からない(汗)・・・antのときも同様・・・
- 単体テスト
- kuina-dao-toplinkテスト
- ドキュメント
- 2つのPersistenceProviderの使い分け、テスト時と通常実行時の設定方法などはドキュメント必須だと思う。
- TopLinkでハマり易いEntityロード問題も注意点として記述が必要かな?
- あと、S2.3時代と比べてDB周りのdiconファイルがかなり変わってるので、複数DB対応するときの設定説明も必要かと。
- HibernateとTopLinkの比較関係は?・・・個人的には、N:1のLAZYロードに尽きるのですが。
- トランザクションの外からLAZYロードしてしまう機能はプッシュするべきか?・・・Open Session in Viewが好きな人系にはよだれが出そうな機能ですが(汗)、個人的にはあまり・・・
かなりてこずっていたEntityクラスのロード問題は、S2側で初期化処理の対応をして頂いたおかげで一気に解決しました。TempClassLoaderにHotdeployClassLoaderを採用したことにより、ContainerタイプのPersistenceProviderで、ローカル環境でもWeb環境でも、weavingオプションを有効にしたまま普通に動かせるようになりました。JUnitでクラスエンハンス状態でテストできなかった問題も、修正+TopLinkの最新版での対応によって解決しそう。実装面での問題点はほぼクリアされたかのように見えたのですが・・・
やはり、ここに来てのTopLink側の新規問題発生が痛すぎる。いつになったら安定動作状態になるんだろうか・・・まぁボヤいてる暇があったら発言すべきなんでしょうけど、英語弱者なもので(汗)・・・
現状で、GlassFishとしての動作はどんな状況なのかも、一度確認しておく必要があるかな?