Eine Beschreibung der in den Diagrammen verwendeten Konventionen finden Sie in Syntaxdiagramme lesen.
Anwendungen, die eingebettetes SQL verwenden, das statisch in DB2-Paketen gebunden ist, haben natürliche Vorteile in den Bereichen Leistung, Zuverlässigkeit, Sicherheit, Überwachung und Verwaltung.
Führen Sie vor dem Dienstprogramm StaticBinder das pureQuery-Dienstprogramm Generator aus, um die Implementierungsklassen für die Schnittstellen zu generieren, die die zu bindenden SQL-Anweisungen enthalten. Wenn das pureQuery-Dienstprogramm Generator ausgeführt wird, werden alle Informationen, die zur Erstellung eines statischen DB2-Pakets benötigt werden, erfasst und in der generierten Implementierungsklasse gespeichert. Zu diesen Informationen gehören die SQL-Anweisungen und alle gültigen Datentypinformationen aus den Java™-Klassendefinitionen und alle Spalten- oder Parametermetadaten aus der Zieldatenbank. Die Informationen enthalten außerdem die Stammpaketnamen und optional die Objektgruppen-IDs und Versionen für die DB2-Pakete.
Das Dienstprogramm StaticBinder liest diese Informationen aus den Implementierungsklassen, wenn es DB2-Pakete erstellt und bindet. Wenn Sie das Dienstprogramm StaticBinder ausführen, können Sie in der Befehlszeile entweder die Implementierungsklassen angeben, aus denen gelesen werden soll, oder die Schnittstellen, die diesen Klassen entsprechen. Wenn Sie eine Optionsdatei verwenden, können Sie mindestens eine Schnittstelle angeben. Das Dienstprogramm StaticBinder liest die Informationen aus den entsprechenden Implementierungsklassen.
Wenn Sie die Option -forceSingleBindIsolation beim Ausführen des Dienstprogramms Generator verwenden, wird die Zahl für die Isolationsstufe jedoch nicht an den Namen des erstellten Pakets angehängt.
Wenn Sie beim Ausführen einer Bindung die Option -isolationLevel verwenden oder die Isolationsstufe in der Zeichenfolge für die Bindeoptionen angeben, wird lediglich das Paket bzw. die DBRM-Datei für die von Ihnen angegebene Isolationsstufe erstellt. Beim Erstellen von Paketen bzw. DBRM-Dateien für alle vier Isolationsstufen folgt der Name den von StaticBinder verwendeten Konventionen.
Eine Optionsdatei listet die Schnittstelle(n) auf, die vom pureQuery-Dienstprogramm StaticBinder verarbeitet werden soll(en), sowie die Optionen, die dem Dienstprogramm StaticBinder mitteilen, wie die Schnittstellen zu verarbeiten sind. Sie können Standardoptionen definieren, die für alle in einer Optionsdatei aufgeführten Schnittstellen gelten. Sie können außerdem Optionen für Schnittstellen definieren, sodass Sie die Standardoptionen überschreiben können, und andere Optionen definieren, die nur für einzelne Schnittstellen bestimmt sind.
Im Befehl für die Ausführung des Dienstprogramms StaticBinder können Sie die zu verwendende Datei mit der Option -optionsFile angeben.
defaultOptions = -bindOptions "QUALIFIER qual1" -url jdbc:db2://SRVR01:50000/DB01 -username user01 -password pass01 com.myCompany.MyInterfaceA = -bindOptions "QUALIFIER qual2" com.myCompany.MyInterfaceB com.myCompany.MyInterfaceC = -url jdbc:db2://SRVR01:50001/DB02 -username user02 -password pass02In diesem Beispiel gibt die mit defaultOptions beginnende Zeile das Qualifikationsmerkmal für die DB2-Pakete an und definiert die Standardverbindungs-URL. Die nächste Zeile gibt eine Schnittstelle mit einem Qualifikationsmerkmal an, welches das Standardqualifikationsmerkmal überschreibt. Die nächste Zeile gibt eine Schnittstelle an, für die alle Standardoptionen gelten. Die letzte Zeile gibt eine Schnittstelle an, die auf einer anderen Datenbank gebunden werden soll.
-pkgVersion "ver#1"
DB2 Database für Linux, UNIX und Windows: Wenn der Benutzer über die Berechtigung SYSADM verfügt, aber keine expliziten Zugriffsrechte für das Ausführen der Bindung hat, erteilt der DB2-Datenbankmanager automatisch die explizite Berechtigung DBADM.
Sie können diesen Befehl verwenden, um das Dienstprogramm StaticBinder für eine Archivdatei auszuführen, die Ihre Anwendung enthält. Das Archiv muss die Schnittstellen und Implementierungsklassen enthalten, die dem Dienstprogramm StaticBinder zur Verfügung gestellt werden sollen. Verwenden Sie eine Optionsdatei mit der Erweiterung .bindProps, in der die Schnittstellen und Implementierungsklassen aufgelistet sind.
(1) >>-java--com.ibm.pdq.tools.StaticBinder-------------------------> (2) >-------- -url--jdbc--:--db2--:--//--Server--+---------+--/--Datenbank--> '-:--Port-' >-- -username--Benutzer-ID-- -password--Kennwort----------------> >-- -archive-- -Dateiname--+-.ear-+-----------------------------> +-.jar-+ +-.war-+ '-.zip-' >--+-------------------------------------------------------------------------+--> | (3) | +-| DBRM-Optionen |-------------------------------------------------------+ +- -bindOptions-- -"--Bindeoptionen--"--+-------------------------------+-+ | '- -verifyPackages--+-DETAIL--+-' | | '-SUMMARY-' | '- -verifyPackages--+-DETAIL--+-------------------------------------------' '-SUMMARY-' >--+-----------------------------+--+----------------+----------> | .-FALSE-. | | (4) | '- -differenceOnly--+-TRUE--+-' '-| -grant |-----' >--+--------------------------+--+-----------------------+----->< '- -isolationLevel--+-CS-+-' | (5) | +-RR-+ '-| Traceoptionen |-----' +-RS-+ '-UR-'
Sie können mit diesem Befehl die Namen der Schnittstellen oder Implementierungsklassen sowie die Optionen für die Erstellung eines DB2-Pakets oder einer DBRM-Datei angeben.
(1) >>-java--com.ibm.pdq.tools.StaticBinder-------------------------> (2) >-------- -url--jdbc--:--db2--:--//--Server--+---------+--/--Datenbank--> '-:--Port-' >-- -username--Benutzer-ID-- -password--Kennwort----------------> >--+-------------------------------------------------------------------------+--> | (3) | +-| DBRM-Optionen |-------------------------------------------------------+ +- -bindOptions-- -"--Bindeoptionen--"--+-------------------------------+-+ | '- -verifyPackages--+-DETAIL--+-' | | '-SUMMARY-' | '- -verifyPackages--+-DETAIL--+-------------------------------------------' '-SUMMARY-' >--+-----------------------------+--+----------------+----------> | .-FALSE-. | | (4) | '- -differenceOnly--+-TRUE--+-' '-| -grant |-----' >--+--------------------------+--+-----------------------+------> '- -isolationLevel--+-CS-+-' | (5) | +-RR-+ '-| Traceoptionen |-----' +-RS-+ '-UR-' .--------------------------. V | >-- -interface----Java-Paket.Schnittstelle-+-------------------><
Sie können die Namen von Schnittstellen und die Optionen für die Erstellung von DB2-Paketen oder DBRM-Dateien, die auf jeder dieser Schnittstellen basieren über den Befehl und eine Optionsdatei angeben.
(1) >>-java--com.ibm.pdq.tools.StaticBinder-------------------------> >--+--------------------------------------------------------------------------------------------------------------+--> '- -url--jdbc--:--db2--:--//--Server--+---------+--/--Datenbank-- -username--Benutzer-ID-- -password--Kennwort-' '-:--Port-' >--+--------------------------------------------------+---------> | .---------------------------------. | | V | | '- -interface----Java-Paket.Schnittstelle.Klasse-+-' >-- -optionsFile--Dateiname--+-----------------------+----------> | (2) | '-| Traceoptionen |-----' >--+-------------------------------+--------------------------->< '- -verifyPackages--+-DETAIL--+-' '-SUMMARY-'
Dieses Syntaxdiagramm zeigt die Standardoptionen, die Sie für alle in einer Optionsdatei aufgeführten Schnittstellen festlegen können.
(1) >>-defaultOptions--=--------------------------------------------> >--+--------------------------------------------------------------------------------------------------------------------+--> | (2) | '------- -url--jdbc--:--db2--:--//--Server--+---------+--/--Datenbank-- -username--Benutzer-ID-- -password--Kennwort-' '-:--Port-' >--+----------------------------------------------+-------------> '-+------------------------------------------+-' '-+- -bindOptions-- -"--Bindeoptionen--"-+-' | (3) | '-| DBRM-Optionen |--------------------' >--+----------------+--+--------------------------+-------------> | (4) | '- -isolationLevel--+-CS-+-' '-| -grant |-----' +-RR-+ +-RS-+ '-UR-' >--+-----------------------+----------------------------------->< | (5) | '-| Traceoptionen |-----'
Dieses Syntaxdiagramm zeigt die Optionen, die Sie für jede in einer Optionsdatei aufgeführte Schnittstelle festlegen können.
(1) >>-Java-Paket.Schnittstelle--=----------------------------------> >--+--------------------------------------------------------------------------------------------------------------------+--> | (2) | '------- -url--jdbc--:--db2--:--//--Server--+---------+--/--Datenbank-- -username--Benutzer-ID-- -password--Kennwort-' '-:--Port-' >--+----------------------------------------------+-------------> '-+------------------------------------------+-' '-+- -bindOptions-- -"--Bindeoptionen--"-+-' | (3) | '-| DBRM-Optionen |--------------------' >--+----------------+--+--------------------------+------------>< | (4) | '- -isolationLevel--+-CS-+-' '-| -grant |-----' +-RR-+ +-RS-+ '-UR-'
Verwenden Sie die Methode bind() der Klasse com.ibm.pdq.tools.StaticBinder, um die SQL-Anweisungen Ihrer Anwendung während der Ausführung in DB2-Paketen zu binden. Die Methode gibt den Wert FALSE zurück, wenn die Bindeoperation fehlschlägt, und den Wert TRUE, wenn die Bindeoperation erfolgreich ausgeführt wird.
Die Methode verwendet zwei Parameter. Beim ersten handelt es sich um einen String-Array zum Übergeben von Argumenten an das Dienstprogramm StaticBinder. Der zweite ist ein PrintWriter-Objekt, an das das Dienstprogramm Nachrichten und Ausnahmebedingungen ausgeben kann.
Es folgt ein Beispiel für einen Aufruf an die Methode bind():
StaticBinder binder = new StaticBinder (); PrintWriter out = new PrintWriter( new FileWriter("BinderOutput.txt")); String[] argsArray = {"-user","Benutzername","-password","Kennwort", "-url","JDBC-URL","-interface","Schnittstellenklasse"}; Boolean check=binder.bind(argsArray, out);
Das Archiv kann eine Optionsdatei mit der Erweiterung .bindProps enthalten, in der die pureQueryXML-Dateien aufgelistet sind, die Sie dem Dienstprogramm StaticBinder zur Verfügung stellen. Wenn Sie im Befehl keine .bindProps-Datei angeben, sucht das Dienstprogramm StaticBinder im Archiv nach einer solchen Datei. Das Dienstprogramm StaticBinder verwendet die erste .bindProps-Datei, die im Archiv gefunden wird.tn Das Dienstprogramm beginnt in einer EAR-, JAR- oder WAR-Datei der höchsten Ebene mit der Suche.
Wenn Sie im StaticBinder-Befehl den Namen der .bindProps-Datei angeben, wird die angegebene Datei verwendet.
Wenn DAO-Implementierungen mit der Option -archive gebunden werden, lädt das Dienstprogramm StaticBinder Implementierungsklassen, um Informationen aus diesen Klassen abzurufen. Das Laden der Klassen erfordert möglicherweise, dass abhängige Klassen aus dem EAR-, JAR- oder WAR-Dateien ebenfalls geladen werden.
Während der Bindeoperation, bei der die Option archive verwendet wird, gibt das Dienstprogramm StaticBinder möglicherweise Fehler zu nicht gefundenen Klassen zurück. Diese Fehler können beispielsweise von einigen Unternehmensanwendungen zurückgegeben werden, die den Kontext eines Anwendungsservers erfordern.
Sie können die Ladeabhängigkeiten des Dienstprogramms StaticBinder minimieren, indem Sie die Apache-BCEL (Byte Code Engineering Library) in den Klassenpfad stellen. Wenn die BCEL für das Dienstprogramm StaticBinder verfügbar ist, schließt das Dienstprogramm Implementierungsabhängigkeiten mithilfe der Bytecode-Modifikation aus und minimiert die Anzahl der geladenen Klassen. In den meisten Fällen können Fehler aufgrund von nicht gefundenen Klassen durch das Hinzufügen der Bibliothek zum Klassenpfad behoben werden.
Die Apache-BCEL-JAR-Datei gehört nicht zum Lieferumfang von pureQuery Runtime. Die BCEL kann über die Website des Apache-Projekts heruntergeladen werden.
Die Syntax der Zeichenfolge lautet "Option_1 Wert_1 Option_2 Wert_2".
Nachdem das Dienstprogramm StaticBinder die DBRM-Dateien generiert hat, müssen Sie die Dateien in einen Datensatz kopieren. Der Standardname des DBRM-Datensatzes lautet Präfix.DBRMLIB.DATA. Dabei steht Präfix für das übergeordnete Qualifikationsmerkmal, das im TSO-Profil für den Benutzer angegeben ist. Präfix ist in der Regel Ihre Benutzer-ID in TSO.
Wenn der DBRM-Datensatz noch nicht vorhanden ist, müssen Sie ihn erstellen. Der DBRM-Datensatz benötigt Speicherplatz, um alle SQL-Anweisungen zu speichern, wobei zusätzlicher Speicherplatz für jeden Hostvariablennamen und für Headerdaten erforderlich ist. Die Headerdaten benötigen etwa zwei Datensätze für jedes DBRM (Database Request Module - Datenbankanforderungsmodul), 20 Byte für jeden SQL-Datensatz und 6 Byte für jede Hostvariable. Ein exaktes Format des DBRM finden Sie im DBRM-Zuordnungsmakro DSNXDBRM in der Bibliothek Präfix.SDSNMACS.
Im folgenden Syntaxdiagramm werden die Optionen für das Generieren von DBRM-Dateien beschrieben.
>>- -generateDBRM--+-TRUE--+-- -outputDBRMPath--Pfad----------->< '-FALSE-'
Der Stammname der generierten DBRM-Dateien ist der Stammpaketname, den Sie angeben, wenn Sie das Dienstprogramm Generator ausführen. Wenn dieser Name länger als sieben Zeichen ist, gibt StaticBinder eine Ausnahmebedingung aus.
Beispiel: Sie führen das Dienstprogramm StaticBinder für eine pureQueryXML-Datei mit den Namen capture.pdqxml aus. Das Dienstprogramm erstellt die Pakete MYPKGA, MYPKGB und MYPKGC. Sie bearbeiten anschließend die Anweisungsgruppe MYPKGA in capture.pdqxml mithilfe der Workbench und führen für die Datei das Dienstprogramm Configure aus, wobei für die Option -cleanConfigure der Standardwert FALSE festgelegt ist. Das Dienstprogramm Configure ordnet der Anweisungsgruppe ein neues Konsistenztoken zu, weil die Gruppe geändert wurde. Wenn Sie das Dienstprogramm StaticBinder für capture.pdqxml erneut ausführen, um die neue Version von MYPKGA zu binden, geben Sie für -differenceOnly den Wert TRUE an. Das Dienstprogramm bindet nur MYPKGA und bindet die übrigen zwei Pakete nicht erneut.
.-,--------------------. V | >>- -grant-- "--grantees--(----+-Berechtigungs-ID-+-+--) - "--->< '-PUBLIC-----------'
Für DB2 Database für Linux, UNIX und Windows: Sie können die Schlüsselwörter USER, GROUP und ROLE verwenden. Informationen zu diesen Schlüsselwörtern finden Sie in GRANT (Package Privileges) statement.
Für DB2 für z/OS: Sie können das Schlüsselwort ROLE verwenden. Informationen zu diesem Schlüsselwort finden Sie in GRANT (package privileges).
Einschränkung: Sie können die Option -grant nicht verwenden, wenn die Option -generateDBRM den Wert TRUE hat.
Wenn die Optionsdatei keine Einträge für die Schnittstelle enthält, verwendet das Dienstprogramm StaticBinder die Bindeoptionen, die sich in der Befehlszeile und in dem Eintrag 'defaultOptions' in der Optionsdatei befinden.
Die Isolationsstufe gilt für alle SQL-Anweisungen, die im Paket enthalten sind. Wenn Sie eine Isolationsstufe über die Methode Connection.setTransactionIsolation() von IBM® Data Server Driver für JDBC und SQLJ definieren, ignoriert pureQuery diese Isolationsstufe für statisch ausgeführte Anweisungen.
>>-+------------------------+--+---------------------------+--->< '- -traceFile--Dateiname-' | .-OFF-----. | '- -traceLevel--+-ALL-----+-' +-SEVERE--+ +-WARNING-+ +-INFO----+ +-CONFIG--+ +-FINE----+ +-FINER---+ '-FINEST--'
Beispiel: Sie führen das Dienstprogramm Generator für eine Schnittstelle mit dem Namen OrdersData aus, die Methoden für das Abfragen und Aktualisieren der Tabelle ORDERS deklariert. Das Dienstprogramm Generator erstellt die Implementierungsklasse OrdersDataImpl.
Beim Ausführen des Dienstprogramms haben Sie Werte für die Optionen -collection, -pkgVersion und -rootPkgName angegeben und das Dienstprogramm hat diese Werte in der Implementierungsklasse gespeichert. Sie führen das Dienstprogramm StaticBinder unter Angabe des Namens dieser Klasse aus und das Dienstprogramm erstellt DB2-Pakete.
Zu einem späteren Zeitpunkt möchten Sie eine Liste der Pakete anzeigen, die das Dienstprogramm StaticBinder anhand der Implementierungsklasse erstellt hat. Beim Ausführen des Dienstprogramms können Sie die Option -verifyPackages mit dem Wert DETAIL verwenden und wiederum den Namen der Klasse angeben.
Wenn die Werte für die Optionen -collection, -pkgVersion und -rootPkgName dieselben sind wie bei der vorherigen Ausführung des Dienstprogramms StaticBinder, findet das Dienstprogramm die Pakete und listet sie auf.
Wenn Sie jedoch das Dienstprogramm Generator für die Schnittstelle OrdersData ausführen würden, nachdem Sie zunächst das Dienstprogramm StaticBinder ausgeführt und die Werte für -collection, -pkgName und -rootPkgName geändert haben, würde das Dienstprogramm StaticBinder keine Pakete finden, die mit den neuen Werten für diese Optionen übereinstimmen. Im zugehörigen Bericht des Dienstprogramms StaticBinder würde stehen, dass die gesuchten Pakete nicht vorhanden sind.
Die Option -verifyPackages funktioniert unter der Voraussetzung, dass Sie, nachdem Sie zuvor die Implementierungsklasse generiert und das Dienstprogramm StaticBinder für die betreffende Klasse oder die zugeordnete Schnittstelle ausgeführt haben, das Dienstprogramm Generator nicht nochmals für die Schnittstelle ausgeführt und andere Werte für -collection, -pkgVersion und -rootPkgName angegeben haben.
Sie können diese Option zusammen mit der Option -bindOptions angeben. Das Dienstprogramm StaticBinder bindet jedoch keine Pakete. Verwenden Sie -bindOptions nur dann zum Angeben der Objektgruppe für die Pakete, die Sie verifizieren möchten, wenn Sie diese Option beim Erstellen der Pakete für die Angabe der Objektgruppe verwendet haben.