【问题标题】:Jodd proxy Unable to install breakpoint due to missing line number attributes由于缺少行号属性,Jodd 代理无法安装断点
【发布时间】:2015-06-22 05:07:28
【问题描述】:

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

【问题讨论】:

  • 我会检查这个 - 我在调试服务时没有遇到 IntelliJ IDEA 的问题。我是说;我可以将断点放入服务中,这样就可以了。对调试不起作用的可能是进入代理。再次,将检查!
  • 我也测试了将项目导入到 Eclipse Mars 并且结果相同。

标签: jodd


【解决方案1】:

请尝试以下quickstart webapp1 example

它的 gradle 项目,因此您可以在任何 IDE 中快速导入它。在这个例子中,我们创建的代理几乎和你上面的一样,但是在动作上(应该没有区别)。现在尝试在IndexAction 中放置一个断点——例如,这个会被代理。我可以在 IntelliJ IDEA 中设置断点。

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

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

【讨论】:

  • 嘿,这有什么帮助吗?
猜你喜欢
  • 2018-01-18
  • 2017-03-27
  • 1970-01-01
  • 2021-12-29
  • 2016-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多