2012-08-24 7 views
6

En nuestra aplicación cuando un usuario hace clic en commandlink, se genera una ventana emergente. Este clic pasará una identificación para procesar.¿Cómo finalizar un hilo en una vista de bean con ámbito?

Mi bean administrado es viewcoped y estoy creando un hilo para hacer algunas tareas.

En un escenario donde un usuario hace clic en el enlace se genera una ventana emergente y el hilo ha comenzado a ejecutar trabajos, digamos que el usuario cierra la ventana emergente e intenta hacer clic en el enlace proporcionando una identificación diferente esta vez. Mi problema es que el hilo anterior que se inició no se destruye. Todavía puedo obtener los últimos detalles de identificación como una respuesta, pero el hilo anterior todavía ejecuta trabajos.

Me gustaría saber si hay una manera de terminar el hilo de instancia anterior en una nueva solicitud. Sé que puedo lograr esto usando sessionscoped pero las ventanas emergentes se están abriendo en la misma sesión.

+0

cualquiera chicos ??? – PermGenError

Respuesta

1

simplemente como una solución rápida posible para su caso de uso:

  • que haría uso de subprocesos en lugar de crear nuevo hilo por la petición (como idea de conjunto de hilos es más eficiente + previsto en la norma API)
  • entonces puede dejar fácilmente cualquier hilo conductor en la piscina, solución que he encontrado en: http://www.coderanch.com/t/234197/threads/java/stopping-runnable-ThreadPoolExecutor => pregunta contiene la muestra para la ejecución de subprocesos y la respuesta 1.st le da la solución

llamada:

boolean cancel(boolean mayInterruptIfRunning) 

En su caso, la llamada debe utilizar:

mayInterruptIfRunning=true 

El quesion único que queda es: ¿Dónde para mantener la referencia en el futuro? :)
Podemos hablar de eso si quieres también :)

+0

b .. muchas gracias por su respuesta. Realmente lo aprecio. creo que funcionó. utilicé una variable booleana estática. la primera vez que se ejecuta el grupo de subprocesos lo configuro en verdadero, por lo que en la segunda solicitud, cancelo el grupo de subprocesos actual y creo una nueva instancia. No sé si esta es la forma estándar de hacerlo. He editado el código en la pregunta. Que dices ? – PermGenError

+1

te meterías en problemas, ya que esto funcionaría solo para un cliente (ya que utilizas el campo estático --interrumpir si). En caso de que tenga 2 clientes uno podría terminar otro hilo. Supongo que no es un comportamiento deseado :) Más bien es necesario proporcionar un mapa: a futuro –

+0

oh sí, me olvidé por completo de eso ... solo para aclarar, ¿sería útil mantener el futuro en la sesión? .. – PermGenError

Cuestiones relacionadas