Web対応

以前色々試行錯誤した内容を元に、Web環境でS2TopLinkを動かすS2TopLinkContainerPersistenceUnitProviderを作成しました。
PersistenceUnitManagerImplのstaticContextを有効にして、S2ContainerServletの初期化前にEntityManagerFactoryの作成を行い、そこでエンハンス対象のEntityをロードします。その後に通常の初期化処理を行えば、Servlet上でエンハンス対象のEntityを使っていても、特に問題なく利用できることが確認できました。EntityManagerFactoryがS2Containerのライフサイクルを越えて存在する為、TopLinkに渡すDataSourceとTransactionManagerは、それぞれProxyクラスを用意しました。なんとかこれでOKかな?
今回、Entityロード用のTempClassLoader作成をTopLinkのクラスにお任せしているのですが、親クラスローダーがURLClassLoaderの子クラスのときのみに対応しているのがちょっと気になります。でもとりあえずTomcat上ではこれで動くみたいですね。Webコンテナ毎に独自のClassLoaderを作成してClassTransformerに対応する必要は無さそうです。
ようやくこれで最低限の機能を確保できそうです。TopLinkの最大の特徴のLAZYロードに対応できなければ、TopLinkに対応する意味がほとんどありませんし。
・・・後は、最新リリースで動かせればOKなんですが・・・b25でもやはりjavaagentは動かず。TopLinkのフォーラムを読んでると、Derbyが原因みたいなことも書かれてたりするのですが・・・b22までは普通に動いていたのが、b23以降動かなくなってるのが個人的には引っかかります。