2011-01-17 6 views
7

¿Se recomienda utilizar ThreadLocal para almacenar un contexto de subprocesos?Subproceso Recomendaciones locales en aplicaciones de servidores intermedios pesados ​​de nivel medio

Estoy construyendo una aplicación de servidor back-end donde hay servicios típicos que necesito ejecutar.

Nota: No estamos construyendo esto sobre una arquitectura SOA.

Antes del inicio de cada servicio, necesito darle un estado que tenga algún Contexto de servicio que sea un mapa variable para trabajar. Este mapa variable se comparte cuando los servicios se ejecutan en paralelo.

Ahora, por ejemplo, un servicio necesita comprobar el tiempo que debe detenerse o el tiempo de espera en función de algunos parámetros relacionados con el hilo.

Pregunta: ¿Es un buen enfoque mantener el contexto del subproceso dentro del subproceso local y luego crear el contexto del servicio de API sobre para acceder a los parámetros sobre estas variables.

Esto me ayudaría a ocultar el comportamiento complejo y no abriría mis cosas internas.

Gracias, Aditya

+0

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

Respuesta

1

parece que su marco de aplicación de servidor debe proporcionar los medios para implementar esta funcionalidad en una forma más simple - a menos que esté implementando su propio marco.

Ahora, por ejemplo, un servicio necesita comprobar el tiempo que debe detenerse o el tiempo de espera en función de algunos parámetros relacionados con el hilo.

Un contenedor EJB proporciona este tipo de funcionalidad. Los EJB también proporcionan un contexto de sesión y los medios para garantizar que el contexto se puede restaurar si la ejecución se transfiere entre hilos (por pasivación + activación).

+0

Estoy construyendo mi propio marco y eso es exactamente donde estoy enfrentando preguntas de diseño. Dado que es una aplicación de servidor back-end, tampoco tendré sesiones y mi punto de vista inicial fue que mis servicios normalmente deberían funcionar en un montón de memoria (contexto) solamente, pero para manejar dichos paradigmas de hilos y otras operaciones estrechamente acopladas Mi orquestador los diseños y los servicios están estrechamente vinculados, lo que quiero evitar. – Aditya

+0

Existen marcos de código abierto de muy alta calidad disponibles (JBoss, Spring, Glassfish, Tomcat). Probablemente comenzaría mirando a algunos de ellos para ver cómo lidian con el problema. – richj

0

Puede usar ThreadLocal con bastante libertad, pero debe definir su modelo de hilo limpiamente (vea si tiene algún control sobre la creación de hilo) ... también tenga en cuenta que asegurar el estado almacenado en ThreadLocal puede no ser el esperado , si confía en cualquier código de limpieza.

también: hacer uso (estrés no puede más) WeakReference para cualquier cosa que su código no es directamente responsable.

Cuestiones relacionadas