[Seasar-user:16346] SA-Struts&HotDeploy時にアノテーションが読めなくなる事がある

Tsukasa Kawamichi [E-MAIL ADDRESS DELETED]
2008年 11月 20日 (木) 17:36:50 JST


お世話になります。川道と申します。

ちょっと複雑な条件下でのおかしな動きがあるので報告させていただきます。

前提:
1.SA-Struts1.0.4-sp2を使用している
2.独自のアノテーションを使用している(Form内で使用)
3.そのアノテーションの評価をActionCustomizerを継承した
Customizerで行っている。(setupValidatorをoverride)

と言う状態で、HotDeployモードでAPサーバ起動後、初回のrequest時に
setupValidator内で独自アノテーションが認識できない(getAnnotationがnull)
となってしまいます。
2回目以降は普通に認識できています。
コードは以下となります。

public class HogeActionCustomizer extends ActionCustomizer {
@Override
protected void setupValidator(S2ActionMapping actionMapping,
S2ValidatorResources validatorResources) {
super.setupValidator(actionMapping, validatorResources);
final BeanDesc fbd = actionMapping.getActionFormBeanDesc();
final String formName = actionMapping.getName();
for (String methodName : actionMapping.getExecuteMethodNames()) {
Form form = validatorResources
.getForm(null, formName + "_" + methodName);
for (Field field : (List<Field>)form.getFields()) {
String key = field.getKey();
Field fld = fbd.getPropertyDesc(key).getField();  // ☆
HogeAnnotation ann=fld.getAnnotation(HogeAnnotation.class);
:

この時、1回目のrequest時は、
・HogeAnnotation.classのクラスローダはWebAppClassLoader
・☆で取得したfldでgetAnnotationsした場合の、HogeAnnotation.class
のクラスローダはHotDeployClassLoader
と言うのが原因なのですが、2回目以降は両方ともWebAppClassLoaderとなり
正常に動作します。

一応、convention.diconで、アノテーションの配置パッケージをaddIgnorePackageName
に追加すれば回避できるのですが、もう少し洗練された解決方法は
ございませんでしょうか?

以上、よろしくお願いいたします。
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://ml.seasar.org/archives/seasar-user/attachments/20081120/fd3d6825/attachment-0001.html>


Seasar-user メーリングリストの案内