Java EJB方法在每次调用后返回需要更多的时间

Java EJB方法在每次调用后返回需要更多的时间,java,jakarta-ee,jboss,ejb,jboss7.x,Java,Jakarta Ee,Jboss,Ejb,Jboss7.x,我正在观察一种不寻常的行为,我想了解发生了什么 想象一个简单的设置 首先,我有一个无状态bean,它只返回一些东西: @Stateless public class SimpleService{ private Map<String, String> map; @PostConstruct public init(){ map = new HashMap<>(); } public Map<String,S

我正在观察一种不寻常的行为,我想了解发生了什么

想象一个简单的设置

首先,我有一个无状态bean,它只返回一些东西:

@Stateless
public class SimpleService{
    private Map<String, String> map;

    @PostConstruct
    public init(){
        map = new HashMap<>();
    }

    public Map<String,String> getMap(){
        return map;
    }
}
每次调用该方法时,它都会不断上升

这怎么解释呢

我正在使用JavaJDK1.7.025和JBossEAP6.1

编辑


顺便说一句,“重置”方法处理时间的唯一方法是重新启动服务器。

您是否可以尝试相同的测试,但创建一个接口SimpleService,当前SimpleService将类似SimpleService Impl,它将实现SimpleService。
我假设cdi对包装EJB有一些魔力。
隐马尔可夫模型。。或者另一件事是尝试使用@EJB injection代替@injection

我已经用WildFly 8.1.0.Final进行了测试,我得到了以下结果:

Process took 900 ms
Process took 600 ms
Process took 400 ms
Process took 300 ms
Process took 130ms
Process took 100ms
然后它会在90毫秒左右稳定下来

因此,我认为我们可以有把握地假设最初的问题是JBossAS7中的一个bug,它在WildFly 8.1中得到了修复。他们甚至引入了一些优化

编辑

我向大家道歉,我做了一个错误的诊断。此错误与JBoss版本无关,但由JRebel引起

当我下载Wildfly时,我没有使用附加的JRebel代理在调试模式下运行它(我经常使用EAP 6.1)。如果我在没有JRebel的情况下启动JBoss EAP 6.1,那么问题就不会发生

我太习惯JRebel了,我忘了我把它打开了

我将向JRebel团队提出一个问题

编辑2


JRebel团队进行了调查,并能够重现缺陷。它已在夜间构建中修复,并将在下一个版本(定于2014年8月/9月)中修复。

您是否连续测试了4次以上的迭代,时间是否总是增加,或者在某一点后它们是否大致相同?是的,我做了4次以上,只是一直在增加。在这个例子中,对于同一个方法(大约25个调用),我最多使用5次。事实上,它可能很有趣地注意到,它通常会减小一点,然后又恢复:350ms、340ms、460ms、450ms、700ms、680ms、900ms等等。。。最后,它总是以增加结束。当您已经通过使用状态为的无状态bean打破了所有规则时,我不能非常认真地对待这个示例。然而,这是一个有趣的问题,在给定运行时优化的情况下,您会期望时间下降。不幸的是,在几乎什么都不做的代码中,不可能看到处理时间的去向。在这一点上,将其作为一个bug提交到JBoss中,看看会发生什么,这将是一件有趣的事情。@Gimby我认为让一个带有私有属性的无状态bean由
PostConstruct
初始化并没有错。您可以保证在获取实例之前调用此方法。因此,我认为这打破了“无国籍”合同。为了再次检查,我已将地图设置为最终地图,并在构造函数中对其进行了初始化。同样的效果。事实上,我甚至去掉了映射,只返回null,效果仍然存在。向jboss提交一个bug是一个好主意。问题是:在实例返回到池后,该状态会发生什么?如果你这样做,你还必须控制清理它。但更好的做法是不这样做,并将所有逻辑保持在EJB方法调用中它所属的位置,其余部分依赖依赖依赖项注入。这是一个相当令人惊讶的发现——是否应该报告给AS 7团队?这是一个非常有趣的发现!你有bug报告的链接吗,这样我就可以跟踪它的进度了?谢谢。唉,它被送到了“请打开一张支持票”的地下城。我想有人想让你付修理费。在这一点上,JBoss7.x对我来说是一个死产品,是时候完全转向8.1或其他版本了。这是出乎意料的!)
Process took 900 ms
Process took 1,100 ms
Process took 1,200 ms
Process took 1,400 ms
Process took 900 ms
Process took 600 ms
Process took 400 ms
Process took 300 ms
Process took 130ms
Process took 100ms