1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Von C aus auf Java Methoden/Klassen zugreifen

  • Mash
  • 25. April 2010 um 23:19
  • Unerledigt
  • Mash
    7
    Mash
    Mitglied
    Reaktionen
    1
    Punkte
    481
    Beiträge
    82
    • 25. April 2010 um 23:19
    • #1

    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

  • MickeyM
    3
    MickeyM
    Mitglied
    Reaktionen
    4
    Punkte
    89
    Beiträge
    15
    • 26. April 2010 um 01:08
    • #2

    das sollte weiterhelfen: http://tinyurl.com/34hj777

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

  • Lord Binary
    18
    Lord Binary
    Mitglied
    Reaktionen
    11
    Punkte
    3.301
    Beiträge
    647
    • 26. April 2010 um 09:46
    • #3

    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]

  • Ringding
    11
    Ringding
    Mitglied
    Reaktionen
    12
    Punkte
    1.237
    Beiträge
    244
    • 26. April 2010 um 11:43
    • #4

    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.

  • MickeyM
    3
    MickeyM
    Mitglied
    Reaktionen
    4
    Punkte
    89
    Beiträge
    15
    • 26. April 2010 um 13:20
    • #5

    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.

  • Lord Binary
    18
    Lord Binary
    Mitglied
    Reaktionen
    11
    Punkte
    3.301
    Beiträge
    647
    • 4. Mai 2010 um 12:13
    • #6

    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 :winking_face:
    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]

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

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

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung