[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Jan 2001
    Beiträge
    850

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

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    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 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.StringL
    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
    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
    Registriert seit
    Oct 2004
    Beiträge
    251
    Zitat 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

  4. #4
    Registriert seit
    Jan 2001
    Beiträge
    850
    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

  5. #5
    Registriert seit
    Oct 2004
    Beiträge
    251
    Zitat 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.

  6. #6
    Registriert seit
    Jan 2001
    Beiträge
    850
    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.StringLjava.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

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    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 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.StringLjava.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
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  8. #8
    Registriert seit
    Jan 2001
    Beiträge
    850

    Thumbs up

    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

  9. #9
    Registriert seit
    Oct 2004
    Beiträge
    251
    Zitat 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.

  10. #10
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    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 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.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  11. #11
    Registriert seit
    Jan 2001
    Beiträge
    850

    Thumbs up

    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

  12. #12
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    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 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
    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. Java und Fehlermeldung jva0122 bei simplen "Hello World"
    By TARASIK in forum IBM i Hauptforum
    Antworten: 21
    Letzter Beitrag: 30-03-11, 13:48
  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. Aufruf von Java Methode aus RPG
    By codierknecht in forum NEWSboard Java
    Antworten: 7
    Letzter Beitrag: 23-03-05, 08:31
  4. Aufruf von Java Programm direkt aus RPG
    By mk in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 09-09-04, 08:22
  5. ILE-RPG mit Java erster Aufruf dauert sehr lange
    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
  •