Zum Inhalt springen

AS400-DB2 -LibraryList über Java


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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?

Geschrieben

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

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...