Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

311
Vistas
Llame al programa Java desde la aplicación Node.js

Por lo que leí, hay un par de formas de ejecutar archivos java en una aplicación node.js Una forma es generar un proceso secundario: (el código java está empaquetado con dependencias en un archivo jar ejecutable).

 var exec = require('child_process').exec, child; child = exec('java -jar file.jar arg1 arg2', function (error, stdout, stderr){ console.log('stdout: ' + stdout); console.log('stderr: ' + stderr); if(error !== null){ console.log('exec error: ' + error); } });

La otra forma es usar el módulo java - npm ( enlace ), un contenedor sobre JNI (esto me permitirá crear objects , establecer y obtener attributes , ejecutar methods ).

En un entorno de producción, cuando quiero que mi node.js ( Express ) llame a un programa java (simplemente guarda una imagen en el directorio local), avíseme cuál sería la mejor manera de lograr esto (en términos de mejores prácticas). Además, hay una larga lista de arguments que necesito pasar a la clase main y hacerlo en la línea de comando es un poco complicado. ¿Debería hacer que el programa java lea desde un archivo de entrada?

about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

1) Si usa exec , ejecutará un programa completo, mientras que si usa una interfaz JNI, podrá interactuar directamente con las bibliotecas y clases en el contenedor y hacer cosas como llamar a una sola función o crear una instancia de una clase Sin embargo, si no necesita nada de eso, creo que usar exec es mucho más simple y también se ejecutará más rápido. Parece que solo desea ejecutar la aplicación Java como un proceso independiente y simplemente registrar si la aplicación finalizó correctamente o con errores. Diría que probablemente sea mejor usar exec para eso. Ejecutar un proceso secundario de esta manera también es mucho mejor para la depuración, ya que la depuración de errores JNI puede ser muy difícil a veces.

2) En cuanto a leer o no los argumentos de un archivo, sí, por lo general es mejor leer de algún tipo de archivo en lugar de pasar los argumentos directamente. Es menos propenso al error humano (es decir, escribir argumentos cada vez) y mucho más configurable. Si alguien como un ingeniero de control de calidad solo necesita editar un archivo de configuración para intercambiar opciones, no necesita comprender todo su código base para probarlo. Personalmente, uso archivos de configuración para cada programa Java que escribo.

about 4 years ago · Santiago Trujillo Denunciar

0

Puede usar el kit de herramientas de implementación y ejecutar el archivo jar a través de jnlp. https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/deployment_toolkit.html La ventaja de ejecutar archivos jar a través de jnlp es la capacidad de pasar parámetros de javascript a su archivo jar. De esta forma, puede personalizar dinámicamente su programa Java.

about 4 years ago · Santiago Trujillo Denunciar

0

Para este tipo de problema , querrá abordarlo de la siguiente manera:

  • ¿Hay alguna manera decente de ejecutar procesos con argumentos en mi lenguaje/marco?
  • ¿Hay una manera decente de lidiar con la salida de los programas?

Por experiencia, una forma decente de manejar los argumentos en un proceso es pasarlos como una matriz (cadena). Esto es ventajoso porque no tiene que recurrir a la interpolación y manipulación innecesaria de cadenas. También es más legible, lo que es una ventaja en esta configuración de problemas.

Una forma decente de lidiar con la salida es usar un modelo basado en oyentes/eventos. De esta forma, responde de forma adecuada a los eventos en lugar de tener bloques if para stderr y stdout. Nuevamente, esto hace que las cosas sean legibles y le permite manejar la salida de una manera más fácil de mantener.

Si profundiza un poco más en esto, también tendrá que resolver un problema de cómo inyectar variables de entorno en su programa de destino . Como ejemplo, es posible que desee ejecutar Java con un depurador o con menos memoria en el futuro, por lo que su solución también debería tener esto en cuenta.

Esta es sólo una forma de resolver este tipo de problema . Si el nodo es su plataforma, eche un vistazo a Child Process , que admite todas estas técnicas.

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda