2009-03-09 37 views
11

He escrito una aplicación Java independiente que he empaquetado en un archivo jar que toma algunos argumentos de línea de comandos, realiza algunos cálculos difíciles y luego escribe el resultado en un archivo junto con algunos salida a la secuencia de salida predeterminada que apunta hacia donde está el archivo con los resultados.Ejecutar Java en un servidor web

Ahora quiero crear un sitio web en torno a esta tecnología. La idea es que el usuario pueda completar un formulario html, publicarlo en una página web, que luego llame a la aplicación Java, analizar los resultados de la aplicación Java y mostrarla al usuario.

Actualmente, estoy usando un poco de PHP para recoger los datos de la solicitud posterior, y luego simplemente usando una llamada exec:

java -jar -Xmx128m myapplication.jar command-line-arguments

Es esto malo?

Tengo varias miles de visitas a mi sitio web cada día y cada ejecución de la aplicación Java puede tomar más de 30 segundos o un minuto, por lo que no quiero ser demasiado ineficiente. Parece que habría una mejor solución que tener que llamar directamente a Java para cada solicitud.

Sigo escuchando cosas como servlets java, frijoles, tomcat, glassfish, etc., pero no entiendo cuáles son y cómo me beneficiarían. ¿Qué me consiguen? ¿Resultados más rápidos porque Java JVM no tiene que crearse cada vez que ejecuto la aplicación? ¿Menos uso de memoria? Obviamente quiero que funcione lo más rápido posible con la menor huella de memoria posible.

Entonces, ¿cuál es el mejor enfoque que puedo tomar aquí? No quiero hacer una reescritura seria de mi aplicación, ya que hay una gran cantidad de código (por lo que volver a escribir en C o C++ está fuera de discusión).


Gracias.

Respuesta

12

Ok, los servlets son aplicaciones pequeñas que están diseñadas para funcionar dentro de un contenedor. Proporcionan un punto de extensión para que inserte su código java en un contenedor de servlets simple como tomcat o en un servidor de aplicaciones más completo como glassfish.Desea hacer esto porque el servidor de aplicaciones hace el trabajo pesado de tratar con la interacción http y proporciona otras características como seguridad, registro, administración de sesiones, manejo de errores y más (consulte el servlet specification).

Cuando realiza su aplicación en vivo dentro de una aplicación conatiner (servidor web con todas esas otras características adicionales), también puede administrar mejor el ciclo de vida de su aplicación. Podrá iniciar y detener la aplicación sin cerrar el servidor web, volver a desplegar, iniciar más instancias, etc. Además, cuando se le ocurra esa gran segunda aplicación, es fácil colocarla justo al lado de la primera. . O bien, puede agrupar varias máquinas juntas para facilitar la redundancia y el equilibrio de carga, características del servidor de aplicaciones.

Esto es solo un comienzo, hay muchas más funciones, tecnologías y marcos disponibles para ayudarlo a realizar aplicaciones basadas en contenedores. Servlet tutorial.

0

Probablemente no desee invocar la aplicación Java directamente desde el sitio web. Como dijiste, si el proceso de Java tarda 30 segundos en ejecutarse, tu servidor web se atascará mucho, especialmente si tu sitio está siendo golpeado.

Es posible que desee buscar servicios web (y posiblemente una cola de mensajes) para enviar solicitudes de procesamiento de back-end. La página PHP podría llamar al servicio web en el servidor, que luego podría poner una solicitud de procesamiento en una cola, o simplemente iniciar la aplicación java de manera asincrónica. No desea que la solicitud HTTP espere a que finalice la aplicación java, ya que, mientras se está procesando, el usuario solo tendrá un navegador bloqueado y la solicitud HTTP podría agotar el tiempo de espera.

Una vez que la aplicación java finaliza, podría actualizar una tabla de base de datos, que el usuario podría acceder desde el sitio web.

2

[Haga que me consigan] "¿Resultados más rápidos porque Java JVM no tiene que crearse cada vez que ejecuto la aplicación?"

Sí.

Y, como extra, puede reemplazar PHP para que todo su sitio esté en un único idioma: Java.

Además, puede considerar revisar sus casos de uso para que no sean unos dolorosos 30-60 segundos en una sola toma, sino quizás una serie de pasos más rápidos ejecutados interactivamente con el usuario.

2

Ejecute su código dentro de un contenedor de servlet.

Suponiendo que necesita mantener su sitio web en PHP y que ya tiene instalado Java en su máquina, simplemente instale un contenedor de servlet gratuito (como Apache Tomcat o Jetty). Configurar para ejecutar el contenedor de servlets en un puerto no utilizado. (8080) es su predeterminado.

Estos contenedores de servlet son realmente servidores web basados ​​en Java, al igual que Apache, pero especializados en servir el código de Java.

La ventaja más obvia de usar un servidor web java en lugar de una nueva invocación java.exe para cada solicitud, es que su máquina virtual java (jvm) siempre estará "encendida", en funcionamiento. Cada nuevo inicio de java.exe (jvm) le dará esos segundos extra de desperdicio.

La segunda ventaja de usar un contenedor de servlets, es que el contenedor permitirá que su código se ejecute en un nuevo hilo, dentro de jvm, para cada nueva solicitud. No tendrá problemas para proporcionar su servicio a sus miles de usuarios por día. Lo más probable es que su máquina se bloquee si tuviera que iniciar cientos de instancias Java en lugar de una.

Coloque su código dentro de un servlet. Realmente es fácil incluso para un recién llegado. Hablará con el servlet a través de HTTP (métodos doGet o doPost del servlet). Pase el formulario de solicitud de php a este servlet y haga que el servlet le devuelva lo que sea: una página, un objeto json, xml o texto sin formato.

0

Lo más fácil para empezar sería insertar un servidor web en su aplicación. Eche un vistazo al Jetty.

Cuestiones relacionadas