1

Proxetta と JTX を使用してサービス クラスでトランザクションを作成する jodd プロジェクトがあります。問題は、受け取ったサービス クラスをデバッグしようとすると、次のようになることです。

行番号属性がないため、ブレークポイントをインストールできません

Proxetta がプロキシ クラスを生成する方法に何か関係があると思われます。Spring では、クラスのインターフェイスがない場合に同じことが起こるようです。

私は Eclispe を使用しており、Proxetta の初期化方法は次のとおりです。

public void initProxetta() {

    ProxyAspect txServiceProxy = new ProxyAspect(AnnotationTxAdvice.class,
        new MethodAnnotationPointcut(Transaction.class) {
            @Override
            public boolean apply(MethodInfo mi) {
                return isPublic(mi) &&
                        isTopLevelMethod(mi) &&
                        matchClassName(mi, "*ServiceImpl") &&
                        super.apply(mi);
            }
        });

    proxetta = ProxyProxetta.withAspects(txServiceProxy);
    proxetta.setClassLoader(this.getClass().getClassLoader());
}
4

1 に答える 1

0

次のクイックスタート webapp1 の例を試してみませんか?

gradle プロジェクトなので、任意の IDE にすばやくインポートできます。この例では、上記とほぼ同じようにプロキシを作成しますが、アクションに基づいています (違いはありません)。次に、ブレークポイントを に配置してみてくださいIndexAction。たとえば、これはプロキシ化されます。IntelliJ IDEA にブレークポイントを配置できます。

さらに、上記で使用した Proxetta はプロキシ サブクラスを作成し、ターゲット クラスをまったく変更しないため、Eclipse がサービス実装クラスのブレークポイントについて不平を言う理由がわかりません。したがって、サービス実装コードにブレークポイントを配置すると、それはプロキシ クラスではなく、クラスにあります。

最後に、BP をメソッドに配置しましたか、それともコード内に配置しましたか? それが最初 (メソッド上) の場合は、BP をサービスのコード内 (メソッド本体の最初の行など) に配置してみてください。

于 2015-07-02T11:26:02.070 に答える