-
Aufruf Java Pgm mit Entry Parameter
Hallo zusammen,
ich habe eine kleine Java Anwendung erstellt. In dem Programm wird eine DTAQ gefüllt. Dazu übergebe ich
aus einem RPG Programm die Parameter System, User und Passwort.
Das Java Programm macht folgendes:
AS400 aAS400 = new AS400(aSystem , aUser , aPwd);
dann dtaq erstellen etc...
Das funktioniert auch wenn ich das Javaprogramm aus WDSC oder von ein Batch Datei aufrufe.
Mein Userprofil auf der AS hat 8 Zeichen
mein Kennwort auf der AS hat 7 Zeichen
Wenn ich die Parameter Userprofil oder Kennwort länger definiere und das Javaprogramm aufrufe erhalte ich die
Nachricht . . . : Java-Ausnahme beim Aufrufen der Java-Methode empfangen.
Ursache . . . . : RPG-Prozedur STRSQL01R in Programm STRSQL01R/MK hat
Java-Ausnahme "com.ibm.as400.access.AS400SecurityException: The user ID or
password contains a character that is no" empfangen, als die Methode
"loadSql" mit Kennung
"(Ljava.lang.String;Ljava.lang.String;Ljava.lang.S tring;Ljava.lang.String L
java.lang.String;" in Klasse "de.asmika.ossystem.LoadaSql" aufgerufen
wurde.
Wenn ich aber die Parameter mit korrekter Länge definiere
klappt das Javaprogramm.
Hat jemand eine Idee woran das liegen könnte ?
Oder: Wie regelt ihr die Anmeldung am AS/400 System ?
Gruss Michael
-
Hallo,
ich sehe zwar in deinem posting nicht so genau, was du an entscheidender Stelle machst, aber ich würde es mal mit trimmen versuchen; im RPG mit %trim und im Java mit myString.trim()
Ansonsten mache ich sowas eher garnicht - in einer Server Anwendung holt man sich sowas meist aus einem prooperty File. Beispiel zu letzterem im TransferData auf meiner Freeware Seite.
mfg
Dieter Bender
 Zitat von mk
Hallo zusammen,
ich habe eine kleine Java Anwendung erstellt. In dem Programm wird eine DTAQ gefüllt. Dazu übergebe ich
aus einem RPG Programm die Parameter System, User und Passwort.
Das Java Programm macht folgendes:
AS400 aAS400 = new AS400(aSystem , aUser , aPwd);
dann dtaq erstellen etc...
Das funktioniert auch wenn ich das Javaprogramm aus WDSC oder von ein Batch Datei aufrufe.
Mein Userprofil auf der AS hat 8 Zeichen
mein Kennwort auf der AS hat 7 Zeichen
Wenn ich die Parameter Userprofil oder Kennwort länger definiere und das Javaprogramm aufrufe erhalte ich die
Nachricht . . . : Java-Ausnahme beim Aufrufen der Java-Methode empfangen.
Ursache . . . . : RPG-Prozedur STRSQL01R in Programm STRSQL01R/MK hat
Java-Ausnahme "com.ibm.as400.access.AS400SecurityException: The user ID or
password contains a character that is no" empfangen, als die Methode
"loadSql" mit Kennung
"(Ljava.lang.String;Ljava.lang.String;Ljava.lang.S tring;Ljava.lang.String  L
java.lang.String;" in Klasse "de.asmika.ossystem.LoadaSql" aufgerufen
wurde.
Wenn ich aber die Parameter mit korrekter Länge definiere
klappt das Javaprogramm.
Hat jemand eine Idee woran das liegen könnte ?
Oder: Wie regelt ihr die Anmeldung am AS/400 System ?
Gruss Michael
-
 Zitat von mk
Oder: Wie regelt ihr die Anmeldung am AS/400 System ?
Ich orientiere mich ebenfalls an Dieter Bender's Beispielen.
Ich lasse mir allerdings das Propertyfile nicht übergeben, sondern habe den Namen fix in der Klasse.
Ich habe auch den Treibernamen ausgelagert und brauche am Source nichts zu ändern, damit die AS/400 mit den Nativetreibern arbeitet.
Code:
static Connection conn;
static String driverName;
static String url;
static String userName;
static String password;
static String fileName = "PDF400.properties";
...
try
{
FileInputStream fileCfg=new FileInputStream(fileName);
Properties cfg = new Properties();
cfg.load(fileCfg);
driverName = cfg.getProperty("driver");
url = cfg.getProperty("url");
userName = cfg.getProperty("user");
password = cfg.getProperty("password");
}
catch ( FileNotFoundException e ) {
System.err.println( fileName + " nicht gefunden!");
}
catch ( IOException e ) {
System.err.println( "I/O failed." );
}
// AS/400 Treiber laden
try {
Class.forName( driverName );
// Verbindung zu DB herstellen (args[2] = Bibliothek laut Parameter)
conn =
DriverManager.getConnection(url + args[2] + ";extended metadata=false",
userName, password);
} catch( ClassNotFoundException ex ) {
System.out.println( ex );
System.out.println("JDBC-Treiber nicht gefunden" );
}
Hier noch mein PDF400.properties
Code:
# Properties für PDF Erstellung
# diese Datei muss im /etc/PDF400/ stehen
#
# ================================================
# Abschnitt für Plattformunabhänge Konfiguration
#
# Hier: allgemeiner (Type 4) Treiber für alle Plattformen
# driver=com.ibm.as400.access.AS400JDBCDriver
#
# URL zum Connecten (inkl. System)
# die URL wird im Programm noch um die Lib ergänzt
# url=jdbc:as400://SYSNAME/
#==================================================
#
# Abschnitt für AS/400 Konfiguration
#
# für AS/400: Nativetreiber (Performance)
driver=com.ibm.db2.jdbc.app.DB2Driver
#
# URL zum Connecten inkl. System
# auch wird die Biboliothek im Programm ergänzt (laut Parameter)
url=jdbc:db2://*local/
#
# ===================================================
#
# Allgemeiner Teil
#
# Name für DB-Anmeldung
user=userXX
# Kennwort für DB-Anmeldung
password=passXX
LG Robert P
-
Hallo Dieter, hallo Robert,
das mit einer Property Datei habe ich auch schon mal gehört
und werde das auch umsetzten.
Meine Frage ist aber:
Wenn ich die Jobs auf der iSeries starte laufen diese dann
unter dem QUSER oder kann man die Jobs gezielt mit einem User aufrufen.
Ich möchte gerne die Jobs unter dem jeweilig angemeldeten AS/400 User starten.
Dankk für die Hilfe
-
 Zitat von mk
Wenn ich die Jobs auf der iSeries starte laufen diese dann
unter dem QUSER oder kann man die Jobs gezielt mit einem User aufrufen...
Da muss ich nochmal nachfragen um welche Jobs es dir geht (Java oder JDBC-Job).
Der Javajob (aufgerufen aus AS/400-Umgebung) läuft mit den Benutzerprofil des Jobs und heißt QJVACMDSRV Typ BCI und läuft im selben Subsystem wie aufrufende AS/400-Job.
Der Datenbankjob läuft immer unter dem QUSER, dürfte aber den Benutzer übernehmen. Dieser Job heißt QSQSRVR
Art PJ und läuft im Subs QSYSWRK.
Mit WRKOBJLCK OBJ(deinUSRPRF) OBJTYPE(*USRPRF) sieht man sehr schön alle Jobs (QZLSFILE sind die Freigaben).
Ich arbeite allerdings mit fixem Passwort, da meine Javaarbeiten ohnehin in Serverjobs abgewickelt werden.
LG
Robert P.
-
Hallo Robert,
ich habe meinem Java Programm jetzt auch eine Propertie Datei hinzugefügt.
Im WDSC klappt es auch.
Jetzt habe ich aber das Problem das mein RPG Programm die
Fehlermeldung bringt
Nachricht . . . : Java-Ausnahme beim Aufrufen der Java-Methode empfangen (C
G D F).
Ursache . . . . : RPG-Prozedur STRSQL01R in Programm STRSQL01R/MK hat
Java-Ausnahme "java.io.FileNotFoundException: Kein Pfad oder keine
Bibliothek mit diesem Namen. connectfile.propert" empfangen, als die Methode
"loadSql" mit Kennung "(Ljava.lang.String Ljava.lang.String;" in Klasse
"de.asmika.ossystem.LoadaSql" aufgerufen wurde.
Meine Classpath Variable ist
Wert . . . . . . . . . : '/michaelk/java/connectfile.properties:/michaelk/ja
va/jt400.jar:/michaelk/java/startsql.jar'
Die Propertiedatei liegt definitiv im Pfad michaelk/java.
Trotzdem findet das Java Programm die Datei nicht.
Testweise habe ich die Datei connectfile.properties mit mein .JAR File gepackt. Aber leider kommt dabei die gleiche Fehlermeldung.
Bin für jede Hilfe dankbar
Gruss Michael
-
Hallo,
am einfachsten ist es, wenn du die properties als ResourceBundle lädst, der sucht über den Classpath (schau dir dazu mal die BasicDataTable.java auf meiner open Source Seite an.
@Robert: an deinen static Klamotten solltest du noch arbeiten.
mfg
Dieter Bender
 Zitat von mk
Hallo Robert,
ich habe meinem Java Programm jetzt auch eine Propertie Datei hinzugefügt.
Im WDSC klappt es auch.
Jetzt habe ich aber das Problem das mein RPG Programm die
Fehlermeldung bringt
Nachricht . . . : Java-Ausnahme beim Aufrufen der Java-Methode empfangen (C
G D F).
Ursache . . . . : RPG-Prozedur STRSQL01R in Programm STRSQL01R/MK hat
Java-Ausnahme "java.io.FileNotFoundException: Kein Pfad oder keine
Bibliothek mit diesem Namen. connectfile.propert" empfangen, als die Methode
"loadSql" mit Kennung "(Ljava.lang.String  Ljava.lang.String;" in Klasse
"de.asmika.ossystem.LoadaSql" aufgerufen wurde.
Meine Classpath Variable ist
Wert . . . . . . . . . : '/michaelk/java/connectfile.properties:/michaelk/ja
va/jt400.jar:/michaelk/java/startsql.jar'
Die Propertiedatei liegt definitiv im Pfad michaelk/java.
Trotzdem findet das Java Programm die Datei nicht.
Testweise habe ich die Datei connectfile.properties mit mein .JAR File gepackt. Aber leider kommt dabei die gleiche Fehlermeldung.
Bin für jede Hilfe dankbar
Gruss Michael
-
Hallo zusammen,
meine Propertie Datei wird jetzt im Java Job verwendet.
Der Fehler lag war das ich die Datei falsch benannt hatte.
Wie immer: Die Maschine hat immer recht.................
Danke für die Unterstützung
Viele Grüße
Michael
-
 Zitat von BenderD
@Robert: an deinen static Klamotten solltest du noch arbeiten.
Habe ich gemacht - Lektion gelernt.
...das kommt davon, wenn man alles in der main-Routine macht...
Ich habe die Fehlermeldungen "non-static variable xxxx cannot be referenced from a static context" schnell durch den "static" Zusatz für die Variablen behoben. Erst später habe ich geschnallt, dass meine Probleme von der "static main" kommen...
Meine ersten Auslagerungsversuche aus der main, sind zudem noch an (der fehlenden) Fehlerbehandlung gescheitert....
mfg
Robert P.
-
Hallo,
man sieht den Java Klassen meist an, ob sie von einem RPG Programmierer geschrieben wurden; deshalb beantworte ich auch manchmal Fragen, deren Antwort der ursprüngliche Frager nicht hören will...
Problem ist dabei halt nur, dass der Versuch Java so zu programmieren wie RPG, zu einem Design führt, bei dem man von einem Problem ins nächste stolpert, von denen man kein einziges hätte, wenn das Design Objekt orientiert und Java angemessen wäre.
Ich frage mich zum Beispiel die ganze Zeit, was das hier zu Grunde liegende Java Program mit der DTAQ eigentlich will? wenn nicht etwas zurück zu kommunizieren, was ein main nicht kann - und da sind wir wieder beim ersten Satz dieser Randbemerkungen.
mfg
Dieter Bender
 Zitat von RobertPic
Habe ich gemacht - Lektion gelernt.
...das kommt davon, wenn man alles in der main-Routine macht...
Ich habe die Fehlermeldungen "non-static variable xxxx cannot be referenced from a static context" schnell durch den "static" Zusatz für die Variablen behoben. Erst später habe ich geschnallt, dass meine Probleme von der "static main" kommen...
Meine ersten Auslagerungsversuche aus der main, sind zudem noch an (der fehlenden) Fehlerbehandlung gescheitert....
mfg
Robert P.
-
Hallo Dieter, und *all
ich möchte mich an dieser Stelle für deine Unterstützung und Hilfe und auch allen anderen mal bedanken. Ich hoffe wir machen in dem Forum so weiter.
Zum Thema: Das Java Programm erhält mehrere Eingangsparameter
1. Ein SQL Selectstring
2. Bibliotheksnamen
3. DTAQ Namen
Im Programm wird das SQL ausgeführt und die resultierenden Daten werden in die DTAQ geschrieben.
Die aufrufenden Anwendungen können nun die Daten aus der
DTAQ verarbeiten.
Für mich ist dieses kleine Progrämmchen erstmal der Einstieg
in die Java Umgebung und alles weitere wird man sehen.
Direkt noch eine Frage:
Kann man eigentlich die Feldbeschreibungen(COLHDG)
auch in dem Result Set finden ?
Viele Grüße an alle
Michael
-
Hallo,
so ähnlich habe ich das vermutet.
Du rufst ein main auf, kannst da nix zurück geben und brauchst dafür die DTAQ. Dazu gibt es zwei Alternativen:
- dur rufst keine main auf, sondern eine normale Objekt Methode mit Rückgabe Möglichkeit. Dazu müsstest du aus dem RPG ein Objekt deiner Jaav Klasse erzeugen und könntest dann aufrufen (ist immer noch in RPG gedacht).
- aus Java Sicht ist das ganze ein Server Dienst, den man asynchron über eine Q anticken kann. Dazu stellst du das ganze so um, dass die Anforderung über eine EingangsQ kommt, ergänzt um die Angabe wohin geantwortet werden soll (so ne art session).
Diesen Java Server startest du jetzt per SBMJOB ein einziges Mal und in deinem Server liest du dann (selbstredend nicht in der Main) in einer Schleife aus der DTAQ (mit wait -1) und dann weiter wie gehabt. Einfacher zu programmieren, geht ab wie Schmidts Katze da der Start Overhead wegfällt, zieht viel weniger essourcen, da nur eine JVM für alle. Und du hast im RPG allen Java Kram vom Hals und brauchst nur DTAQ!
An die Feldbeschreibungen müsste man eigentlich über MetaData drankommen (oder notfalls aus dem Repository)
mfg
Dieter Bender
 Zitat von mk
Hallo Dieter, und *all
ich möchte mich an dieser Stelle für deine Unterstützung und Hilfe und auch allen anderen mal bedanken. Ich hoffe wir machen in dem Forum so weiter.
Zum Thema: Das Java Programm erhält mehrere Eingangsparameter
1. Ein SQL Selectstring
2. Bibliotheksnamen
3. DTAQ Namen
Im Programm wird das SQL ausgeführt und die resultierenden Daten werden in die DTAQ geschrieben.
Die aufrufenden Anwendungen können nun die Daten aus der
DTAQ verarbeiten.
Für mich ist dieses kleine Progrämmchen erstmal der Einstieg
in die Java Umgebung und alles weitere wird man sehen.
Direkt noch eine Frage:
Kann man eigentlich die Feldbeschreibungen(COLHDG)
auch in dem Result Set finden ?
Viele Grüße an alle
Michael
Similar Threads
-
By TARASIK in forum IBM i Hauptforum
Antworten: 21
Letzter Beitrag: 30-03-11, 13:48
-
By Stoeberl in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 10-01-07, 10:58
-
By codierknecht in forum NEWSboard Java
Antworten: 7
Letzter Beitrag: 23-03-05, 08:31
-
By mk in forum IBM i Hauptforum
Antworten: 0
Letzter Beitrag: 09-09-04, 08:22
-
By WPF in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 09-07-04, 09:30
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