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
[email protected]
To change your delivery options, retrieve your password, or unsubscribe from
this list, visit
https://dev.eclipse.org/mailman/listinfo/aspectj-users