[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 メーリングリストの案内