- JRuby kombiniert die Produktivität von Ruby mit der Performance der JVM, und JBang bietet eine unkomplizierte Verwaltung von Abhängigkeiten sowie eine einfache Ausführungsumgebung.
- Beide Werkzeuge lassen sich kombinieren, um Ruby- und Java-Bibliotheken gemeinsam zu nutzen.
- JBang: Ein Werkzeug zum einfachen Ausführen von Java/Kotlin/Groovy-Programmen und zur Verwaltung von Abhängigkeiten
- JRuby: Eine auf der JVM laufende Ruby-Implementierung, die Rubys Produktivität mit JVM-Performance verbindet
- Die für die Nutzung von Java-Bibliotheken in JRuby nötige Abhängigkeitsverwaltung (z. B. Gradle/Maven) ist komplex und aufwendig.
- Wir haben JBang genutzt, um die Abhängigkeiten einfach zu verwalten, und ausprobiert, wie sich JRuby-Skripte ausführen lassen.
- Einrichtung der Docker-basierten Umgebung
- Ein Docker-Image auf Basis von Amazon Corretto (JDK) wurde verwendet.
- JRuby und JBang wurden heruntergeladen, installiert und dem
PATH hinzugefügt.
- Sowohl Ruby-Gems als auch Java-Bibliotheken werden über ein Dockerfile eingebunden.
- Eine einfache RunJRuby.java wurde erstellt: Java-Abhängigkeiten per JBang verwalten und JRuby-Skripte ausführen
- Die JRuby-Ausführungsumgebung mit
ProcessBuilder eingerichtet
- Die Java-Abhängigkeiten wurden per
CLASSPATH an JRuby übergeben.
- Einsatz von Javalin (Java-Webframework) zusammen mit JRuby zum Aufbau einer REST-API
- JWT-Authentifizierung hinzugefügt und eine CRUD-API mit SQLite-Integration implementiert.
- In Java wurden Hochleistungsbibliotheken für HTTP- und Datenbankoperationen genutzt, in Ruby die Geschäftslogik umgesetzt.
- Ergebnis des Performancetests
- Durchführung eines Antwortzeittests mit 1.500 Anfragen und 25 parallelen Verbindungen mithilfe von Apache Benchmark (ab).
- Ergebnis: 95 % der Anfragen wurden innerhalb von 10 ms verarbeitet.
- Durch aktuelle Javalin-Versionen und Virtual Threads wird eine hohe Leistung erreicht.
- Die Vorteile von Ruby und Java werden kombiniert, sodass sowohl Produktivität als auch Performance erfüllt sind.
- GitHub-Repo: jbang-jruby-javalin als Referenz
1 Kommentare
Java+Groovy: Der tödliche Memory Leak
Ich habe bereits gesehen, dass beim Ausführen von Skripten auf der JVM unter bestimmten Bedingungen Memory-Leaks auftreten können; ich frage mich, wie es bei JRuby aussieht.