Announcement

Collapse
No announcement yet.

Java Native Interface (JNI)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Java Native Interface (JNI)

    Hallo zusammen!

    nachdem ich in Folge dieses Threads beschlossen habe, in einem größeren Projekt auf Java-Klassen zuzugreifen (statt .NET), bin ich also nunmehr dabei, mich mit Java und dem JNI anzufreunden; dabei werden kleine Erfolgserlebnisse von Rückschlägen begleitet...
    Mein aktuelles Problem:
    Ich definiere eine Java-Klasse (irgendetwas Simples) namens 'test' und übersetze diese zu 'test.class'.

    Mein Delphi-Programm lädt die JVM und findet die Klasse:
    Code:
    Cls := FJNIEnv.FindClass('test');
    Alles ist gut.

    Übersetze ich die Klasse nun als Package 'mypack' gehen die Probleme los: FindClass findet die Klasse nicht mehr.
    Hm, wird wohl am ClassPath liegen...
    Mit
    Code:
    Options[0].optionString := '-Djava.class.path=.';
    hat die Variante ohne Package funktioniert.
    Ich habe nun fast den ganzen Tag mit Herumprobieren und Googeln zugebracht.

    - Ich habe test.java mit der Option -d übersetzt und so das Package-Verzeichnis mypack erzeugt.

    - Ich habe alle möglichen Varianten für ClassPath probiert, u. a.:
    Code:
    Options[0].optionString := '-Djava.class.path=D:\JavaTest\mypack';
    (ich habe irgendwo gelesen,. dass der absolute Pfad mit Backslashes ok sein soll)

    - Ich habe in FindClass die 'komplette' Klassenbezeichnung angegeben:
    Code:
    Cls := FJNIEnv.FindClass('mypack.test');
    - Ich bin ratlos .

    Hat jemand eine Idee?

    Herzliche Grüße

    Michael.

    PS: Ich arbeite übrigens mit dem Tutorial von Matthew Mead.

  • #2
    Mal eine grundsätzliche Frage: Als java Programierer muss ich mich fragen welchen Grund es gibt aus Delphi Java zu nutzen?

    Aus einer Plattform-Abhängigen Sprache eine Plattform-Unabhängigen Sprache aufrufen macht irgendwie überhaupt keinen Sinn.

    Wenn Du die Vorteile von Java nutzen willst würde ich das nativ machen.
    AlexDgG

    Es gibt keine dummen Fragen. Nur dumme Antworten!

    Comment


    • #3
      Originally posted by alexdgg View Post
      Mal eine grundsätzliche Frage: Als java Programierer muss ich mich fragen welchen Grund es gibt aus Delphi Java zu nutzen?

      Aus einer Plattform-Abhängigen Sprache eine Plattform-Unabhängigen Sprache aufrufen macht irgendwie überhaupt keinen Sinn.

      Wenn Du die Vorteile von Java nutzen willst würde ich das nativ machen.
      Einfach mal den verlinken Thread lesen....
      Christian

      Comment


      • #4
        Naja da würde ich eine Vernünftige Schnittstelle in Java entwickeln und die über Standardprotokolle als weitere Applikationsschicht einbinden. Direkt würde ich das nicht machen. (Ist nur so meine Meinung)
        AlexDgG

        Es gibt keine dummen Fragen. Nur dumme Antworten!

        Comment


        • #5
          über Standardprotokolle
          Welche?

          Ich empfinde allerdings diesen Weg auch als zu steinig. Würde eher versuchen, das komplett in Delphi zu realisieren...
          Christian

          Comment


          • #6
            Originally posted by Christian Marquardt View Post
            Welche?
            Da gibt es genügend

            HTTP
            HTTPS
            FTP
            SMTP
            ...

            Die funktionieren alle mit Delphi und Java und lassen sich auch für so was "missbrauchen".
            AlexDgG

            Es gibt keine dummen Fragen. Nur dumme Antworten!

            Comment


            • #7
              Hallo!

              Es ist leider nicht so, dass ich die große Auswahl habe. Anwendungen, die das OSCI-Protokoll verwenden müssen (!) die von der Leitstelle angebotenen Bibliotheken verwenden. Andernfalls werden die Programme nicht zertifiziert.
              Aber im Augenblick ist das auch nicht relevant; aktuell geht es um das oben geschilderte Problem, von dem ich denke, dass die Lösung 'eigentlich' nicht so schwer sein kann. Ich muss doch eine Klasse die als Package übersetzt wurde per JNI 'ansprechen' können?!

              Gruß Michael

              PS: Meine Frust-Schokokekse sind alle

              Comment


              • #8
                sry das ich mich eingemischt habe... kann dir leider überhaupt nicht bei delphi weiterhelfen. Wollte nur wissen wozu. Wünsch Dir viel Glück(!!!) bei der lösung des Problems.
                AlexDgG

                Es gibt keine dummen Fragen. Nur dumme Antworten!

                Comment


                • #9
                  Originally posted by alexdgg View Post
                  sry das ich mich eingemischt habe... kann dir leider überhaupt nicht bei delphi weiterhelfen. Wollte nur wissen wozu. Wünsch Dir viel Glück(!!!) bei der lösung des Problems.
                  Überhaupt kein Problem! Deine 'Einmischung' hat mich auf eine Idee gebracht, die ich schonmal verworfen hatte.
                  Da der Datenaustausch bei OSCI-Transport mit Hilfe von XML-Dokumenten erfolgt, kann ich doch ebensogut die ganze OSCI-Geschichte mit Java erledigen und die XML-Dateien mit Delphi erstellen bzw. lesen.
                  Also:
                  a) Delphi erstellt XML-Datei
                  b) Delphi ruft per JNI selbsterstellte Klasse auf, die die XML-Datei verarbeitet (--> OSCI-Transport) und erzeugt ggf. neue XML-Datei
                  c) Delphi liest ggf. neue XML-Datei

                  Ich installier´ mir jetzt erstmal Eclipse (oder besser JBuilder?)

                  Gruß Michael.

                  Comment


                  • #10
                    sax parser ))))))) funzt gut ))). Und du hast die 2 Sprachen die eigentlich gar nicht zueinander passen gekapselt. Würde ich machen. Die Übertragung von XML kannst Du ja über Files oder halt auch über Standardprotokolle (das würde ich machen z.B. HTTPS wegen der Verschlüsselung). Und mit Java hast du dann alle Möglichkeiten in der jar-Lib „rumzupopeln“


                    ... ich nutze den JBuilder und bin sehr zufrieden mit der API
                    AlexDgG

                    Es gibt keine dummen Fragen. Nur dumme Antworten!

                    Comment


                    • #11
                      (das würde ich machen z.B. HTTPS wegen der Verschlüsselung)
                      In HTTPS werden keine Daten verschlüsselt! Die Verbindung ist verschlüsselt die Daten nicht. Das sind unterschiedliche Layer im Netzwerkprotokoll.

                      Für Delphi ist TXML-Document noch vorhanden

                      Bei JBuilde ist darauf zu achten, möglchst nur die Standard-Librarys zu nutzen. Borland Packages laufen nicht überall. Insofern ist Eclipse oder Netbeans die bessere Wahl
                      Christian

                      Comment


                      • #12
                        Soweit brauch ich meine noch garnicht vorhandenen Java-Kenntnisse wahrscheinlich garnicht strapazieren. Das Parsen der XML-Files kann ich auch mit Delphi erledigen.
                        Nochmal kurz zur Anwendung:
                        Die Software läuft bei meinen Kunden auf einem oder mehreren Clients. Der Datenaustausch per OSCI-Transport erfolgt grundsätzlich nur zwischen den einzelnen Clients und einem Server über HTTP. Das Verschlüsseln der Daten erledigt dabei OSCI-Transport. Ich muss eigentlich 'nur' die Daten per XML bereitsstellen und die entsprechende Java-Klasse 'anschubsen' (jedenfalls stell ich mir das so vor...).

                        Vorhin habe ich Eclipse installiert; mal sehen, ob ich damit klarkomme, HelloWorld läuft immerhin schon...

                        Gruß Michael.

                        EDIT: Dieser Beitrag bezog sich auf Beitrag Nr. #10; Christian war schneller.

                        Comment


                        • #13
                          Bei JBuilde ist darauf zu achten, möglchst nur die Standard-Librarys zu nutzen. Borland Packages laufen nicht überall. Insofern ist Eclipse oder Netbeans die bessere Wahl
                          Wo hast denn Du die Info her??? Ich benutze die komplette API und die läuft überall (Windows, Linux, Unix und alles mit Standard jvm von SUN)! Du musst nur darauf achten mit javac zu kompilieren (geht einfach) und die Libs in dein jar-File zu sourcen.

                          In HTTPS werden keine Daten verschlüsselt! Die Verbindung ist verschlüsselt die Daten nicht. Das sind unterschiedliche Layer im Netzwerkprotokoll.
                          Ich würde auch keine Daten senden sondern HTTPS Post als übermittlung erwägen. Da sind die Daten dann verschlüsselt!
                          AlexDgG

                          Es gibt keine dummen Fragen. Nur dumme Antworten!

                          Comment


                          • #14
                            Ich würde auch keine Daten senden sondern HTTPS Post als übermittlung erwägen. Da sind die Daten dann verschlüsselt!
                            Nein sind sie nicht. Die Verbindung wird verschlüsselt nicht die Daten und mit POST oder GET hat das nichts zu tun. Auch GET Requests können per HTTPS genuttzt werden.

                            Wenn du den HTTPS Schlüssel einer Verbindung hast, kannst du die Verbindung mitsniffern und hast die Daten. Diese sind nicht extra verschlüsselt.

                            Wo hast denn Du die Info her???
                            Der propäritäre Borlandcode läuft nicht ohne Library. Dein Quellcode kann ich ggf. nicht nutzen.
                            Zuletzt editiert von Christian Marquardt; 13.08.2010, 14:07.
                            Christian

                            Comment


                            • #15
                              Originally posted by MAS View Post
                              Soweit brauch ich meine noch garnicht vorhandenen Java-Kenntnisse wahrscheinlich garnicht strapazieren. Das Parsen der XML-Files kann ich auch mit Delphi erledigen.
                              Nochmal kurz zur Anwendung:
                              Die Software läuft bei meinen Kunden auf einem oder mehreren Clients. Der Datenaustausch per OSCI-Transport erfolgt grundsätzlich nur zwischen den einzelnen Clients und einem Server über HTTP. Das Verschlüsseln der Daten erledigt dabei OSCI-Transport. Ich muss eigentlich 'nur' die Daten per XML bereitsstellen und die entsprechende Java-Klasse 'anschubsen' (jedenfalls stell ich mir das so vor...).

                              Vorhin habe ich Eclipse installiert; mal sehen, ob ich damit klarkomme, HelloWorld läuft immerhin schon...

                              Gruß Michael.

                              EDIT: Dieser Beitrag bezog sich auf Beitrag Nr. #10; Christian war schneller.
                              Dann würde ich dir folgendes vorschlagen:

                              1. JNI ist eine API von Java um Plattform spezifische (C++, Delphi, Fortran) Bibliotheken in Java einzubinden. Das wird dir in Delphi nichts nützen, auser es gibt in Delphi ein JNI das ich noch nicht kenne.
                              2. Du baust eine Java Applikation, die den Transport über OSCI übernimmt und in einer selbststartenden jar-Datei eingebettet ist.
                              3. Du machst dir dein XML File in Delphi und speicherst es af der Platte.
                              4. Du rufst aus Delphi java –jar deinejavaapps.jar pfad\xmldatei.xml [optional weiter Parameter zur Steuerung ] auf.
                              5. Deine Java Applikation untersucht die Startparameter pfad\xmldatei.xml [optional weiter Parameter zur Steuerung ] und leitet die Übertragung ein.
                              6. Deine Java Applikation gibt ein Respons an Dein Delphi Programm und beendet.
                              AlexDgG

                              Es gibt keine dummen Fragen. Nur dumme Antworten!

                              Comment

                              Working...
                              X