[Seasar-user:3468] Re: Hotswapについて

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2006年 4月 7日 (金) 02:00:40 JST


小林 (koichik) です.

Date:    Thu, 6 Apr 2006 23:07:15 +0900
From:    akiyama <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:3466] Hotswapについて

> Seaserを2.3.4を使用していた時、Hotswap機能を使用していました。
> アプリの設定を何も変更をせずに2.3.7にバージョンアップさせました。
> すると、下記エラーがはかれるようになってしまいました。
> java.lang.IllegalArgumentException: repeated interface:

申し訳ありません,S2.3.7 で行った以下の修正のバグです.

> - interfaceへHotswapを適用した場合に、そのinterfaceが
>   HotswapProxyから抜けていた(親interfaceのみを対象にしていた)
>   問題を修正しました。[Seasar-user:3239]

この現象は,継承関係にある複数のクラスが同じインタフェースを
実装している場合に発生します.

public class Foo implements Runnable {...}
public class Bar extends Foo implements Runnable {...}


お急ぎの場合はお手数ですが,
org.seasar.framework.hotswap.HotswapProxy#getInterfaces() を
以下のように修正してください.

    static Class[] getInterfaces(Class targetClass) {
        final Set interfaces = new HashSet();
        Collections.addAll(interfaces, targetClass.getInterfaces());
        if (targetClass.isInterface()) {
            interfaces.add(targetClass);
        } else if (!targetClass.equals(Object.class)) {
            Collections.addAll(interfaces, getInterfaces(targetClass
                    .getSuperclass()));
        }
        return (Class[]) interfaces.toArray(new Class[interfaces.size()]);
    }



-- 
<signature>
    <name>Koichi Kobayashi</name>
    <e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
</signature>




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