L'interface Data, qui définit les méthodes intégrées, contient un certain nombre de méthodes JDBC sur des objets Connection, tels que close(), commit(), rollback(), setAutoCommit() et getAutoCommit(). Vous ne pouvez pas encapsuler ces méthodes par les méthodes pre() et post().
Par exemple, la méthode annotée sendFormLetter() possède un paramètre int qui fournit le code identifiant un formulaire de lettre à utiliser. La méthode contient également des paramètres String qui fournissent des informations à intégrer au formulaire ainsi que la ville, l'état et le code postal de l'adresse de destination du formulaire. Enfin, la méthode sendFormLetter() met à jour une table qui surveille si une lettre doit être imprimée et envoyée.
Supposons qu'une application qui appelle la méthode sendFormLetter() ne puisse pas fournir la ville, l'état ou le code postal, ou éventuellement ne fournisse que deux de ces trois éléments. Vous souhaitez écrire une logique d'application qui vérifie la présence de ces trois valeurs, mais vous ne pouvez pas le faire facilement dans la base de données et cette opération est impossible dans la définition de la méthode sendFormLetter(). Vous pouvez écrire cette logique d'application dans un Hook que vous pourriez définir ainsi :
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")) { // méthode correcte ; les paramètres 2,3, & 4 sont 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; // aucune action } }
Si la méthode sendFormLetter() est définie dans l'interface com.company.NotSpam, la logique d'application permettant d'associer une instance de Hook ZipHook avec l'utilisation de la méthode sendFormLetter() peut se présenter comme suit :
Connection con = DriverManager.getConnection(...); 1 ZipHook zHook = new ZipHook(); 2 Data db = DataFactory.getData(NotSpam.class, con, zHook); 3
Le code effectue les opérations suivantes :