[Seasar-user:20058] Re: [S2Chronos] Task内でのService使用について
鈴木 雄輔
[E-MAIL ADDRESS DELETED]
2010年 8月 10日 (火) 22:45:50 JST
小林さま
お世話になっております。鈴木です。
早速ありがとうございます。
> Tomcat (Web コンテナ) を起動する JVM オプションで
> -verbose:class を指定してみてください.
-verbose:classを指定してログを確認しました。
> EmpService が InitialTask・IndexPage からしか
> 参照されてないのであれば,
EmpServiceを使用しているのは、InitialTaskとIndexPageのみです。
最小限のクラスのみのテスト用プロジェクトを使っています。
> [Loaded xxx.agile.task.InitialTask from file:〜]
>
> か
>
> [Loaded xxx.agile.web.IndexPage from file:〜]
> のどちらかが出力されているはずです.
> どちらの場合でも,それが一度は HotdeployClassLoader に
> ロードされたなら
>
> [Loaded xxx.agile.xxx.Xxx from
org.seasar.framework.container.hotdeploy.HotdeployClassLoader]
> が出力されるはずなので,その場合は何がきっかけで
> 通常のクラスローダにロードされたのかを調べることに
> なるかと.
[Loaded xxx.agile.task.InitialTask from
file:/C:/workspace/xxx/src/main/webapp/WEB-INF/classes/xxx/agile/task/Initia
lTask.class]の表示はありましたが、
[Loaded xxx.agile.task.InitialTask from
org.seasar.framework.container.hotdeploy.HotdeployClassLoader]の表示はありま
せんでした。
> 出力されていなければ,そもそも HOT 非対象に
> なってしまっているのだと思われるので,設定ファイルを
> 見直すことになるかと.
再度プロジェクトを作り直して試しましたが、結果は駄目でした。
参考にしたもの↓
・http://s2chronos.sandbox.seasar.org/ja/install.html
・『Seasar2徹底入門』
・s2chronos-teeda-example-1.0.0.zip
その他、考えられることはありますでしょうか?
念のため、Doltengでプロジェクトを生成してから、変更・追加した設定ファイルを
以下に明記します(※convention.diconはそのままです)。
■設定ファイル
-----------------------------------------------
【app.dicon】
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components>
<include path="convention.dicon"/>
<include path="aop.dicon"/>
<include path="app_aop.dicon"/>
<include path="teedaExtension.dicon"/>
<include path="dxo.dicon"/>
<include path="j2ee.dicon"/>
<include path="s2jdbc.dicon"/>
<include path="chronos-extension.dicon"/>
</components>
【convention.dicon】
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components>
<component
class="org.seasar.framework.convention.impl.NamingConventionImpl">
<initMethod name="addRootPackageName">
<arg>"xxx.agile"</arg>
</initMethod>
</component>
<component
class="org.seasar.framework.convention.impl.PersistenceConventionImpl"/>
</components>
【creator.dicon】
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components>
<include path="customizer.dicon"/>
<include path="convention.dicon"/>
<component name="actionCreator"
class="org.seasar.framework.container.creator.ActionCreator"/>
<component name="converterCreator"
class="org.seasar.framework.container.creator.ConverterCreator"/>
<component name="daoCreator"
class="org.seasar.framework.container.creator.DaoCreator"/>
<component name="dtoCreator"
class="org.seasar.framework.container.creator.DtoCreator"/>
<component name="dxoCreator"
class="org.seasar.framework.container.creator.DxoCreator"/>
<component name="helperCreator"
class="org.seasar.framework.container.creator.HelperCreator"/>
<component name="interceptorCreator"
class="org.seasar.framework.container.creator.InterceptorCreator"/>
<component name="logicCreator"
class="org.seasar.framework.container.creator.LogicCreator"/>
<component name="pageCreator"
class="org.seasar.framework.container.creator.PageCreator"/>
<component name="serviceCreator"
class="org.seasar.framework.container.creator.ServiceCreator"/>
<component name="validatorCreator"
class="org.seasar.framework.container.creator.ValidatorCreator"/>
<component class="org.seasar.chronos.core.creator.TaskCreator"/>
<component class="org.seasar.chronos.core.creator.TriggerCreator"/>
</components>
【customizer.dicon】
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components>
<include path="default-customizer.dicon"/>
<component name="pageCustomizer"
class="org.seasar.framework.container.customizer.CustomizerChain">
<initMethod name="addCustomizer">
<arg>traceCustomizer</arg>
</initMethod>
<initMethod name="addCustomizer">
<arg>
<component
class="org.seasar.framework.container.customizer.AspectCustomizer">
<property
name="interceptorName">"app_aop.appFacesExceptionThrowsInterceptor"</propert
y>
<property name="pointcut">"do.*, initialize, prerender"</property>
<property name="useLookupAdapter">false</property>
</component>
</arg>
</initMethod>
<initMethod name="addCustomizer">
<arg>
<component
class="org.seasar.framework.container.customizer.AspectCustomizer">
<property name="interceptorName">"j2ee.requiredTx"</property>
<property name="pointcut">"do.*, initialize, prerender"</property>
<property name="useLookupAdapter">false</property>
</component>
</arg>
</initMethod>
</component>
<component name="actionCustomizer"
class="org.seasar.framework.container.customizer.CustomizerChain">
<initMethod name="addCustomizer">
<arg>traceCustomizer</arg>
</initMethod>
<initMethod name="addCustomizer">
<arg>
<component
class="org.seasar.framework.container.customizer.AspectCustomizer">
<property
name="interceptorName">"app_aop.actionSupportInterceptor"</property>
<property name="pointcut">"do.*, initialize, prerender"</property>
<property name="useLookupAdapter">false</property>
</component>
</arg>
</initMethod>
</component>
<component name="serviceCustomizer" class="org.seasar.framework.container.
customizer.CustomizerChain">
<initMethod name="addCustomizer">
<arg>traceCustomizer</arg>
</initMethod>
<initMethod name="addCustomizer">
<arg>requiredTxCustomizer</arg>
</initMethod>
</component>
<component name="logicCustomizer"
class="org.seasar.framework.container.customizer.CustomizerChain">
<initMethod name="addCustomizer">
<arg>traceCustomizer</arg>
</initMethod>
</component>
<component name="daoCustomizer"
class="org.seasar.framework.container.customizer.CustomizerChain">
<initMethod name="addCustomizer">
<arg>traceCustomizer</arg>
</initMethod>
</component>
<component name="dxoCustomizer"
class="org.seasar.framework.container.customizer.CustomizerChain">
<initMethod name="addCustomizer">
<arg>traceCustomizer</arg>
</initMethod>
<initMethod name="addCustomizer">
<arg>s2DxoCustomizer</arg>
</initMethod>
</component>
<component name="helperCustomizer"
class="org.seasar.framework.container.customizer.CustomizerChain">
<initMethod name="addCustomizer">
<arg>traceCustomizer</arg>
</initMethod>
</component>
<component name="taskSupportAspectCustomizer" class="org.seasar.framework.
container.customizer.AspectCustomizer">
<initMethod name="addInterceptorName">
<arg>"aop.traceInterceptor"</arg>
</initMethod>
<property name="pointcut">"do.*, initialize, destroy"</property>
</component>
<component name="taskCustomizer"
class="org.seasar.framework.container.customizer.CustomizerChain">
<initMethod name="addCustomizer">
<arg>taskSupportAspectCustomizer</arg>
</initMethod>
</component>
<component name="triggerSupportAspectCustomizer"
class="org.seasar.framework.container.customizer.AspectCustomizer">
<initMethod name="addInterceptorName">
<arg>"aop.traceInterceptor"</arg>
</initMethod>
<property name="pointcut">".*"</property>
</component>
<component name="triggerCustomizer" class="org.seasar.framework.container.
customizer.CustomizerChain">
<initMethod name="addCustomizer">
<arg>triggerSupportAspectCustomizer</arg>
</initMethod>
</component>
</components>
【chronosCustomize.dicon】
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components>
<component name="schedulerConfiguration"
class="org.seasar.chronos.core.SchedulerConfiguration">
<property name="daemon">true</property>
<property name="autoFinish">false</property>
<property name="autoFinishTimeLimit">5000L</property>
<property name="taskScanIntervalTime">2000L</property>
<property
name="threadPoolType">@[E-MAIL ADDRESS DELETED]</proper
ty>
</component>
</components>
【web.xml】
※長いので追記した部分のみ
<servlet>
<servlet-name>chronosServlet</servlet-name>
<servlet-class>org.seasar.chronos.extension.servlet.S2ChronosServlet</servle
t-class>
<load-on-startup>4</load-on-startup>
</servlet>
以上、よろしくお願いします。
-----Original Message-----
From: [E-MAIL ADDRESS DELETED]
[mailto:[E-MAIL ADDRESS DELETED]] On Behalf Of Koichi Kobayashi
Sent: Tuesday, August 10, 2010 8:01 PM
To: [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:20057] Re: [S2Chronos] Task内でのService使用について
小林 (koichik) です.
Date: Tue, 10 Aug 2010 19:22:43 +0900
From: 鈴木 雄輔 <[E-MAIL ADDRESS DELETED]>
To: <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:20056] [S2Chronos] Task内でのService使用について
> 現在、Teeda、S2JDBC、S2Chronos を使って開発を行っています。
> Taskクラス内でS2JDBC-Genから生成されたServiceクラスを使用しているのです
が、
> 同ServiceクラスをPageクラスで、使おうとすると下記メッセージが出力されま
す。
>
> 「WARN org.seasar.framework.container.hotdeploy.HotdeployClassLoader -
HOT
> deploy対象クラス(xxx.agile.service.EmpService)が非対象クラスから参照されて
通
> 常のクラスローダにロードされています。」
EmpService が HOT 非対象クラスローダにロードされる
原因となったクラスを特定した方がいいかも.
Tomcat (Web コンテナ) を起動する JVM オプションで
-verbose:class を指定してみてください.
「非対象クラスから参照されて〜」より (もしかしたら
ずっと) 前に
[Loaded xxx.agile.service.EmpService from
org.seasar.framework.container.hotdeploy.HotdeployClassLoader]
と
[Loaded xxx.agile.service.EmpService from file:〜]
という 2 つのメッセージが表示されるはずです.
後者の方が HOT deploy 非対象のクラスから参照されて
ロードされたものなので,その周辺でロードされた
クラスから該当のもの (EmpService を参照している
クラス) を見つけてください.
EmpService が InitialTask・IndexPage からしか
参照されてないのであれば,
[Loaded xxx.agile.task.InitialTask from file:〜]
か
[Loaded xxx.agile.web.IndexPage from file:〜]
のどちらかが出力されているはずです.
どちらの場合でも,それが一度は HotdeployClassLoader に
ロードされたなら
[Loaded xxx.agile.xxx.Xxx from
org.seasar.framework.container.hotdeploy.HotdeployClassLoader]
が出力されるはずなので,その場合は何がきっかけで
通常のクラスローダにロードされたのかを調べることに
なるかと.
出力されていなければ,そもそも HOT 非対象に
なってしまっているのだと思われるので,設定ファイルを
見直すことになるかと.
--
<component name="koichik">
<property name="fullName">"Koichi Kobayashi"</property>
<property name="email">"[E-MAIL ADDRESS DELETED]"</property>
<property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>
_______________________________________________
Seasar-user mailing list
[E-MAIL ADDRESS DELETED]
https://ml.seasar.org/mailman/listinfo/seasar-user
Seasar-user メーリングリストの案内