Java quasi als Prozedur/Funktion aus VB.net aufrufen

  • Java

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Walchhofer.

    Java quasi als Prozedur/Funktion aus VB.net aufrufen

    Guten Abend,

    ich bitte wieder mal um Hilfe der Community.

    Ich habe ein Programm, welches in VB.net geschrieben ist. Und jetzt will unser Gesetzgeber, dass komplizierte Verschlüsselungen eingesetzt werden.
    (Es geht um die österreichische Registrierkassen-Sicherheitsverordnung. Ein Unding ...)

    Jetzt stellt man diese ganzen Verschlüsselungsmechanismen in Java zur Verfügung. Die Variante, mein VB-Programm in Java zu portieren, ist sehr viel Arbeit. Und ich denke, mit den verwendeten SQL-Befehlen wäre es vlt. nicht so einfach. (Oder gäbe es da evtl. einen Assistenten, der dies macht ?)

    Die JAVA-Geschichte in VB.net zu portieren, denke, auch hier gibt es keinen Assistenten mehr? (VS 2005 mit J# und dem Generator dazu ist ja Geschichte) Und hier trau ich mich nicht, da die Algorithmen zu kompliziert sind, und ständig neu definiert werden.

    Eine Lösung, die relativ einfach wäre - kann ich irgendwie von VB.net so quasi JAVA so irgendwie als Funktion aufrufen ? Also diese irgendwie als externe Funktion einbinden ?

    Eine Notlösung könnte ja mit Shell gehen - Aufrufparameter in eine Datei stellen, Ergebnis wieder in eine Datei schreiben lassen, in VB wieder auslesen.
    Aber dies ist natürlich eine fürchterliche Krücke, würde zwar in der Anwendung zeitmässig sogar funktionieren, aber schön ist es nicht.

    Hat wer eine Idee, wie das optimal gehen könnte ?

    Danke im Voraus, LG Michi :)
    Du kannst es über Named Pipes versuchen. Das ist eine Möglichkeit für Prozesse, untereinander zu kommunizieren. Über diese Pipe kannst du dann die zu verschlüsselnden Daten an einen in Java geschriebenen Wrapper für die Java-Library schicken und die verschlüsselten Daten an dein VB.NET-Programm zurückschicken.
    Abhängig von der Art und Weise, wie das Java-Programm funktioniert, würde es schon reichen, die eingehenden Daten über den StandardInput-Stream in den Java-Prozess zu schmeißen und das Ergebnis über den StandardOutput-Stream rauszugeben. Dadurch spart man sich den Umgang mit Named Pipes: Konsole starten und Befehle übergeben bzw. Ergebnisse Auslesen
    Beim Ansatz mit Named Pipes:
    Wird nur ein Java-Prozess gestartet.
    Muss man sich eine Art Mini-Protokoll überlegen, anhand dessen man die Daten zwischen den Prozessen austauscht. Z.B. wird zuerst ein Byte 1 gesendet, das bedeutet, dass die nachfolgenden Daten verschlüsselt werden sollen. Dann wird die Länge der zu verschlüsselnden Daten in 4 oder 8 Bytes gesendet. Und dann werden die Daten gesendet.
    Beim Ansatz mit den StandardInput- und StandardOutput-Streams:
    Wird für jede Verschlüsselung oder Entschlüsselung ein neuer Java-Prozess gestartet, und sofort wieder beendet.
    Können Optionen wie z.B. ob verschlüsselt oder entschlüsselt werden soll, über die Befehlszeilenargumente angegeben werden und nur die rohen Daten werden durch die Streams geschickt. Ich bin mir gerade nicht sicher, ob auch die Länge der zu verschlüsselnden Daten mit angegeben werden muss. Müsste man ausprobieren.

    Ich habe auch noch eine andere Möglichkeit gefunden: Du kannst eine sogenannte Runtime Bridge verwenden. Siehe devx.com/interop/Article/19945 ganz unten.
    Zum Beispiel das hier: jni4net.com/
    Das könnte overkill für Dein Problem sein, aber Du kannst es Dir mal angucken.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Guten Abend Ihr beiden,

    danke, das werde ich mir alles mal anschauen.

    Werde einige Zeit brauchen, um mich in Java zurechtzufinden, da helfen die Beispiele gut weiter.
    Mit einem Lauffähigem Grundkonstrukt ist es einfacher, mit TryAndError weiterzuwerkeln.

    Eine der Lösungen wird mir helfen - danke für die Hilfe

    LG Michael