Hi,
i'm currently wondering how to use the @AccessTimeout annotation the right way.
In my case, i have a singleton bean with a @Timeout annotated method.
I thought could control the execution duration of this method with the @AccessTimeout annotation. So when there is a timer run each 15 seconds i want to assure, that one call of my method triggered by the timer will abort after 14 seconds.
Thats my timeout method.
@AccessTimeout( value = 14000 ) @Timeout public void doWork() throws NotSupportedException, Exception { doSomethingThatCanLastALongTime(); }
And this is my ScheduleExpression producer:
@Produces public ScheduleExpression produceSchedule() { return new ScheduleExpression(). hour( "*" ). minute( "*" ). second( "*/15" ); }
I would expect, that the method doWork() would throw an exception if the execution takes more than 14 seconds. But thats not the case.
Even if i put a Thread.sleep(20000) in the method, no exception is thrown.
I'm in doubt that the @AccessTimeout is the right annotation for my purpose
A well, figured it out now.
The @AccessTimeout annotation defines the time a second thread should wait until the lock at the method is removed. Only in that case the exception is thrown.