PDA

View Full Version : Aufruf Java Pgm mit Entry Parameter



Seiten : [1] 2

mk
16-02-05, 16:07
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.St ring;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

BenderD
16-02-05, 17:16
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


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.St ring;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

RobertPic
16-02-05, 22:27
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.



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



# 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

mk
17-02-05, 08:20
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

RobertPic
17-02-05, 09:19
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.

mk
17-02-05, 16:50
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

BenderD
17-02-05, 18:50
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


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

mk
18-02-05, 15:03
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

RobertPic
18-02-05, 15:15
@Robert: an deinen static Klamotten solltest du noch arbeiten.

Habe ich gemacht - Lektion gelernt.:D

...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.

BenderD
20-02-05, 10:32
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


Habe ich gemacht - Lektion gelernt.:D

...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.