0

因为客户端(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 毫秒后停止该方法吗?

我只能在太阳里面找到 st(glassfish)-ejb-jar.xml 4

那是正确的方法吗,如果那里的最低配置是什么。我不知道 sun-ejb-jar.xml。

我不想为所有内容设置全局超时。这会给长时间运行的任务带来问题。

谢谢。

4

1 回答 1

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) 在方法之上的东西。

于 2013-08-22T06:45:23.693 回答