Exits für DB2- und Java-Generierung schreiben

Dieses Thema stellt eine Ergänzung zu 'Exits für EGL-Zugriff auf DB2 schreiben' dar und bezieht sich auf die Java-Generierung.

Quellcode

Der standardmäßig ausgeführte Exit-Code befindet sich in der Datei 'fda7.jar' in 'com.ibm.etools.egl.java.runtime_version', wobei version die Produktversion angibt. Der Klassenname lautet EglDatabaseExits.

In der folgenden Tabelle sind die Methoden in dieser Klasse aufgelistet.

Methodenname Zweck Typ für Ein- und Ausgabe
dateExitToDB Überprüfen Sie vor der Datenbankeingabe den Wert, den eine Hostvariable des Typs DATE der Datenbank zuweist. String
dateExitFromDB Überprüfen Sie nach der Datenbankausgabe den Wert, der in eine Hostvariable des Typs DATE eingefügt wird. String
timeExitToDB Überprüfen Sie vor der Datenbankeingabe den Wert, den eine Hostvariable des Typs TIME der Datenbank zuweist. String
timeExitFromDB Überprüfen Sie nach der Datenbankausgabe den Wert, der in eine Hostvariable des Typs TIME eingefügt wird. String
timestampExitToDB Überprüfen Sie vor der Datenbankeingabe den Wert, den eine Hostvariable des Typs TIMESTAMP der Datenbank zuweist. String
timestampExitFromDB Überprüfen Sie nach der Datenbankausgabe den Wert, der in eine Hostvariable des Typs TIMESTAMP eingefügt wird. String
Der folgende Code wird standardmäßig ausgeführt:
package egl.io.sql;

public class EglDatabaseExits
{
   /**
     * Does custom formatting of a string used as input to a DATE column.
     *
     * @param input -  the value from EGL.
     * @return a string in the format which will then be formatted 
       by StrLib.defaultDateFormat.
     */
    public static String dateExitToDB( String input ) { return input; }

   /**
     * Does custom formatting of a string value fetched from a DATE column.
     *
     * @param input -  the value from the DATE column, formatted 
       according to StrLib.defaultDateFormat.
     * @return a string, will be assigned to an EGL variable.
     */
    public static String dateExitFromDB( String output ) { return output; }

    /**
     * Does custom formatting of a string used as input to a TIME column.
     *
     * @param input -  the value from EGL.
     * @return a string in the format that will then be formatted 
       by StrLib.defaultTimeFormat.
     */
    public static String timeExitToDB( String input ) { return input; }

    /**
     * Does custom formatting of a string value fetched from a TIME column.
     *
     * @param input - the value from the TIME column, formatted 
       according to StrLib.defaultTimeFormat.
     * @return a string which  will be assigned to an EGL variable.
     */
    public static String timeExitFromDB( String output ) { return output; }

    /**
     * Does custom formatting of a string used as input to a TIMESTAMP column.
     *
     * @param input - the value from EGL.
     * @return a string in the format which will then be formatted 
       by StrLib.defaultTimestampFormat.
     */
    public static String timestampExitToDB( String input ) { return input; }

    /**
     * Does custom formatting of a string value fetched from a TIMESTAMP column.
     *
     * @param input -  the value from the TIMESTAMP column, formatted 
       according to StrLib.defaultTimestampFormat.
     * @return a string, will be assigned to an EGL variable.
     */
    public static String timestampExitFromDB( String output ) { return output; }
}

Wie oben gezeigt haben die für DATE, TIME und TIMESTAMP definierten Masken Auswirkungen auf die Daten, die an diese Exits gesendet oder von diesen empfangen wurden. Sie können diese Masken im Code definieren, indem Sie die Variablen StrLib.defaultDateFormat, StrLib.defaultTimeFormat und StrLib.defaultTimeStampFormat festlegen. Diese Variablen können Standardwerte aus den Java-Laufzeiteigenschaften empfangen. Weitere Informationen finden Sie in den Referenzthemen, die am Ende dieses Themas aufgeführt sind.

Beispiel und Logikablauf

Die folgende SQL-Anweisung verwendet zwei Zeichenfelder, die jeweils über einen sqlDataCode-Wert verfügen. Dieser Wert gibt an, dass die zugehörige Spalte vom Typ DATE ist:
get myrec with #sql{ 
   SELECT COL1 FROM TBL WHERE :dateChar1 = '2010-04-01' }
   into dateChar2;
Die Abfrage wird wie folgt erstellt (unabhängig davon, ob der EGL-Java-Generator oder der EGL-Debugger verwendet wird):
  1. Rufen Sie den Wert aus dem Feld dateChar1 ab.
  2. Übergeben Sie diesen Wert an die Methode 'EglDatabaseExits.dateExitToDB'.
  3. Erstellen Sie anhand des von der Methode zurückgegebenen Werts ein JDBC-Datumsobjekt. Die Objekterstellung verwendet eine 'String-to-Date'-Konvertierung, die sich nach dem Wert der Variablen StrLib.defaultDateFormat richtet.
  4. Verwenden Sie bei der Interaktion mit der Datenbank das JDBC-Datumsobjekt.
Gehen Sie zum Abrufen von Beispieldaten wie folgt vor:
  1. Rufen Sie den Wert COL1 aus der Datenbank ab. Dieser Wert ist ein JDBC-Datumsobjekt.
  2. Erstellen Sie aus diesem Objekt eine Zeichenfolge. Die Zeichenfolgenerstellung verwendet eine 'Date-to-String'-Konvertierung, die sich nach dem Wert der Variablen StrLib.defaultDateFormat richtet.
  3. Übergeben Sie die Zeichenfolge an die Methode 'EglDatabaseExits.dateExitFromDB'.
  4. Ordnen Sie den von dieser Methode zurückgegebenen Wert dem Feld dateChar2 zu.

Hinweise

Für das Debugging oder die Ausführung von generiertem Java-Code, der eine angepasste Klasse 'EglDatabaseExits' verwendet, müssen Sie die Klasse so in den Klassenpfad einfügen, dass sie der Datei 'fda7.jar' (JAR-Datei der EGL-Java-Laufzeit) vorausgeht. Im EGL-Debugger können Sie die Vorgabe für den Klassenpfad oder die Eigenschaft für den Java-Buildpfad des Projekts verwenden.

Im Allgemeinen ist die Verwendung der Eigenschaft für den Java-Buildpfad des Projekts die einfachste Möglichkeit, um den Klassenpfad eines generierten Java-Batchprogramms in Eclipse festzulegen. Außerhalb von Eclipse muss die Umgebungsvariable CLASSPATH oder das Befehlszeilenargument -classpath verwendet werden.

Beim Kompilieren von generiertem Code wird im Klassenpfad keine angepasste Klasse 'EglDatabaseExits' benötigt.

Für das Debugging oder die Ausführung von generiertem Java-Code auf dem Apache Tomcat-Server oder in WebSphere Application Server muss die angepasste Klasse in das Webprojekt für die Implementierung (im Ordner 'WEB-INF/classes') eingefügt werden. Beide Server durchsuchen diesen Ordner vor dem Ordner 'WEB-INF/lib', in dem die Datei 'fda7.jar' abgelegt wird.


Feedback