I've posted this question on StackOverflow ( http://stackoverflow.com/q/24786391/827480), but am sending it here as well as not everyone monitors StackOverflow.
have the need to log any changes to fields in an entity - whether it is a String change, or addition/deletion to a collection/map. Given a JPA entity with a bunch of primitive fields, it is fairly trivial to write an pointcut that will intercept any set(..) methods on the fields. However, where I am stuck is how to write the pointcut to handle Collections/Sets/Embedded/etc. Given the following entity: @Entitypublic class Provider implements Serializable { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id") private Long id; private String name; @Column(name="type", nullable=false) @Enumerated(EnumType.STRING) private ProviderType providerType; @ManyToMany private List<Contact> contacts; @Embedded private Validity validity; // setters and getters omitted for brevity } where Contact is a simple entity with a bunch of primitive fields and Validity is a non-entity object with some primitive fields. The following pointcut will intercept all set() methods in the class: pointcut fieldSetter() : set(!static !final !transient * *.Provider) && args(val) && target(o); to which I can write a before/after/around advice. before( Object val, Object o) : fieldSetter{ String fieldName = thisJoinPointStaticPart.getSignature().getName(); System.out.println( "Object being changed: " + o.toString() ); System.out.println( "New Value for: " + fieldname + " is: " + v.toString() );} But how do I handle that case for an Embedded object or a Collection? For an Embedded object, if I just put my advice around the setter method in the object, how do I know which is the parent object that is actually being modified/persisted? And in the case of collections/sets/maps/etc, how do I advise against the add/remove methods? What I need to end up doing is advising the getCollection().add() methods as well as the getCollection.remove() methods. But I can't seem to figure out a good way. Thanks, Eric
_______________________________________________ aspectj-users mailing list aspectj-users@eclipse.org To change your delivery options, retrieve your password, or unsubscribe from this list, visit https://dev.eclipse.org/mailman/listinfo/aspectj-users