Jodd代理由于缺少行号属性而无法安装断点

时间:2015-06-22 05:07:28

标签: jodd

我有一个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());
}

1 个答案:

答案 0 :(得分:0)

请尝试以下quickstart webapp1 example吗?

它的gradle项目,因此您可以在任何IDE中快速导入它。在这个例子中,我们创建代理几乎与上面的代码完全相同,但是在操作上(这应该没有区别)。现在尝试将断点放入IndexAction - 例如,这个断点被代理。我可以在IntelliJ IDEA中设置断点。

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

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