【发布时间】:2017-02-01 03:53:16
【问题描述】:
在我们的应用程序中,我们为我们的业务逻辑创建新的事务。因此,我们首先将 NOT_SUPPORTED 标记到我们的包装器方法,然后该包装器方法调用具有 REQUIRES_NEW 就可以了。现在的问题是,当调用返回到包装器方法时,时间差异接近整个 API 时间的 40% 到 50%。这是我的代码的 sn-p:
A.java
public Object A(){
long stime = System.currentTimeMillis()
b.BWrapper();
sysout("Time taken by API :"+System.currentTimeMillis() - stime);
}
B.java
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public Object BWrapper(){
B();
sysout("Time just after method B call:"+System.currentTimeMillis());
return ob;
}
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public Object B(){
sysout("Time before returning ob:"+System.currentTimeMillis());
return ob;
}
所以,假设如果 API 花费的时间:1 秒,那么 返回 ob 之前的时间: 和 方法 B 调用之后的时间: strong> 就像 400 到 500 毫秒,几乎占总时间的 40% 到 50%。并且两个 sysout 操作之间没有其他逻辑。
那么这背后的原因是什么?
【问题讨论】:
-
对
B()的调用是本地调用,甚至不会启动新事务。 -
请提供可编译的代码。这不会编译。
-
这是原始代码的示例代码。我无法提供整个原始代码太大。但这里我试图解释原始代码的流程。方法B()是通过依赖注入调用。像 @IgnoreDependency @EJB(mappedName = "JNDINAME")。甚至所有的方法调用,无论是从A类到B,还是从B到B的方法调用,都在使用依赖注入。
标签: java hibernate jpa ejb-3.0 jboss6.x