Von C aus auf Java Methoden/Klassen zugreifen

  • Hallo,

    ich bin auf der Suche nach einer Möglichkeit von einem C/C++ Programm aus auf Java Methoden/Klassen zuzugreifen. Also praktisch so was wie JNI nur, dass das C Programm das startende Programm ist, nicht umgekehrt. (Das ist soweit ich weis bei JNI nicht möglich). Wenn man danach googelt findet man leider immer nur Erklärungen in der falschen Richtung. Das ganze sollte unter Linux funktionieren.

    LG Mash

    „Ich war mal Captain meines eigenen Raumschiffs…“ - Denny Crane

  • Nennt sich Java Invocation API. (der offizielle "Sun Weg" Java aus C zu rufen/verwenden)
    Die Dokumentation dazu ist etwas grausam (letztes Update vor ca 10 Jahren oder so, in entscheidenden Punkten unklar, unvollständig etc)
    Google gibt fast nichts her zum Thema JIA.
    Insoferne ist der Hinweis zu "Google this" absolut nicht hilfreich.
    Hatte letztes Jahr das Vergnügen eines Projekts mit extensiver JIA Nutzung.
    Alternativen wären zB GCJ oder kommerzielle Lösungen.

    mfg, lb


    Trading for a living [equities,futures,forex]

  • Am hilfreichsten ist diesbezüglich wahrscheinlich, sich den Launcher von OpenJDK anzusehen. (Der Launcher ist das, was mit "java" aufgerufen wird). Ich hab in der Vergangenheit schon des öfteren mal den Code von OpenJDK konsultiert; der ist eigentlich üblicherweise recht übersichtlich.

  • Also bitte, der zweite Link bei Google ist ein komplettes Beispiel inklusive aller Details (Methodenaufrufe, Klassen erzeugen, was man nur so braucht...). Und es verwendet stink normales JNI (wovon die "Invocation API" ein Teil ist - JIA gibts nicht).

    Für den Fall, das der zweite Link in den Google Results noch immer nicht auffindbar ist: http://www.codeproject.com/KB/cpp/CJniJava.aspx

    hf

    In theory there is no difference between theory and practice. In practice there is.

  • Natürlich gibt's die Java Invocation API.
    Das sie Teil von JNI ist ist formal korrekt, aber das macht sie noch nicht nicht existent.

    Ob man mit Google und Sun-Doku glücklich wird, hängt natürlich stark von die Anforderungen an.

    Braucht man nur gelegentlich einen Methodenaufruf, zB main(), ist's natürlich eher trivial.
    Da reichen tatsächlich Google und ein paar Stunden Zeit zum Erfolg.
    Braucht man sie aber "intensiver" vorallem im "Real Life Software Engeneering" gibt sie immer wieder subtile Probleme, die wünsch' ich meinen schlimmsten Feinden nicht ;)
    Aber vorallem helfen da Google & Docs einen Schei***** weiter.

    Meine konkrete Aufgabenstellung war: ca 10.000 LOC C Code, der eine C API intensiv benutzt auf eine (etwa äuqivalente) Java API umstellen.
    Die API ist sehr umfangreich ist und ca jede 2 Zeile Code beinhaltet Calls in diese API (etwas übertrieben aber nicht viel)
    Erstes unmittelbares Problem: Code bloat.
    Jeder Call der API der früher 1 Zeile benötigt hat, brauchte danach ca 10-100 Zeilen Code für den Java-Call.
    Das hat den Code dann auf ca 70.000 Zeilen aufgeblasen.
    Stark repetativer Code, nicht wartbar und sehr fehleranfällig.

    Eine "Vereinfachungs-API" in C für JIA war unerlässlich.
    Leider ist das nicht trivial, zB müssen alle Kombinationen von Input/Output Datentpen berücksichtigt werden uvm.

    Das größe Problem war aber subtiles "Andersverhalten" bei Calls via JIA versus native.
    zB bei der Garbage Collection, generell Stabilität bzw Instabilität (JVM crashes), Resourcen Verwaltung, Concurreny Problems uvm.
    Will das jetzt nicht vertiefen, aber JIA ist und bleibt ein Trauma für mich :)

    Zu beginn des Projekts bzw nach Erstanlyse dachte ich: Eh ganz easy und lässig, kein Problem.
    Hatte auch in Angebot einer kommerziellen Lösung dafür eingeholtet, das mich etw 20k gekostet hätte
    Das hab ich dankend abgelehnt.
    Im nachhinein betrachtet wär' mir die kommerzielle Lösung deutlich billiger gekommen.

    Das mag ein Extrembeispiel sein, aber ich denke, die Probleme die ich mit JIA hatte lagen nicht unbedingt an meiner Unfähigkeit, sonder eher daran, daß sie nicht gut und vorallem tückisch ist.

    Kann eigentlich nur davor warnen.

    mfg, lb


    Trading for a living [equities,futures,forex]

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!