Das Problem:
Filter A funktioniert nicht, wenn es einen Filter B gibt, so dass gilt:
B ist vor A platziert und die Klassen, die B entsprechen, entsprechen auch A.
Wenn die Filter zum Beispiel wie folgt aussehen:
ClassA* method* INCLUDE * * EXCLUDE
Dann wird die Methode initialize() aus ClassABC fälschlicherweise durch den ersten Filter mit eingeschlossen, weil sein Klassenname dem Muster 'ClassA*' entspricht, obwohl der Methodenname nicht mit dem Methodenmuster übereinstimmt. Dies impliziert außerdem, dass folgende Filter dazu führen, dass alle Methoden, die mit 'ClassA' beginnen, eingeschlossen werden:
ClassA* method* INCLUDE ClassA* * EXCLUDE
Dies ist der Fall, weil der zweite Filter immer ignoriert wird.
Umgehungsmaßnahme:
Standardmäßig wird eine Klasse oder Methode, die keinem Filter entspricht, immer mit eingeschlossen. Daher sollten Sie nie INCLUDE-Filter, sondern nur EXCLUDE-Filter verwenden. Da es nur auf das erste übereinstimmende Klassenmuster ankommt, kann nur ein EXCLUDE-Filter pro Klasse angegeben werden, und in diesem Filter kann ein Methodenmuster wie folgt zur Angabe der auszuschließenden Methoden verwendet werden:
ClassA method* EXCLUDE ClassB call* EXCLUDE
(C) Copyright IBM Corporation 2000, 2003. All Rights Reserved. (C) Copyright IBM Deutschland GmbH 2000, 2003. Alle Rechte vorbehalten.