Estoy creando una aplicación Java EE que permite a los usuarios agregar/eliminar tablas "socketinfo" (almacenadas en una base de datos) desde una interfaz web. Si el usuario habilita un "socketinfo" desde la interfaz web, el servidor de aplicaciones debe crear un escucha de socket para los paquetes entrantes y procesar los datos. Si el usuario deshabilita o elimina el "socketinfo", se debe eliminar el detector de socket. Todo el producto debe estar contenido en un solo oído y, preferiblemente, cumplir. Algunos enfoques he considerado, pero se topó con problemas son:Java EE: Creación y eliminación de receptores de socket dinámicamente desde el modelo de dominio
Crear un adaptador de recursos JCA para sockets y utilizar BMD como los oyentes. El problema que me topé aquí fue que no puedo encontrar la forma de implementar mediante programación los MDB para diferentes sockets cuando el usuario los agrega.
Cree un ejb @ @ Singleton/@ Service que gestione los hilos del daemon con una sincronización cuidadosa. El ejb singleton se puede inyectar en la capa empresarial para que las operaciones CRUD y la manipulación del socket sucedan en el flujo de trabajo correcto. El problema aquí fue que supuestamente la creación de subprocesos desde los EJB se considera una mala práctica y no cumple con las especificaciones (incluso si el ciclo de vida de singleton se maneja correctamente y existen mecanismos de sincronización adecuados).
Coloque los hilos en el modelo de dominio (¿otro singleton?) Y haga que los EJB usen el modelo. Este fue el peor de todos, ya que los servidores de aplicaciones tienden a tener múltiples cargadores de clases, menos soporte de contenedores en general, además esto sufre de todo lo que 2. sufre.
¿Alguna idea de cómo manejar correctamente esta situación en Java EE?
EDIT: Una extensión de esta pregunta: Suponiendo que decida abordar este problema como sugiere ewernli en su solución 3, ¿qué gano al hacer esto en JCA (con una interfaz personalizada para agregar hilos internos) que no obtener de un singleton (bien diseñado)? Si bien la creación de un adaptador de recursos no parece una tarea monstruosa, no parece completamente trivial y podría consumir un poco de tiempo (y tal vez incluso más difícil de seguir para otros desarrolladores).
¿Estoy leyendo esto correctamente? ¿Desea crear escuchas de socket, es decir ServerSockets en tiempo de ejecución desde un contenedor Java EE, y luego capturar y procesar los datos que llegan a los sockets de una manera predefinida? –