[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Mar 2005
    Beiträge
    44

    Unhappy Aufruf von Java Methode aus RPG

    Hallo zusammen...

    ich versuche nun schon seid einiger Zeit, eine einfache, selbstgeschriebene Java Klasse aus einem RPG-Programm aufzurufen.
    Die Java Klasse mit der Methode ist fehlerfrei. Da liegt nicht das Problem.
    Aber wenn ich die Methode aus RPG aufrufe erhalte ich den Fehler: "java.lang.NoSuchMethodError: berechne" .
    Meine Klasse verfügt über diese Methode, die erwartet weder Parameter, noch gibt sie was zurück.
    In RPG habe ich die Klasse/Methode so definiert:

    D Aufruf PR EXTPROC(*JAVA : 'Rechner' : d 'berechne') D STATIC

    C CALLP Aufruf

    Die Klasse befindet sich in /HOME/USER als .java und .class
    Ich habe auch schon den Klassenpfad mit:
    ADDENVVAR ENVVAR(HOME) VALUE('/HOME/USER')
    gesetzt, ohne Erfolg.

    Weiß jemand, wo mein (Denk)Fehler liegt?

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Hallo,

    deren gibt es mehrere:
    - Classpath ist case sensitive
    - IFS root ist case sensitive
    - Java Klassen könnten auch noch in einem Package sein, dann muss die Klasse entsprechend plaziert werden
    - die JVM könnte später von einem vorherigen Aufruf bereits gestartet sein, dann zieht der Classpath nicht mehr

    im übrigen ist davon abzuraten aus RPG synchron Java aufzurufen, für jeden Job, der sowas verwendet, wird eine eigene JVM gestartet und das dauert nicht nur lange, sondern fährt dir jede Kiste platt. Genau deshalb empfiehlt IBM das und macht Reklame für on demand.

    mfg

    Dieter Bender

    Zitat Zitat von codierknecht
    Hallo zusammen...

    ich versuche nun schon seid einiger Zeit, eine einfache, selbstgeschriebene Java Klasse aus einem RPG-Programm aufzurufen.
    Die Java Klasse mit der Methode ist fehlerfrei. Da liegt nicht das Problem.
    Aber wenn ich die Methode aus RPG aufrufe erhalte ich den Fehler: "java.lang.NoSuchMethodError: berechne" .
    Meine Klasse verfügt über diese Methode, die erwartet weder Parameter, noch gibt sie was zurück.
    In RPG habe ich die Klasse/Methode so definiert:

    D Aufruf PR EXTPROC(*JAVA : 'Rechner' : d 'berechne') D STATIC

    C CALLP Aufruf

    Die Klasse befindet sich in /HOME/USER als .java und .class
    Ich habe auch schon den Klassenpfad mit:
    ADDENVVAR ENVVAR(HOME) VALUE('/HOME/USER')
    gesetzt, ohne Erfolg.

    Weiß jemand, wo mein (Denk)Fehler liegt?
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  3. #3
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005
    ...außerdem hast Du spätestens ab V5R3 ein Problem mit den JVMs. Ab diesem Release kann man nämlich nicht mehr als eine JVM in einem Job starten. Wie BenderD schon geschrieben hat, greift dann das Ändern des Classpaths nicht mehr, wenn die JVM schon gestartet ist. Und explizit beenden kann man eine JVM nach neuesten Informationen ab V5R3 auch nicht mehr. Wir stehen nämlich gerade vor dem Problem, dass nach dem Releasewechsel sämtliche Programme abschmieren, die diese Systematik benutzen.

    Gruß,
    KM

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Hallo,

    das kann ich mir nicht vorstellen, das würde der JNI Spezifikation widersprechen und die Kaffeetasse kosten. Es könnte allerdings sein, dass dann einiges an dem Murks nicht mehr so glatt funktioniert, den der RPG Compiler da so zusammen schustert.

    mfg

    Dieter Bender

    Zitat Zitat von KM
    Und explizit beenden kann man eine JVM nach neuesten Informationen ab V5R3 auch nicht mehr. KM
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  5. #5
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005
    Anbei eine Antwort von Barbara Morris (die bei IBM bzgl. RPG und Java nicht ganz unbekannt ist). Ich hab das allerdings noch nicht ausprobiert.

    you won't be able to end the JVM when you go to V5R2. The system changed not to allow the JVM to be destroyed explicitly, and if it gets destroyed due to some error, you can't create another one.
    Gruß,
    KM

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Hallo,

    RPG mag sie ja können ... das ist wohl aus der Java400-l und bezieht sich meines Wissens auf RCLACTGRP, was ich ansprach sind die C Apis zum laden und beenden von JVMs; da müsste man dann für RPG Prototypen schreiben und die aufrufen, aber wahrscheinlich klebt man dann an der Ecke, dass der Krumsch, den der RPG Compiler generiert hat die JVM nicht findet und man müsste das dann auch zu Fuß machen. Aber ich bin da sowieso für striktes entkoppeln über einen asynchronen Serverdienst mit einer residenten JVM.

    mfg

    Dieter Bender

    Zitat Zitat von KM
    Anbei eine Antwort von Barbara Morris (die bei IBM bzgl. RPG und Java nicht ganz unbekannt ist). Ich hab das allerdings noch nicht ausprobiert.



    Gruß,
    KM
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  7. #7
    Registriert seit
    Mar 2005
    Beiträge
    44

    Classpath

    Hallo zusammen,

    ich habe nun ein kleines Programm geschrieben, dass JNI verwendet (Standartbeispiel vin IBM).
    Das Programm wird mit der Meldung abgebrochen, dass die Klasse java. BigDecimal nicht gefunden wurde. Wo befinden sich die Standardklassen auf der AS400? Wie muß ich den Classpath setzen?

    Vielen Dank

  8. #8
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Hallo,

    für BigDecimal garnicht, jedenfalls wenn du java.math.BigDecimal meinst, dann musst du das allerdings bei JNI auch sagen.

    Dieter Bender

    PS: vielleicht noch eine grundsätzliche Anmerkung: es macht wenig Sinn sich ausgerechnet mit JNI und RPG Java Mix zu beschäftigen, ohne einigermaßen solide Java Kenntnisse zu haben, da stolpert man von einer Katastrophe in die nächset und was dann nacher funktioniert sind dann Zufalls Ergebnisse.

    Zitat Zitat von codierknecht
    Hallo zusammen,

    ich habe nun ein kleines Programm geschrieben, dass JNI verwendet (Standartbeispiel vin IBM).
    Das Programm wird mit der Meldung abgebrochen, dass die Klasse java. BigDecimal nicht gefunden wurde. Wo befinden sich die Standardklassen auf der AS400? Wie muß ich den Classpath setzen?

    Vielen Dank
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. RPG aus Java aufrufen
    By Vicky-B in forum NEWSboard Java
    Antworten: 17
    Letzter Beitrag: 06-05-08, 11:05
  2. Problem mit Java-Methoden Aufruf aus ILE RPG?
    By Stoeberl in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 10-01-07, 10:58
  3. Rpg to java
    By Badener in forum NEWSboard Java
    Antworten: 5
    Letzter Beitrag: 13-07-06, 17:09
  4. Java Programm aus ILE RPG aufrufen
    By PGMR in forum NEWSboard Programmierung
    Antworten: 0
    Letzter Beitrag: 02-02-05, 13:10
  5. Aufruf von Java Programm direkt aus RPG
    By mk in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 09-09-04, 08:22

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •