Die Schnittstelle Data, durch die integrierte Methoden definiert werden, enthält eine Reihe von JDBC-Methoden für Connection-Objekte, etwa close(), commit(), rollback(), setAutoCommit() und getAutoCommit(). Sie können diese Methoden nicht zusammen mit den Methoden pre() und post() in eckige Klammern einschließen.
Die mit Annotationen versehene Methode sendFormLetter() beispielsweise beinhaltet einen Parameter int, der den Code bereitstellt, mit dem ein zu verwendender Formularbrief angegeben wird. Die Methode enthält auch String-Parameter, die Informationen bereitstellen, die in den Formularbrief eingefügt werden sollen, desweiteren Stadt, Bundesland und Postleitzahl für den Versand des Formularbriefs. Schließlich wird durch die Methode sendFormLetter() eine Tabelle aktualisiert, in der verfolgt wird, ob ein Brief gedruckt und gesendet werden muss.
Angenommen, eine Anwendung, von der die Methode sendFormLetter() aufgerufen wird, gibt weder Stadt, Bundesland noch Postleitzahl oder vielleicht nur zwei der drei Elemente an. Sie können Anwendungslogik schreiben, um das Vorhandensein aller drei Werte zu prüfen. Dies ist jedoch in der Datenbank nicht ohne Weiteres möglich, ebenso wenig in der Definition der Methode sendFormLetter(). Eine Stelle, an der Sie diese Anwendungslogik schreiben können, ist ein Anbindungspunkt, den Sie wie folgt definieren könnten:
import com.ibm.pdq.runtime.statement.*; 1 public class ZipHook implements Hook { public void pre ( 2 String methodName, Data dataInstance, SqlStatementType sqlStatementType, Object... parameters) { if (methodName.startsWith( "sendFormLetter(int, java.lang.String")) { // right method; params 2,3, & 4 are city, state, zip if (parameters[1] == null || parameters[2] == null || parameters[3] == null) { ... 3 } } } public void post ( 4 String methodName, Data dataInstance, Object returnValue, SqlStatementType sqlStatementType, Object... parameters) { return; // keine Aktion } }
Wenn die Methode sendFormLetter() in der Schnittstelle com.company.NotSpam definiert wird, könnte die Anwendungslogik zum Zuordnen einer Instanz von Hook ZipHook unter Verwendung der Methode sendFormLetter() folgendermaßen aussehen:
Connection con = DriverManager.getConnection(...); 1 ZipHook zHook = new ZipHook(); 2 Data db = DataFactory.getData(NotSpam.class, con, zHook); 3
Der Code führt die folgenden Schritte aus: