2010-05-06 16 views
8

He hecho una aplicación Java Swing. Ahora me gustaría convertirlo en una aplicación Cliente-Servidor. Se debe notificar a todos los clientes cuando se cambian los datos en el servidor, por lo que no estoy buscando un servicio web. La aplicación Cliente-Servidor se ejecutará en una sola LAN, es una aplicación comercial. El servidor contendrá una base de datos, JavaDB.¿Cómo hacer que mi aplicación Java Swing sea una aplicación Cliente-Servidor?

¿Para qué tecnología y biblioteca es más fácil comenzar? ¿Debería implementarlo desde cero usando Sockets, o debería usar Java RMI, o quizás JMS? ¿O hay otras alternativas que son más fáciles de comenzar?

¿Y hay alguna biblioteca de servidor que deba usar? ¿Jetty es una alternativa?

Respuesta

2

Mina es una buena opción como un marco de aplicación de red para construir un servidor simple para este propósito: es una opción mucho mejor que usar sockets sin formato.

http://mina.apache.org/

Si realmente necesita un servidor de aplicaciones a continuación, usted podría tomar mira JBoss. También proporciona un componente de interacción remota (como alternativa a algo así como Mina):

http://www.jboss.org/jbossremoting

Es probable que no tienen mucha necesidad de Enterprise Java Beans sin embargo. En la mayoría de los casos un simple marco basado POJO es más que suficiente - se puede atar este conjunto con un marco de inyección de dependencias tales como Guice:

http://code.google.com/p/google-guice/

o primavera. Mantenlo simple, no uses un servidor J2EE a menos que realmente lo necesites. Espero que ayude.

2

Esto es mucho de lo que hace J2EE, pero es una curva de aprendizaje completamente nueva porque han resuelto previamente muchos de los problemas que encontrará y muchos no, y por lo tanto agregan muchas nuevas tecnologías.

Pero en su aspecto más básico, J2EE responde exactamente esa pregunta.

+0

Veo, nunca he usado J2EE antes. Pero creo que es hora de hacerlo ahora;) Gracias. Si no hay ninguna solución ligera. – Jonas

+0

Hay muchas soluciones livianas, pero se encontrará con y resolverá muchos problemas que J2EE ya ha encontrado y resuelto. Recomiendo, al menos, leer acerca de un marco J2EE gratuito lo suficiente como para conocer todas las características; de esa manera, es posible que notes los problemas potenciales con los que te puedes encontrar que ya han resuelto. Si realmente todavía te sientes seguro, usa RMI. J2EE proporciona (casi gratis) servidores redundantes y failover con entrega garantizada de mensajes y otras cosas que pueden ser realmente difíciles de conseguir si decides que quieres más tarde. –

+0

El problema con Java EE es que además de resolver los problemas que tienes, también resuelve una tonelada de problemas que no tienes, pero te somete a ellos. – Ryan

1

Trabajé en un proyecto como este. Implementamos Swing del lado del cliente y el lado del servidor con J2EE. Usamos EJB, beans sin estado y beans controlados por mensajes. También he estado en un proyecto de gestión de seguimiento de dispositivos. Nuestros clientes eran camiones + usuarios de Swing y hemos utilizado Servets + TCP/UDP, el framework Apache Mina para manejar y mantener las conexiones.

3

Dado que ya tiene la aplicación, tal vez lo más simple es identificar la interfaz que necesita entre el cliente y el servidor, y en primer lugar refactorizar su aplicación para usar esa interfaz para hablar entre la parte posterior final/front-end dentro del mismo proceso.

Entonces puede comenzar a separar esto. Una solución simple sería separar esto usando RMI (ya que estás hablando de objetos Java y tienes llamadas a métodos Java). Spring contiene herramientas útiles para simplificar/automatizar la exposición RMI de las interfaces.

Para el requisito de notificación, una simple multidifusión UDP (o difusión) sería suficiente.

Tenga en cuenta que tan pronto como divida su aplicación, tiene problemas. mantener vistas consistentes de datos, administrar actualizaciones oportunas, manejar casos cuando el servidor no funciona, posibles problemas de carga cuando se reciben muchos clientes, etc. En cierto sentido, dividir la aplicación en un cliente y servidor es solo el comienzo de una nueva arquitectura proceso.

0

He estado trabajando en aplicaciones Java Swing Cliente/Servidor durante casi 3 años. Sugeriría que eligieras RMI/EJB. La aplicación inicial que desarrollamos estaba haciendo esto usando RMI/EJB para la comunicación cliente-servidor con WebLogic como servidor.

Pero más tarde descubrimos que hay muchas características "tipo navegador" para ser incluidas en la aplicación, como el tiempo de espera de sesión, etc. Utilizamos el marco BrightSide que envuelve las llamadas RMI a través de HTTP. Una mejora más que hicimos fue que reemplazamos Weblogic con el servidor de código abierto JBoss.

El envolver las llamadas con HTTP será muy útil y podrá enriquecer sus aplicaciones de swing. Más tarde, cuando la situación requiera que uses un sitio web estrictamente, puedes desplegar tu swing usando jnlp.

Espero que esto haya ayudado.

+0

Pero al usar HTTP, no puedo expulsar las notificaciones? – Jonas

Cuestiones relacionadas