java java-ee jboss timeout wildfly

java - UserTransaction.SetTransactionTimeout no funciona?



java-ee jboss (1)

En el siguiente código estoy tratando de forzar un tiempo de espera de transacción para un bean específico estableciendo que su tiempo de transacción es más corto que el tiempo que le toma al método completarlo.

El tiempo de espera se establece durante 3 segundos , y el tiempo que tarda el método en completarse es de 5 segundos .

Estoy usando una solución portátil que se refiere a una combinación de BMT y establecer el tiempo de espera con el método setTransactionTimeout .

Esperaría que la transacción se invalide y me arroje una Excepción, pero eso no está sucediendo.

¿Qué estoy haciendo mal?

@Singleton @Startup @TransactionManagement(TransactionManagementType.BEAN) public class TimerSingleton { @Inject private UserTransaction ut; @PostConstruct public void execute() throws Exception { ut.begin(); ut.setTransactionTimeout(3); // Transaction should timeout after 3 seconds System.out.println(">>> Executing..."); Thread.sleep(5000); // Block for 5 seconds ut.commit(); System.out.println(">>> Completed"); } }

El método se ejecuta por completo:

17:00:12,138 INFO [stdout] (ServerService Thread Pool -- 85) >>> Executing... 17:00:17,139 INFO [stdout] (ServerService Thread Pool -- 85) >>> Completed

Estoy usando Wildfly 8.2 y sé acerca de la anotación @TransactionTimeout , pero es patentada y me gustaría saber cómo controlarla de manera portátil.


El método setTransactionTimeout debe invocarse antes de llamar al método begin , esto es porque setTransactionTimeout modifica el valor de tiempo de espera que está asociado con las transacciones iniciadas por el hilo actual con el método begin .