2013-08-19 2 views
0

Поскольку клиент (php) имеет тайм-аут в 5 секунд при выполнении запроса через REST на моем приложении Glassfish, я хотел бы настроить методы ботинка java бобов, чтобы они также «сдавались» после 5 секунд. В противном случае метод будет запущен, а вещи сохранены дважды в базе данных sql.set Java Bean Timeout

PHP       Glassfish    DB 

Query -- save -->   saveSomething --> insert.... 
TIMEOUT 5 sek 
Query --> save again --> saveSomething --> another insert... 

Не существует аннотации @Timeout, которая останавливает метод после 4900 мс?

Я мог бы найти только s.t. внутри солнца (стеклянная рыба) -ejb-jar.xml 4

Это правильный путь, и если это минимальная конфигурация. Я не знаю, как sun-ejb-jar.xml.

Я не хочу устанавливать глобальный тайм-аут для всего. Это создаст проблемы для длительных задач.

Спасибо.

ответ

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) наверху метода.