-
Java Stored Procedure
Hallo,
ich versuche eine Java Stored Procedure aufzurufen. Im ersten Schritt
habe ich ein kleines Java Programm erstellt.
Code:
public class JDummy {
public static void main(String[] args) {
System.out.println("... call method JDummy");
JDummy();
System.out.println("... back");
}
public static void JDummy() {
System.out.println("... inside method");
}
}
Kompiliert und nach /QIBM/UserData/OS400/SQLLib/Function
kopiert. Die main-Methode und println sind einfach nur zum Testen.
Als nächstes registriere ich die Methode mit:
Code:
CREATE PROCEDURE JDummy()
LANGUAGE JAVA
PARAMETER STYLE JAVA
NOT FENCED
EXTERNAL NAME 'JDummy.JDummy'
Das ganze habe ich auch über iSeries Navigator probiert. Beim Aufruf
über Navigator oder mittels STRSQL call QGPL/jdummy() kriege ich
Fehlermeldungen meine EXTERNAL NAME Klausel stimmt nicht, aber was?.
Warum funktioniert das nicht? Die Vorgehensweise ist
aus dem redbook
'Stored Procedures, Triggers and User Defined Functions on DB2 Universal
Database for iSeries'
entlehnt.
Gruß Andreas
-
Meiner Meinung nach müsste es
...
EXTERNAL NAME 'JDummy!main'
heißen, wo bei man das !main vielleicht weglassen kann.
Siehe auch:
http://publib.boulder.ibm.com/iserie...2929/index.htm
LG
Robert P.
-
Hallo RobertPic,
die main-methode habe ich implementiert um die kompilierte
Klasse auf der AS/400 zu testen. Dazu rufe ich einfach in
einer QSH-Sitzung 'java JDummy' auf.
Mit ... external name 'JDummy!main' habe ich es aber auch
probiert und es funzt nicht.
In allen Beispielen wird so vorgegangen, wie ich es beschrieben
habe. Irgendwo habe ich eine winzige Kleinigkeit übersehen,
aber wo???
Gruß Andreas
Zitat von RobertPic
-
Hallo,
es ist möglicherweise für den SQL Java Stub verwirrend, dass du die Methode mit dem Klassennamen identisch hast, das riecht nach Konstruktor, ist aber keiner; ich habe das allerdings noch nicht gemacht und rate auch davon ab.
Java stored Procedures führen dazu in jedem Serverjob, der sowas verwendet eine JVM zu starten und in jedem lokalen Job, der das mit COBOL/RPG via SQL verwendet ebenfalls. Da freut sich allenfalls IBM über die Hardware, die man dafür braucht, aber der Anwender ärgert sich, weil das trotzdem nicht brummt und der Programmierer ärgert sich, weil das nur fast funktioniert, zumindest, wenn man Voraussetzungen an die JVM hat.
Was soll die stored Procedure denn machen? da gibt es sicher was besseres1
mfg
Dieter Bender
Zitat von HeisigA
Hallo,
ich versuche eine Java Stored Procedure aufzurufen. Im ersten Schritt
habe ich ein kleines Java Programm erstellt.
Code:
public class JDummy {
public static void main(String[] args) {
System.out.println("... call method JDummy");
JDummy();
System.out.println("... back");
}
public static void JDummy() {
System.out.println("... inside method");
}
}
Kompiliert und nach /QIBM/UserData/OS400/SQLLib/Function
kopiert. Die main-Methode und println sind einfach nur zum Testen.
Als nächstes registriere ich die Methode mit:
Code:
CREATE PROCEDURE JDummy()
LANGUAGE JAVA
PARAMETER STYLE JAVA
NOT FENCED
EXTERNAL NAME 'JDummy.JDummy'
Das ganze habe ich auch über iSeries Navigator probiert. Beim Aufruf
über Navigator oder mittels STRSQL call QGPL/jdummy() kriege ich
Fehlermeldungen meine EXTERNAL NAME Klausel stimmt nicht, aber was?.
Warum funktioniert das nicht? Die Vorgehensweise ist
aus dem redbook
'Stored Procedures, Triggers and User Defined Functions on DB2 Universal
Database for iSeries'
entlehnt.
Gruß Andreas
-
Was ich nicht verstehe ist der Aufruf :
Also ich würde es mal mit :
versuchen.
Im Prinzip hängt es aber davon ab wie bzw. wo (schema) die procedure registriert wurde :
Auszug aus dem Redbook :
Note: We do not qualify the stored procedure names with a library (schema) name. If the
current naming convention for the Run SQL Scripts session is *SQL, the stored procedures
are registered in the library with the same name as the current user profile for this session.
If the naming convention is *SYS, the stored procedures are registered in the current
library.
Also ich würde mal im Katalog SYSROUTINES nachschauen wie die Java Proc registriert ist.
Wenn nicht versuchs mal mit :
Code:
CREATE PROCEDURE JDummy()
LANGUAGE JAVA
PARAMETER STYLE JAVA
NOT FENCED
EXTERNAL NAME 'JDummy!JDummy'
-
Hallo Sven,
war leider verhindert, deshalb verspätet die Antwort. Vorab möchte ich sagen,
dass ich Neuling bezüglich AS/400 DB2 bin. Die AS/400 Nomenklatur ist mir noch fremd.
Wenn ich im Navigator teste muss ich das/die Schema/Lib angeben. Die Procedure liegt laut SYSIBM.ROUTINES im "Specific_Schema" QGPL und "Routine_Schema" QGPL. Mit "call QGPL/routine()", dachte ich, kann ich im Navigator die Procedure aufrufen und testen. Der Tipp mit den SYSROUTINES war super. Nun kann ich ähnlich wie in Oracle meine Objekte angucken. Auf unser DB/2 heisst die Tabelle "SYSIBM.ROUTINES". Wird wahrscheinlich ab V8 so sein. Kannst du mir einen Auszug deiner "..ROUTINES" zukommen lassen, wo JAVA Procedures registriert sind und sich aufrufen lassen? Vielleicht erkennt man an den Spalten "External_Name;External Language" was bei mir schief läuft.
Gruß Andreas
Zitat von Sven Schneider
Was ich nicht verstehe ist der Aufruf :
Also ich würde es mal mit :
versuchen.
Im Prinzip hängt es aber davon ab wie bzw. wo (schema) die procedure registriert wurde :
Auszug aus dem Redbook :
Note: We do not qualify the stored procedure names with a library (schema) name. If the
current naming convention for the Run SQL Scripts session is *SQL, the stored procedures
are registered in the library with the same name as the current user profile for this session.
If the naming convention is *SYS, the stored procedures are registered in the current
library.
Also ich würde mal im Katalog SYSROUTINES nachschauen wie die Java Proc registriert ist.
Wenn nicht versuchs mal mit :
Code:
CREATE PROCEDURE JDummy()
LANGUAGE JAVA
PARAMETER STYLE JAVA
NOT FENCED
EXTERNAL NAME 'JDummy!JDummy'
-
Hallo BenderD,
leider erst jetzt die Antwort, war vorübergehend verhindert. Ja, da gebe ich Dir recht. Nur ist mein Ehrgeiz furchtbar angestachelt eine Java-Stored-Procedure zum Laufen zu bringen. Ausgangspunkt war/ist, Altdatenübernahme und die Transformation dieser. Da ich sehr gute Java-Programmierer kenne und ich sagte, laut Doku laufen auch Java-Stored-Procedures auf unserem Server, bin ich einfach geneigt dieses auch zum Laufen zu bringen. Mit meiner geposteten Klasse war das Beispiel vielleicht unglücklich gewählt, ich habe auch das Ganze ohne konstruktorähnliche Methode ausprobiert. Ohne Erfolg.
Eine weitere Hilfestellung wäre nett.
Gruß Andreas
Zitat von BenderD
Hallo,
es ist möglicherweise für den SQL Java Stub verwirrend, dass du die Methode mit dem Klassennamen identisch hast, das riecht nach Konstruktor, ist aber keiner; ich habe das allerdings noch nicht gemacht und rate auch davon ab.
Java stored Procedures führen dazu in jedem Serverjob, der sowas verwendet eine JVM zu starten und in jedem lokalen Job, der das mit COBOL/RPG via SQL verwendet ebenfalls. Da freut sich allenfalls IBM über die Hardware, die man dafür braucht, aber der Anwender ärgert sich, weil das trotzdem nicht brummt und der Programmierer ärgert sich, weil das nur fast funktioniert, zumindest, wenn man Voraussetzungen an die JVM hat.
Was soll die stored Procedure denn machen? da gibt es sicher was besseres1
mfg
Dieter Bender
-
-
Hallo Birgitta,
danke für die Tipps.
1. arbeite ich gerade durch und aus 2. habe ich die Beispiele rausgezogen. In ".. Learning by Example" tue ich mir noch schwer, ob es 1 zu 1 übertragbar ist von OS/390 zu AS/400.
Gruß Andreas
Zitat von B.Hauser
-
Damit kompatibel zur DB/2-Familie gibt es ein Teil der Katalogsichten auch für die DB2/400 unter dem Schema SYSIBM. (je nach OS/400 Release mehr oder weniger Sichten).
Der Rest der Katalogsichten/-Tabellen steht im Schema QSYS2.
(Zum Begriff Schema : früher unter SQL auch Collection bzw. AS/400 Namensbegriff Bibliothek)
Zitat von HeisigA
Hallo Sven,
war leider verhindert, deshalb verspätet die Antwort. Vorab möchte ich sagen,
dass ich Neuling bezüglich AS/400 DB2 bin. Die AS/400 Nomenklatur ist mir noch fremd.
Wenn ich im Navigator teste muss ich das/die Schema/Lib angeben. Die Procedure liegt laut SYSIBM.ROUTINES im "Specific_Schema" QGPL und "Routine_Schema" QGPL. Mit "call QGPL/routine()", dachte ich, kann ich im Navigator die Procedure aufrufen und testen. Der Tipp mit den SYSROUTINES war super. Nun kann ich ähnlich wie in Oracle meine Objekte angucken. Auf unser DB/2 heisst die Tabelle "SYSIBM.ROUTINES". Wird wahrscheinlich ab V8 so sein. Kannst du mir einen Auszug deiner "..ROUTINES" zukommen lassen, wo JAVA Procedures registriert sind und sich aufrufen lassen? Vielleicht erkennt man an den Spalten "External_Name;External Language" was bei mir schief läuft.
Gruß Andreas
-
Hallo,
- 390 und as400 ist im Bereich stored Procedures absolut nichts übertragbar.
- ohne entsprechende Patch Stände auf der AS400 funktioniert das ohnehin nicht, im normalen Cum Pflegeprozess bleibt das alles unberücksichtigt. Erforderlich sind die sogenannten Group PTFs für Java und für DB2; je nach Basis Release haben die unterschiedliche Nummern und Fundstellen, das sollte aber mit Mr. Google zu finden sein.
- Bei den unterschiedlichen Methoden keinne Erfolg zu haben wäre es auch noch interessant die genauen Fehlermeldungen zu bekommen, sind das immer dieselben? und welche genau mit allen Details (wobei das ohne Patches keinen Sinn macht weiter zu probieren).
Zu beachten ist noch, dass die Fehlermeldungen bei Oops Nerv im Joblog des ServerJobs zu suchen sind und beim interaktiven SQL auf die lokale Maschine im Joblog des eigenen Jobs.
mfg
Dieter Bender
Zitat von HeisigA
Hallo BenderD,
leider erst jetzt die Antwort, war vorübergehend verhindert. Ja, da gebe ich Dir recht. Nur ist mein Ehrgeiz furchtbar angestachelt eine Java-Stored-Procedure zum Laufen zu bringen. Ausgangspunkt war/ist, Altdatenübernahme und die Transformation dieser. Da ich sehr gute Java-Programmierer kenne und ich sagte, laut Doku laufen auch Java-Stored-Procedures auf unserem Server, bin ich einfach geneigt dieses auch zum Laufen zu bringen. Mit meiner geposteten Klasse war das Beispiel vielleicht unglücklich gewählt, ich habe auch das Ganze ohne konstruktorähnliche Methode ausprobiert. Ohne Erfolg.
Eine weitere Hilfestellung wäre nett.
Gruß Andreas
Similar Threads
-
By rebe in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 12-10-06, 11:22
-
By florian in forum IBM i Hauptforum
Antworten: 10
Letzter Beitrag: 17-05-06, 16:08
-
By Bratmaxxe in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 04-04-06, 10:45
-
By peter.kinne in forum IBM i Hauptforum
Antworten: 13
Letzter Beitrag: 15-04-05, 09:04
-
By Frank Pusch in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 13-06-01, 17:57
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks