S2TopLink現状まとめ

TopLink Essentialsの問題

  • PersistenceProvider.createEntityManagerFactoryで、TopLink以外のPersistenceProviderを定義したpersistence-unit名を渡すとエラーが発生
  • EntityManager.createNamedQueryで、存在しないNamedQuery名を渡してもエラーが発生しない
  • マッピングファイルで、query記述にCDATA表記が使えない
    • 現状では、JPQL・SQLXMLエスケープするしかない。早くTopLinkに対応して欲しい
  • sql-result-set-mappingのcolumn-result名を大文字にしないと判別してくれない
    • 現状では、SQLを小文字で書いてても、column-resultを大文字で統一するしかない。早くTopLinkに対応してほしい
  • Entityのフィールドにアノテーションを定義していると、N:1のLAZYロードが失敗する
    • 現状では、アノテーションをgetterに書くしかない。これはかなり致命的なので、早急に直して欲しいのだが・・・

S2TopLinkの課題

  • TopLinkのEntity自動登録を利用するときのTempClassLoader定義
    • HotdeployClassLoaderはNamingConventionに依存するので、TopLink自動登録のときは使えない。でも自動登録自体はS2が提供する自動登録規約を使っていた方がいいと思うけど
  • javaagent起動用jarを別に用意するかどうか?
    • TopLinkやSpringは用意している。でもS2TopLinkの場合は、javaagentを使うのはJUnit単体テストを複数実行するときか、どうしてもS2Container初期化前にEntityをロードしてしまう状況への対処以外は必要無いので、本体のjarに含めてしまってもいい気がしている。・・・でも、jar名にバージョン表記をつける場合、起動シェルに書くjar名がバージョン毎に異なったりして不便かも?・・・
  • Maven2でのテスト時にjavaagentオプションをつける方法
    • Maven弱者なのでよく分からない(汗)・・・antのときも同様・・・
  • 単体テスト
  • kuina-dao-toplinkテスト
  • ドキュメント
    • 2つのPersistenceProviderの使い分け、テスト時と通常実行時の設定方法などはドキュメント必須だと思う。
    • TopLinkでハマり易いEntityロード問題も注意点として記述が必要かな?
    • あと、S2.3時代と比べてDB周りのdiconファイルがかなり変わってるので、複数DB対応するときの設定説明も必要かと。
    • HibernateTopLinkの比較関係は?・・・個人的には、N:1のLAZYロードに尽きるのですが。
    • トランザクションの外からLAZYロードしてしまう機能はプッシュするべきか?・・・Open Session in Viewが好きな人系にはよだれが出そうな機能ですが(汗)、個人的にはあまり・・・

かなりてこずっていたEntityクラスのロード問題は、S2側で初期化処理の対応をして頂いたおかげで一気に解決しました。TempClassLoaderにHotdeployClassLoaderを採用したことにより、ContainerタイプのPersistenceProviderで、ローカル環境でもWeb環境でも、weavingオプションを有効にしたまま普通に動かせるようになりました。JUnitでクラスエンハンス状態でテストできなかった問題も、修正+TopLinkの最新版での対応によって解決しそう。実装面での問題点はほぼクリアされたかのように見えたのですが・・・
やはり、ここに来てのTopLink側の新規問題発生が痛すぎる。いつになったら安定動作状態になるんだろうか・・・まぁボヤいてる暇があったら発言すべきなんでしょうけど、英語弱者なもので(汗)・・・
現状で、GlassFishとしての動作はどんな状況なのかも、一度確認しておく必要があるかな?