JBoss.org Community Documentation
You can declare checks to be enforced at instrumentation time. They take a pointcut and a message.
If the pointcut is matched, the message is printed out. To use this with annotations, annotate fields
with DeclareWarning
or DeclareError
within a class annotated with
@Aspect
or @InterceptorDef
. The definitions of
org.jboss.aop.DeclareError
and org.jboss.aop.DeclareWarning
are:
package org.jboss.aop; @Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface DeclareWarning { String expr(); String msg(); }
package org.jboss.aop; @Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface DeclareError { String expr(); String msg(); }
For both: the expr() attribute is a pointcut expression that should not occur, and the msg() attribute is
the message to print out if a match is found for the pointcut. If you use
DeclareWarning
instrumentation/your application will simply continue having printed the
message you supplied. In the case of DeclareError
, the message is logged and an error is
thrown, causing instrumentation/your application to stop. Here is an example:
import org.jboss.aop.Aspect; import org.jboss.aop.pointcut.Pointcut; import org.jboss.aop.DeclareError; import org.jboss.aop.DeclareWarning; @Aspect (scope=org.jboss.aop.advice.Scope.PER_VM) public class DeclareAspect { @DeclareWarning (expr="class($instanceof{VehicleDAO}) AND \ !has(public void *->save())", \ msg="All VehicleDAO subclasses must override the save() method.") Pointcut warning; @DeclareError (expr="call(* org.acme.businesslayer.*->*(..)) \ AND within(org.acme.datalayer.*)", \ msg="Data layer classes should not call up to the business layer") Pointcut error; }