S2TopLink-JPA開発日記

S2TopLinkプロジェクトをSeasarファウンデーションサンドボックス申請して認可していただきました。TopLink自体触り始めてまもなく、まだまだ至らない点が沢山あるかと思いますが、頑張りたいと思います。
・・・で、早速ネガティヴな話題からですが(汗)
前回までの話で、N対1のLAZYロード対応は解決したかに思えたのですが、落とし穴がありました。
TopLinkにはHibernateと同じく、Entityのメタデータを元にスキーマを自動作成する機能があります。この機能を使用すると、TopLinkは初期化時にTransactionManagerを見に行くみたいです。・・・がしかし、TransactionManagerを取得するSingletonS2ContainerFactory内のS2Containerはまだ初期化されてませんので、前回の構成だとエラーになってしまいます。そもそも、s2container.diconにEntityManagerFactoryのコンポーネント登録をするという初期化方法自体があまり宜しい方法とも言えず・・・またまた悩みモードに入ってしまいました。LAZYロードさえ使わなければ、persistence.xmlの設定のみで動かすことが出来るので、テスト環境は標準構成の方がいいのかも? でもここまできたら、環境非依存でフル機能が使えて、更にXMLファイル自動登録にも楽に対応出来る、PersistenceUnitInfo前提の構成に拘りたいところです。
初期化時に独立したS2Containerを作成してEntityManagerFactoryを初期化するような手法を取らないと駄目なのかな? エンハンスするクラスがS2によってロードされる前に、TransactionManagerやEntityManagerFactoryの初期化が出来さえすればいいのですが・・・または、一旦S2Containerの初期化を済ませた後に、AutoRegister関連で作成Componentを登録するような手法を考えるべきか・・・
あと、テストに使うDBですが・・・Derbyを使ってみようかと思っています。HSQLDBの方が使い慣れていて楽なのですが、どうもTopLinkHSQLDB対応が貧弱なので・・・DerbyならGlassFishでも使われていてTopLinkとの実績も充分あると思いますし。TopLinkは、HSQLDBとDerbyの対応にえらく差があるのですが・・・やっぱりRIとしては、JavaDBとなるDerbyをプッシュしたいのかな? Oracleとしては複雑な胸中なのかもしれませんが。