Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

AS400-DB2 -LibraryList über Java

Empfohlene Antworten

Veröffentlicht

Hallo,

Ich greife über Java mit SQL auf eine DB2.

Nun unterstützt die AS400 eine Library-List,

die ich unter SQL aber nicht verwenden kann,

da SQL grundsätzlich in der CURLIB arbeitet,

außer ich gebe im SELECt die Bibliothek an

(zb. SELECT * FROM BIBLIOTHEK.DATEI).

Nun ist es so dass bei unseren Kunden die

Dateien in unterschiedlichen Bibliotheken liegen

können.

Hat jemand schonmal ein ähnliches Problem gehabt

und eine Lösung dafür?

Kennt sich jemand mit dem jt400-Package aus?

Ich brauche da dringend Hilfe!!!

mfg

Also erst mal kannst du dir ein "AS400JDBCDataSource"-Objekt erzeugen. Darauf kannst du die Methode:

"setLibraries(String)" anwenden.

Etwas ähnliches gibt´s in der "QSYSObjectPathName" Klasse.

Dort kannst du direkt deine Bibliothek setzen (setLibraryName(java.lang.String library) ).

In der Doku zur Toolbox ist auch ein Beispiel zur AS400JDBCDataSource. Mußt dir mal unter http://www-1.ibm.com/servers/eserver/iseries/toolbox/index.html gibt´s ne aktuelle Version mit einer (endlich) ordentlichen Doku.

Wobei ich aber eher dazu tendiere meine Bibliotheken direkt im SQL-Statement mit anzugeben. Da habe ich den ganzen Streß drurum nicht.

Kleiner Tip. Mach´s in den SQL-Statements. :)

Peet

Genau so. So machen wir es hier und es funktioniert ohne Probleme. Wir müssen auch auf Dateien in verschiedenen Bibliotheken abfragen.

Peet

  • Autor

Und wie funktioniert es mit dem Aufruf eines Programms auf der AS400?

        public  static BWM90 callPGM(String inpFIR, String inpSTFN, String inpBSD, String inpBSNR) {


    /* lokale Variablen               */  


    BWM90 tmpBWM90 = null;


    String FIR = inpFIR;

    String STFN = inpSTFN;

    String BSD = inpBSD;

    String BSNR = inpBSNR;


    AS400  tmpAs400System = null;  // com.ibm.as400.access.AS400

    ProgramCallDocument  tmpPcml;  // com.ibm.as400.data.ProgramCallDocument

    boolean rc = false;          // Return code from ProgramCallDocument.callProgram()

    String  msgId, msgText;        // Messages returned from the server

    Object  value;                 // Return value from ProgramCallDocument.getValue()


    // Verbindung zu AS400 System holen

    try

    {

      tmpAs400System = iSeriesConnection.getSystem();

    }

    catch (java.lang.Throwable e)

    {

      System.out.println("* ERROS: " + e.getMessage());

    }


    // Einstellungen aus Properties holen

    Properties  tmpConnectionProperties;

    InputStream tmpInputStream;

    String  tmpPcmlMessageLogTrace="";

    try

    {

      tmpConnectionProperties = new Properties();

      tmpInputStream = nabjPruefwert.class.getResourceAsStream("nabjCommandSettings.properties");

      tmpConnectionProperties.load(tmpInputStream);

      tmpPcmlMessageLogTrace = tmpConnectionProperties.getProperty("PcmlMessageLogTrace");


    }

    catch (java.lang.Throwable e)

    {

      System.out.println("* ERROS:" + e);

    }


    try

    {

      //debug Funktion

      if ( tmpPcmlMessageLogTrace.equals("j") ) { com.ibm.as400.data.PcmlMessageLog.setTraceEnabled(true); };



      // Instanz von PCML erzeugen  

      tmpPcml = new ProgramCallDocument(tmpAs400System, "nabj.pcml.BWM90");  


      // PCML Struktur befüllen

      tmpPcml.setValue("BWM90.SWMQB.FIR", FIR );

      tmpPcml.setValue("BWM90.SWMQB.STFN", STFN);

      tmpPcml.setValue("BWM90.SWMQB.BSD", BSD);

      tmpPcml.setValue("BWM90.SWMQB.BSNR", BSNR);


      //Start des Call

      rc = tmpPcml.callProgram("BWM90");


      // If return code is false, we received messages from the server

      if(rc == false)

      {

        System.out.println("*ERROS");

      } // if

      else

      {

        System.out.println("  CallBWM90.Lesen : CALL Abgeschlossen ");


      // PCML aus der PCML holen

      FIR = tmpPcml.getValue( "BWM90.SWMQB.FIR" ).toString();

      STFN = tmpPcml.getValue( "BWM90.SWMQB.STFN" ).toString();

      BSD = tmpPcml.getValue("BWM90.SWMQB.BSD").toString();

      BSNR = tmpPcml.getValue("BWM90.SWMQB.BSNR").toString();


      System.out.println(FIR + STFN + BSD + BSNR);


      } 


    } 

    catch (PcmlException e)

    {

        System.out.println(e.getLocalizedMessage());    

        e.printStackTrace();

        System.out.println("*** Call to BWM90 failed. ***");

    }

So hab ich es bisher - bei mir in der Firma funktioniert es auch,

aber beim kunden nicht.

Der hat eine andere LibraryList als wir

Du könntest doch im AS400 Programm direkt eine Libary-List setzen!

Also ein CL schreiben, welches die Libary-List setzt und dann das AS400-Programm aufruft.

Wäre das was??

Peet

Noch einfacher ist es, wenn due in dem RPG-Programm die Libary-List setzt. Dort kannst du (wo du deine Input- und Output-Files angibst) explizit einen "extfile('LIB/FILE')" Parameter angeben.

Das wäre jetzt mein Vorschlag.

Peet

  • Autor

Wir haben nicht nur einen Kunden mit einer LibraryList sondern

mehrere und die haben alle unterschiedliche LibraryLists.

Wir versuchen gerade die LibraryList über den User zu bekommen.

Wir bauen eine Connection auf mit einem von uns eingerichteten

User und dieser soll die LibraryList dann haben,

was hältst du davon?

Das wäre eine Möglichkeit. Du willst also an den User (der eine Connection aufbaut) all die Libaries dranhängen (auf der AS400 natürlich). Un dieser soll dann die entsprechenden Programm ausführen. Gar keine dumme Idee. Somit hast du für jeden Kunden einen speziefischen User der die benötigten Biblitheken hat.

:uli , hätte ich eigentlich selber drauf kommen können.:rolleyes:

Peet

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.