Websphere7環境とGlassFish3環境の間でデプロイメントを統合するために、GlassFishにCommonJWorkManagerとTimerManagerを実装してみることにしました。しかし、期待どおりに機能していません。私は次のことをしました:
http://commonj.myfoo.de/にあるmyFOOCommonJ実装を使用し、ライブラリをmy domain / libフォルダー(Springライブラリを含む)に含めます。
<resources>
glassfishdomain.xmlのセクションに以下を追加しました。
<custom-resource res-type="commonj.work.WorkManager" jndi-name="wm/default" factory-class="de.myfoo.commonj.work.FooWorkManagerFactory"></custom-resource>
<custom-resource res-type="commonj.timers.TimerManager" jndi-name="tm/default" factory-class="de.myfoo.commonj.timers.FooTimerManagerFactory"></custom-resource>
domain.xmlの<servers>
/セクションに参照を含めます。<server>
<resource-ref ref="wm/default"></resource-ref>
<resource-ref ref="tm/default"></resource-ref>
テストアプリケーションのweb.xmlに適切なリソース参照を追加します。
<resource-ref>
<description>WorkManager</description>
<res-ref-name>wm/default</res-ref-name>
<res-type>commonj.work.WorkManager</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
<resource-ref>
<description>TimerManager</description>
<res-ref-name>tm/default</res-ref-name>
<res-type>commonj.timers.TimerManager</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Unshareable</res-sharing-scope>
</resource-ref>
次のBeanをapplicationContext.xmlに追加します。
<bean id="threadTestTaskExecutor" class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor">
<property name="workManagerName" value="wm/default" />
<property name="resourceRef" value="true"/>
</bean>
<bean id="threadTestTimerExecutor" class="org.springframework.scheduling.commonj.TimerManagerTaskScheduler">
<property name="timerManagerName" value="tm/default" />
<property name="resourceRef" value="true" />
<property name="shared" value="false" />
</bean>
<bean id="threadTest" class="test.ThreadTester"></bean>
<task:scheduled-tasks scheduler="threadTestTimerExecutor">
<task:scheduled ref="threadTest" method="execute" fixed-delay="30000" /> <!-- 30 seconds -->
</task:scheduled-tasks>
このセットアップがすべて完了すると、すべてのロードが検出され、Webアプリケーションが実行されます。ただし、ThreadTesterクラスはTimerでは実行されません。
myFOOコードをステップ実行し、TimerManager(FooTimerManager.java)のメインループが実行されていますが、30秒ごとにクラスを起動することになっていることを認識していないようです。
私の質問:
GlassFish3とSpringでJSR236/237(CommonJ)を実装した経験のある人はいますか?
myFOO以外に、使用して試すことができる別の実装はありますか?誰かが私がやったことをやろうとしたことがありますか?成功した場合、結果を共有してもよろしいですか?
ありがとう!
編集1:
GlassFishでmyFOOCommonJ実装を使用すると、WorkManagerに関する限り機能することを忘れました。動作しないのはTimerManagerです。これは、オンデマンドでスレッドを正常に起動できますが、トリガーされたスケジューリングが機能しないことを意味します。
編集2:
GlassFish 3.1.1にアップデートしてから、TimerManagerのmyFOOCommonJ実装は正常に機能しています。とても素晴らしい!この質問は、HOWTOガイドのようなものになりました。