- JRuby combina la productividad de Ruby con el rendimiento de la JVM, y JBang brinda una gestión simple de dependencias y un entorno de ejecución.
- Al combinar ambas herramientas, es posible aprovechar de forma integrada librerías de Ruby y Java.
- JBang: una herramienta para ejecutar fácilmente programas de Java/Kotlin/Groovy y gestionar dependencias.
- JRuby: una implementación de Ruby que funciona sobre la JVM, que combina la productividad de Ruby con el rendimiento de la JVM.
- La gestión de dependencias (Gradle/Maven, entre otras) necesaria para usar bibliotecas Java en JRuby suele ser compleja y difícil.
- Se decidió experimentar con JBang para gestionar dependencias de forma sencilla y ejecutar scripts de JRuby.
- Configuración basada en Docker.
- Se usa una imagen de Docker basada en Amazon Corretto (JDK).
- Se descargan e instalan JRuby y JBang y se agregan al
PATH.
- El
Dockerfile incluye tanto Ruby Gem como bibliotecas Java.
- Se escribió un RunJRuby.java simple para gestionar dependencias de Java con JBang y ejecutar el script de JRuby.
- Configuración del entorno de ejecución de JRuby con
ProcessBuilder.
- Envío de dependencias de Java a JRuby mediante la configuración de
CLASSPATH.
- Uso de Javalin (framework web basado en Java) junto con JRuby para construir una API REST.
- Se agregó autenticación JWT y se implementó una API CRUD con integración a SQLite.
- En Java se aprovechan bibliotecas de alto rendimiento para HTTP, operaciones de base de datos, etc., mientras que en Ruby se maneja la lógica de negocio.
- Resultados de la prueba de rendimiento.
- Se ejecutó una prueba de tiempos de respuesta con la herramienta Apache Benchmark (ab) para 1,500 solicitudes (25 concurrentes).
- Resultado: el 95% de las solicitudes se procesó en menos de 10 ms.
- Se ofrece un alto rendimiento al usar la versión más reciente de Javalin y Virtual Threads.
- Se combinan las ventajas de Ruby y Java para cumplir tanto con la productividad como con el rendimiento.
- GitHub Repo: jbang-jruby-javalin como referencia
1 comentarios
El memory leak crítico de Java+Groovy
Al ejecutar scripts sobre la JVM, vi casos donde se produce un memory leak en ciertas condiciones, y me pregunto cómo se comporta JRuby.