Java Funktuion aus Xbase aufrufen

Es soll sie ja geben ...

Moderator: Moderatoren

Antworten
ichbindabei
Rookie
Rookie
Beiträge: 12
Registriert: Mo, 01. Sep 2008 9:51

Java Funktuion aus Xbase aufrufen

Beitrag von ichbindabei »

Hallo zusammen
Ich habe ein altes Xbase Programm.
Aus diesem möchte ich nun eine Funktion aufrufen, die in Java geschrieben ist.

Hat irgendwer sowas schonmal gemacht oder weiß wie es geht?

Danke schonmal im vorraus.
Gruß
Ichbindabei
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Java Funktuion aus Xbase aufrufen

Beitrag von brandelh »

Hi,

da bleibt die Frage offen, ob diese JAVA Funktion nach Xbase++ umgesetzt werden kann
oder ob man aus Xbase++ heraus auf die Java-Runtime soll ?

Der erste Fall ist recht einfach, solange man den Quellcode hat, java versteht und keine exotischen Sachen benötigt werden ...
Gruß
Hubert
ichbindabei
Rookie
Rookie
Beiträge: 12
Registriert: Mo, 01. Sep 2008 9:51

Re: Java Funktuion aus Xbase aufrufen

Beitrag von ichbindabei »

Nein so einfach ist das leider nicht.
Ich brauche den 2. Teil.
Ich habe ein in Java geschriebenes Programm und möchte dieses aus Xbase aufrufen.
Dabei muss aber sichergestellt sein das es im Xbase erst dann weiter geht, wenn man aus dem java wieder zurück springt.
Schön wäre es wenn ich das Java Programm wie eine Funktion in einer DLL aufrufen könnte.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Java Funktuion aus Xbase aufrufen

Beitrag von brandelh »

ichbindabei hat geschrieben:Schön wäre es wenn ich das Java Programm wie eine Funktion in einer DLL aufrufen könnte.
ob das geht weiß ich nicht, aber ich könnte mir vorstellen, dass man mit RunShell() arbeiten könnte.
Wenn der Parameter lAsync := .f. ist, wartet das Xbase++ Programm auf das Ende des aufgerufenen Programmes.
Bei Phil gibt es eine Abwandlung, die sogar Ergebnisse direkt in Variablen übergibt.
Wenn dur nur den Rückgabewert brauchst und die Parameter in der Befehlszeile übergeben kannst, geht das gut.
Ansonsten musst du über Zwischenspeicher nachdenken.
Gruß
Hubert
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Re: Java Funktuion aus Xbase aufrufen

Beitrag von Alfred »

Was kann denn ein Java-Programm was Xbase nicht kann?

Gruß
Alfred
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Re: Java Funktuion aus Xbase aufrufen

Beitrag von Lewi »

Ich habe Anwendungen unter .NET realisiert, die wiederum Fremdanwendungen über ActiveX bzw. DCOM aufrufen und steuern um z.B. Daten von Fremdanwendungen in ein xBase zu importieren.
Die .NET-Anwendungen wiederum speichern die Daten aus Fremdanwendungen in Dateien, die benutzerabhängig in entprechende Pfade abgelegt werden. Die xBase-Anwendung wiederum liest diese Dateien ein und wertet sie aus. Der Aufruf der .NET-Anwenunge erfolgt über runshell() im synchronen Modus. Daten von xBase an .NET-Anwendungen werden über Ini-Files übergeben, die dann eingelesen werden.

Im Prinzip sollten diese Verfahren auch für JAVA-Anwendungen angewandt werden können. Bis auf den Umstand, dass manche externe Anwendungen, die ein DCOM-Service bereit stellen, nach Beendigung der Transaktion nicht ordnungsgemäß aus dem Speicher entfernt werden und es bei einem erneuten Aufruf zu Problemen kommen kann", funktioniert das angesprochene Verfahren im Praxiseinsatz stabil. Das Problem mit der Speicherentfernung habe ich insofern lösen können, dass mittels API-Funktionen die ensprechenden Task beenden werden bevor die Fremdanwendung erneut über .NET aufgerufen wird.

Gruß, Olaf
ichbindabei
Rookie
Rookie
Beiträge: 12
Registriert: Mo, 01. Sep 2008 9:51

Re: Java Funktuion aus Xbase aufrufen

Beitrag von ichbindabei »

Die lösung mit RunShell() scheint zu klappen
allerdings schaffe ich es nicht die .jar datei direkt zu starten sondern starte sie über eine cmd.
aber zumindes wartet Xbase so bis java wieder beendet wird.
java muss es deswegen sein weil meine kollegen zum teil nur java können.
Danke für die hilfreichen antworten.
wenn noch jemand weiß wie ich direkt die .jar datei starten kann wär das noch hilfreich ansonnsten bleibt die cmd halt dazwischen.
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Java Funktuion aus Xbase aufrufen

Beitrag von Wolfgang Ciriack »

Also ich hab hier so eine Batchdatei, in der wird die jar-Datei einfach aufgerufen mit:
java -xxx.jar - und ein Haufen Parameter dahinter.

Das sollte dann mit Runshell etwa so funktionieren:

para:="meinjavaprog.jar"
prog:="C.\windows\system32\java.exe"

Runshell(para, prog,.F.)
Viele Grüße
Wolfgang
ichbindabei
Rookie
Rookie
Beiträge: 12
Registriert: Mo, 01. Sep 2008 9:51

Re: Java Funktuion aus Xbase aufrufen

Beitrag von ichbindabei »

ne geht leider nicht
passiert irgendwie garnichts wenn ich das versuche
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9343
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 358 Mal
Kontaktdaten:

Re: Java Funktuion aus Xbase aufrufen

Beitrag von Tom »

Wenn Du als vierten Parameter (lBackGround) bei RunShell() .T. angibst, sieht man die CMD-Box immerhin nicht mehr.

Eigentlich müsste das auch über/mit RunDll gemacht werden können, wenn der Java-Interpreter als Standardprogramm festgelegt ist.
Herzlich,
Tom
ichbindabei
Rookie
Rookie
Beiträge: 12
Registriert: Mo, 01. Sep 2008 9:51

Re: Java Funktuion aus Xbase aufrufen

Beitrag von ichbindabei »

ja ich denke das ich es auch mit der batch machen werde
danke an alle
Antworten