因为客户端(php)在我的glassfish应用程序上通过REST运行查询时超时为5秒,我想设置glassfish java bean方法,以便他们在5秒后“放弃”。否则,该方法将继续运行,并在sql数据库中保存两次。
PHP Glassfish DB
Query -- save --> saveSomething --> insert....
TIMEOUT 5 sek
Query --> save again --> saveSomething --> another insert...
是否有@Timeout注释在4900 ms后停止该方法?
我只能找到s.t.在阳光下(glassfish)-ejb-jar.xml 4
这是正确的方法,如果那里的最小配置是什么。我不知道sun-ejb-jar.xml。
我不想为所有事情设置全局超时。这会给长时间运行的任务带来问题。
感谢。
答案 0 :(得分:0)
我找到了一个简单的解决方案和一些手工工作。您记得方法开始时的时间,并在方法结束前进行比较。如果时间花费大于x,则抛出ForceTimeoutException(RuntimeException),因此所有内容都会回滚。
public void doSomethingOnDatabase() {
StopWatch sw = new StopWatch();
..... other programm code ....
if (sw.elapsed()>TIMEOUT_VALUE) {
throw new ForceTimeoutException(sw.elapsed());
}
}
想要更优雅的解决方案!
等等 @MethodTimeoutForceRollback(5000) 在方法之上。