View Full Version : Externe Java Procedur / Parameterübergabe
Hallo,
In meiner neuen Aufgabe muss (darf) ich Java-Classen in RPG-Programm einbinden. Das funktioniert an sich einwandfrei und ist nicht so schwer wie sich anhört, jetzt habe ich aber bei zwei classen folgendes problem: Der kompiler streikt schon mit der meldung *RNF5406 Aufruf hat weniger Parameter übergeben als laut Prototyp erforderlich sind. Die codierung sieht wie folgt aus:
Variablen:
d InputStream s O CLASS(*JAVA
d :'java.io.FileInputStream ')
d POI_FS s O CLASS(*JAVA
d :'org.apache.poi.poifs.filesystem.-
d POIFSFileSystem')
d CurInpStream s like(InputStream)
Procedur:
D new_POI_FS PR like(POI_FS)
d EXTPROC(*JAVA
D :'org.apache.poi.poifs.filesystem.-
D POIFSFileSystem'
D :'*CONSTRUCTOR')
D InpStream like(InputStream)
Und der Aufruf selbst:
CurFs = new_POI_FS(CurInpStream);
Kann mir jemand einen Tip geben?
Vielen Dank
Roman
Hallo,
kann es sein, dass mit den JAVA-Methoden Objetke bearbeitet werden müssen?
Wenn ja, muss das entsprechende Objekt zuerst durch Aufruf der Constructor-Methode instantiiert werden.
Abschliessend muss das Objekt als 1.Parameter übergeben werden.
Im Prototyp wird das Objekt allerdings nicht hinterlegt.
Birgitta
Hallo Roman,
bei mir sieht das ganze so aus:
Prototypen:
* new POIFSFileSystem (InputStream) - FileSystem CONSTRUCTOR --------
D createfs PR O ExtProc(*JAVA
D :'org.apache.poi.poifs.filesystem-
D .POIFSFileSystem'
D :*CONSTRUCTOR)
D Class(*JAVA
D :'org.apache.poi.poifs.filesystem-
D .POIFSFileSystem')
D inpFile O Class(*JAVA
D :'java.io.InputStream')
* new FileInputStream(String file) - FileInputStream CONSTRUCTOR ----
D FileInputStream...
D PR O ExtProc(*JAVA
D :'java.io.FileInputStream'
D :*CONSTRUCTOR)
D Class(*JAVA
D :'java.io.FileInputStream')
D file O Class(*JAVA:'java.lang.String')
Aufruf:
is = FileInputStream(tfileName);
fs = createfs(is);
Das funktioniert bei mir. Kannst es ja mal mit Deinem Code vergleichen.
Gruß,
KM
Da sträubt sich ja alles. Warum Java-Funktionen, wenn es entsprechende C-Funktionen gibt ? Die sind allemal leichter einzubinden und erheblich performanter (der riesige Overhead und die ganze ständige Typumwandlung entfallen dabei).
Diese FileStream-Funktionen deuten für mich auf IFS-Zugriffe hin, die in C-Funktionen wesentlich leichter zu realisieren sind.
hallo,
vielen dank, leider kenne ich keine c-funktionen, die excel lesen, verändern und dann ausgeben. falls es aber welche gibt - her damit, werde sehr dankbar. bin auch der meinung, dass man immer versuchen soll mit einfachen mitteln zu arbeiten.
mfg roman
@Fuerchau
Hier geht es um die Verarbeitung von Excel-Tabellen. Erkläre mir doch bitte mal wie Du das mit Deinen C-Funktionen machen willst ???? Das würde mich dann schon mal interessieren.
KM
@KM
DAS geht ja nicht aus DIESEM sondern aus einem anderen Beitrag hervor ;)
Deshalb:
Bitte nicht immer neue Beträge erstellen, wenn der andere noch nicht abgeschlossen ist. Sonst geht der Zusammenhang verloren (wie mir ja passiert).
Und was diese Excel-Lösung angeht: warum wird diese dann nicht komplett in Java gemacht (mit SQL auf die DB), als diesen Mischmasch mit RPG ?
Das würde wesentlich weniger problemanfällig und, denke ich, auch performanter als dieses ständige hin und her !!!
@Fuerchau
OK, ich gebe zu, dass man nicht unbedingt wissen kann, dass sich POI hauptsächlich mit der Verarbeitung von Excel-Tabellen und Word-Dokumenten beschäftigt. Aber dann solltest Du auch solche Bemerkungen wie "Da sträubt sich ja alles" besser bleiben lassen, wenn Du nicht weißt worum es geht.
Du hast vollkommen Recht, dass es sauberer und deutlich performanter wäre, wenn man das komplett in Java machen würde. Aber die Frage bezog sich nun mal auf RPG+Java. Und Roman scheint es da wohl genauso zu gehen wie mir, dass nämlich fast sämtliche Applikationen auf der iSeries in RPG laufen und man natürlich dazu verleitet wird Bausteine von anderen Programmiersprachen mit einzubinden, wenn schon die Möglichkeit besteht. Aber das soll jeder für sich selbst entscheiden. Wer aus der RPG-Welt kommt, tut sich halt recht schwer gleich komplett auf Java umzusteigen.
Gruß,
KM
Hallo,
diese Probleme sind im wesentlichen von dem Hersteller des Systems zu verantworten und weniger von den beteiligten Programmierern.
IBM hat in den RPG Compiler einen Mechanismus eingebaut, der halt nur fast funktioniert, aber relativ einfach zu benutzen ist, bietet aber andererseits nur Work arounds an, was die Java Integration angeht.
Java hat eine komplette Palette an Standardwegen zur Einbindung von heterogenen Komponenten und zur universellen Verwendung von Java Komponenten. Ob CORBA, WebServices oder Message driven Beans, da ist alles da, aber die AS400 darf oder kann das nicht, oder nur in Verbindung mit teurer Software (MQ Series) und die Dokumentationslage ist grausam: dicke Wälzer über Toolbox und WebsFear, Fehlanzeige über RPG und offene Standards!. Und das enge vernähen von RPG und Java wird von führenden Köpfen der RPG Fraktion auch noch als der wahre Jakob verkauft.
mfg
Dieter Bender
Und was diese Excel-Lösung angeht: warum wird diese dann nicht komplett in Java gemacht (mit SQL auf die DB), als diesen Mischmasch mit RPG ?
Das würde wesentlich weniger problemanfällig und, denke ich, auch performanter als dieses ständige hin und her !!!
also ich werde mich vom fenster stürzen - ich mache es ganauso und bei mir geht es halt nicht. könnte sein, dass das ein compilerproblem ist? sonst noch ideen.
Ansonsten vielen dank,
mfg roman