2010-01-28 7 views
9

Quiero construir una aplicación Java EE (EAR) que no solo proporcione servicio web (WAR) o solicitud JMS directa (EJB), sino que también me gustaría aceptar la solicitud de socket (por ejemplo, paquete UDP).una aplicación EAR (Java EE) que escucha una solicitud de socket

He intentado escribir un oyente con java.net.DatagramSocket, dejándolo funcionar como un proceso separado y redirigiendo la solicitud a mi aplicación EAR.

la pregunta es ... ¿cómo puedo construir tal oyente de socket en mi aplicación Java EE (EAR) sin problemas?

gracias.

Respuesta

11

El enfoque derecha sería la creación de un adaptador JCA para eso. El adaptador JCA se puede usar para de salida o conectividad entrante. Puede iniciar el hilo o programar el trabajo en un adaptador JCA. La conectividad entrante desde el adaptador JCA al EJB se realiza mediante un bean personalizado dirigido por mensaje.

  • El adaptador inicie un receptor zócalo y gestionar la conexión de clientes remotos
  • Cuando se recibe un paquete, se envía un mensaje a una costumbre MDB
  • El MDB se puede delegar el procesamiento a otra EJB

Incluso puede iniciar la transacción desde el conector JCA para que se transmita la entrega del mensaje/paquete al EJB. JCA es parte de las especificaciones Java EE y es compatible con todos los servidores de aplicaciones.

Otro enfoque (pero no cumple con la especificación), es iniciar el hilo que escucha el socket desde un ServletContextListener. El hilo se ejecutará en la capa web y puede llamar al EJB como de costumbre. La inyección de dependencia no funcionará, pero la búsqueda JNDI aún debería estar bien.

1

Por lo que yo sé, no cumple con la especificación.

4

Todo debe ser controlado por el contenedor, ya que es la única forma de tener una aplicación de escalado utilizando Java EE.

algunas opciones:

  • implementar un conector (JCA) un ejemplo está aquí: http://www.theserverside.com/tt/articles/article.tss?l=J2EE1_4 clientes probablemente la mejor manera si ha existentes.

  • uso de Java colas de mensajes

    La relación entre estas técnicas se discute aquí http://java.sun.com/products/jms/faq.html#relship_ejbs

  • Escribir un servidor externo que almacena las solicitudes en la base de datos. (No hay soporte Tx)

  • Si tiene solo un servidor y parece demasiada sobrecarga, puede ignorar estos aspectos. Pero si necesita transacciones más tarde o nodos adicionales, esta parte debe rediseñarse.

Cuestiones relacionadas