1

我有一个 jodd 项目,它使用 Proxetta 和 JTX 在服务类上创建事务。问题是,当我尝试调试服务类时,我收到:

由于缺少行号属性,无法安装断点

我怀疑 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 中设置断点。

此外,我不知道为什么 Eclipse 会抱怨服务实现类中的断点,因为您在上面使用的 Proxetta 创建了一个代理子类,并且不会以任何方式更改目标类。因此,当您在服务实现代码中放置断点时,它在您的类中,而不是代理类中。

最后,你是把 BP 放在方法上,还是放在代码里?如果是第一个(在方法上),那么请尝试将 BP 放在您的服务代码中:例如在方法体的第一行。

于 2015-07-02T11:26:02.070 回答