neradis / index-vivus

student project to present lexical knowledge from XML-transcriptions of dictionaries in an interactive web interface for easier lookup and explorative search
0 stars 0 forks source link

Gradle-Buildskript ändern #10

Closed andywer closed 10 years ago

andywer commented 10 years ago

Das Buildskript soll den kompletten Classpath für JRuby in eine Datei schreiben, damit wir es aus der Railsanwendung heraus diesen Classpath registrieren können.

(Hintergrund: Per Kommandozeilenparameter übergebener Classpath kommt aus ungeklärter Ursache nicht im JRuby-Skript an)

neradis commented 10 years ago

Der Umbau wird glücklicherweise offenbar nicht nötig sein. Ich habe mal einen kleinen Branch java_access angelegt. Dieser zeigt, dass der Bytecode der Backend-Klassen und auch die benötigten Java libraries doch in dem per railsCmd gestarteten Ruby-Prozess verfügbar sind.

Alles, was gestern fehlte, waren die passenden java_import aufrufe. Vielleicht hattest du den direkten Zugriff auf die Klassen in Form von de.fusionfactory.index_vivus.testing.KeywordSearchServiceMock versucht? Die Klappen von Haus aus in JRuby nur für bestimmte top-level-Paketnamen (java, com, org und weitere, aber nicht de). Siehe auch JRuby Wiki: Calling Java From Ruby im Abschnitt "Referencing Java Classes (using full-qualified class name)"

Dass die Classpath-Einträge fürs Backend nicht in der $CLASSPATH-Variable erscheinen, liegt evntl. daran, dass dort nur Einträge erscheinen, die vom JRuby-Classloader selbst verwaltet werden, aber Einträge, die durch den -J-cp Kommandozeilenschalter hinzugefügt werden, bereits in einem parent class loader des JRuby-Classloaders registiert werden.

andywer commented 10 years ago

Ich hatte aber ein java_import 'de.fusionfactory.index_vivus.services.Language' drin. Und der Classpath müsste doch trotzdem korrekt übernommen werden wenn wir ihn per Kommandozeilenparameter aus dem Gradle heraus festlegen...

Ich schau mir den Branch morgen mal an.

andywer commented 10 years ago

Hab's gerade mit deinem Branch ausprobiert. Da kommt bei mir auch nur der cannot load Java class de.fusionfactory.index_vivus.testing.KeywordSearchServiceMock-Fehler. Aufgerufene URL: http://localhost:3000/ajax/keyword/matches/latin/verbum

neradis commented 10 years ago

Schon ein wenig merkwürdig: als ich ich es am Freitag den Server für 7553f941e00d035259dd919449da7f493095c099 per ./railsCmd puma für die Tests gestartet hatte, konnte er die Java-Klassen laden und nutzen.

Heute hab ichs dann zusätzlich mit dem Webrick über ./railsCmd rails s und dem deamonized Puma per ./railsCmd puma -d versucht und dann findet er die Klassen tatsächlich nicht.

Habe jetzt das Buildscript angepasst, so dass in frontend/railsapp/add_classpath.rb ein Skript generiert wird, dass die Classpath-Einträge in Ruby selbst ergänzt und in der Rails-Konfiguration dafür gesorgt, dass dieses Skript beim Starten von rails geladen wird.

Damit klappte es bei mir auch mit ./railsCmd rails s.

$ curl http://localhost:3000/ajax/keyword/completions/latin/dom
["dominus","dominare"]

$ curl http://localhost:3000/ajax/keyword/matches/latin/dominare
id: 37, keyword: dominare, description: the meaning for dominare, html: Optional.absent()

Klappt's mit der neuen Methode jetzt auch bei dir?

andywer commented 10 years ago

Cool. Jetzt geht's auch bei mir!