2011-01-17 7 views
7

Si consiglia di utilizzare ThreadLocal per archiviare un contesto thread?Thread Consigli locali in applicazioni server mid-tier pesanti back-end

Sto creando un'applicazione server back-end in cui sono presenti servizi tipici che è necessario eseguire.

Nota: non lo stiamo costruendo su un'architettura SOA.

Prima di iniziare ogni servizio, devo dargli uno stato che ha qualche servizio Contex su cui è possibile mappare una mappa variabile. Questa mappa variabile è condivisa quando i servizi sono paralleli.

Ora, ad esempio, un servizio deve verificare il tempo in cui deve essere interrotto o scaduto in base ad alcuni parametri relativi ai thread.

Domanda: È un buon approccio mantenere il contesto del thread all'interno del thread locale e quindi creare il contesto di servizio over di api per accedere ai parametri su queste variabili.

Questo mi aiuterebbe a nascondere il comportamento complesso e non aprirebbe le mie cose interne.

Grazie, Aditya

+0

Controllare questo. http://stackoverflow.com/questions/817856/when-and-how-should-i-use-a-threadlocal-variable – blob

risposta

1

Sembra che il framework applicazione server dovrebbe fornire i mezzi per implementare questa funzionalità in modo più semplice - a meno che non si sta implementando il proprio quadro.

Ora, per esempio, un servizio deve controllare il meteo deve essere interrotta o scaduta sulla base di alcuni parametri relativi filo.

Un contenitore EJB fornisce questo tipo di funzionalità. Gli EJB forniscono inoltre un contesto di sessione e i mezzi per garantire che il contesto possa essere ripristinato se l'esecuzione viene trasferita tra thread (mediante passivazione + attivazione).

+0

Sto costruendo il mio framework e questo è esattamente dove mi trovo ad affrontare le domande di progettazione. Dal momento che è un'app per server back-end, non ho nemmeno sessioni e il mio punto di vista iniziale era che i miei servizi dovevano generalmente funzionare solo su un heap di memoria (contesto) ma per gestire tali paradigmi di thread e altre operazioni strettamente correlate. Il mio orchestratore disegni e servizi sono strettamente legati che voglio evitare. – Aditya

+0

Esistono alcuni framework open source di altissima qualità (JBoss, Spring, Glassfish, Tomcat). Probabilmente comincerei guardando alcuni di quelli per vedere come affrontano il problema. – richj

0

È possibile utilizzare ThreadLocal abbastanza liberamente ma è necessario definire il modello di thread in modo pulito (vedere se si ha il controllo sulla creazione del thread) ... tenere presente che assicurare lo stato memorizzato in ThreadLocal potrebbe non essere quello che ci si aspetta , se si sta facendo affidamento su qualsiasi codice di pulizia.

anche: faccio uso di (stress non posso più) WeakReference per tutto ciò che il codice non è direttamente responsabile.

Problemi correlati