2012-08-24 11 views
6

Nella nostra applicazione quando un utente fa clic su commandlink, viene generato un pop up. Questo clic passerà un ID da elaborare.Come terminare un thread in un bean con scope vista?

Il mio bean gestito è viewcoped e sto creando una discussione per fare alcune attività.

In uno scenario in cui un utente fa clic sul collegamento viene generato un pop-up e il thread ha avviato l'esecuzione di lavori, ad esempio l'utente chiude il pop-up e tenta di fare clic sul collegamento fornendo un ID diverso questa volta. Il mio problema è il thread precedente che è stato avviato non viene distrutto. Posso ancora ottenere gli ultimi dettagli dell'ID come risposta, ma il thread precedente esegue ancora i lavori.

Vorrei sapere se esiste un modo per terminare il thread di istanza precedente su una nuova richiesta. So che posso raggiungere questo obiettivo utilizzando sessioncoped ma i popup vengono aperti nella stessa sessione.

+0

qualcuno ragazzi ??? – PermGenError

risposta

1

proprio come una soluzione rapida possibile per il vostro caso d'uso:

  • userei di thread, piuttosto che creare nuovo thread per ogni richiesta (come il pool di thread idea è più efficiente + fornite in API standard)
  • allora si può facilmente fermare ogni filo conduttore in piscina, soluzione che ho trovato: http://www.coderanch.com/t/234197/threads/java/stopping-runnable-ThreadPoolExecutor => questione contiene campione per l'attuazione di thread e la risposta 1.st ti dà la soluzione

chiamata:

boolean cancel(boolean mayInterruptIfRunning) 

Nel tuo caso la chiamata deve utilizzare:

mayInterruptIfRunning=true 

L'quesion solo a sinistra è: Dove mantenere il riferimento futuro? :)
Possiamo discuterne anche se lo volete :)

+0

b .. grazie mille per la risposta. Lo apprezzo molto. Penso che abbia fatto il trucco. ho usato una variabile booleana statica. al primo avvio del pool di thread, l'ho impostato su true, quindi nella seconda richiesta annullo il threadpool corrente e creo una nuova istanza. non so se questo il modo standard di farlo. ho modificato il codice nella domanda. cosa dici ? – PermGenError

+1

si finirebbe nei guai, poiché ciò funzionerebbe solo per un client (se si utilizza il campo statico, se ininterrotto). Nel caso in cui tu abbia 2 client uno potrebbe terminare un altro thread. Immagino che non sia il comportamento desiderato :) Piuttosto è necessario fornire la mappatura: al futuro –

+0

oh sì, ho completamente dimenticato che ... solo per chiarire, il mantenimento del futuro nella sessione funziona? .. – PermGenError

Problemi correlati