Hi Mark & Andy. Thanks for your reply. I really appreciate your help.
I change to use args, but now it thorws message: [error] incompatible return type applying to method-call(void example.AccountDao.setEntityManager(example.EntityManager)) [error] incompatible return type applying to method-call(void example.AccountDao.setEntityManager(example.EntityManager)) dao.setEntityManager(PersistenceCreator.createEntityManagerFactory().createEntityManager()); [warning] advice defined in example.AbstractTransaction has not been applied [Xlint:adviceDidNotMatch] I check the syntax and read the example in e.g. http://books.google.com.tw/books?id=AKuBlJGl7iUC&pg=PA54&lpg=PA54&dq=aspectj+call+args&source=bl&ots=58KGnyCZiN&sig=5gNdHoekFrDXJne3pVe6UO5tiYQ&hl=zh-TW&ei=kNbxSqTEBumgjAfdnp2WAQ&sa=X&oi=book_result&ct=result&resnum=6&ved=0CB0Q6AEwBQ#v=onepage&q=4-2%20capturing%20the%20parameter%20values%20passed%20on%20a%20method%20call&f=false The way to capture the EntityManager looks correct. public pointcut(EntityManager manager): call(* AccountDao.setEntityManager(EntityManger)) && args(manager); Is there any place I may go wrong? I test to move the .aj files and compile .java source. Everthing works fine. I am confused. I appreciate any suggestion. Thank you very much. Mark Cooke-6 wrote: > > Hi, > It's been a while since I've used AspectJ in anger but as no-one else has > replied yet... > > I'd say you probably want "args(manager)" instead of "target(manager)" in > the obtainEntityManager pointcut. > The target of the call will be an AccountDAO, not an EntityManager. > > See > http://www.eclipse.org/aspectj/doc/released/progguide/semantics-joinPoints.html > > HTH! > Mark. > > --- On Wed, 4/11/09, neo anderson <javadeveloper...@yahoo.co.uk> wrote: > >> From: neo anderson <javadeveloper...@yahoo.co.uk> >> Subject: [aspectj-users] A transaction question >> To: aspectj-users@eclipse.org >> Date: Wednesday, 4 November, 2009, 12:09 >> >> I am learning how to modulize transaction using aspectj, >> but encounter a >> problem that EntityManager I try to capture is always null. >> The compiler >> issues message saying that the advice can not be applied. >> as below: >> >> ... advice defined in example.AbstractTransaction has not >> been applied >> [Xlint:adviceDidNotMatch] >> >> What should I change so that I can capture the >> EntityManager while it is >> created (whilst calling to >> AccountDao.setEntityManager(..))? >> >> Thanks for help. >> >> Main.java >> >> package example; >> >> public class Main{ >> public static void main(String args[]){ >> Main m = new Main(); >> m.process(); >> } >> void process(){ >> AccountDao dao = new >> AccountDao(); >> >> dao.setEntityManager(PersistenceCreator.createEntityManagerFactory().createEntityManager()); >> User u = new >> User("1", "Smith"); >> u.setAddress("123 >> Test Road, London."); >> dao.save(u); >> >> >> dao.list(); >> } >> } >> >> AccountDao.java >> >> package example; >> >> import java.util.List; >> import java.util.ArrayList; >> >> >> public class AccountDao{ >> >> private EntityManager manager; >> >> private static List<User> database >> = new ArrayList<User>(); >> >> public void >> setEntityManager(EntityManager manager){ >> this.manager = >> manager; >> } >> >> public void save(User user){ >> >> database.add(user); >> } >> >> public void list(){ >> for(User u : >> database){ >> >> System.out.println(">>>[AccountDao.java]"+u); >> >> } >> } >> } >> >> User.java >> >> package example; >> >> public class User{ >> private String id; >> private String name; >> private String address; >> public User(String id, String name){ >> this.id = id; >> this.name = name; >> } >> >> public String getId(){ >> return this.id; >> } >> >> public String getName(){ >> return this.name; >> } >> >> public String getAddress(){ >> return this.address; >> } >> >> public void setAddress(String address){ >> this.address = >> address; >> } >> >> public String toString(){ >> return "<User >> [id:"+id+"][name:"+name+"][address:"+address+"]>"; >> } >> } >> >> >> PersistenceCreator.java >> >> package example; >> >> public class PersistenceCreator{ >> private static EntityManagerFactory >> factory; >> >> public static EntityManagerFactory >> createEntityManagerFactory(){ >> if(null == factory) >> >> factory = new EntityManagerFactory(); >> return factory; >> } >> } >> >> EntityManagerFactory.java >> >> package example; >> >> public class EntityManagerFactory{ >> >> private static EntityManager manager; >> >> public static EntityManager >> createEntityManager(){ >> if(null == manager){ >> >> manager = new EntityManager(); >> } >> return manager; >> } >> } >> >> EntityManager.java >> >> package example; >> >> public class EntityManager{ >> } >> >> AbstractTransaction.aj >> >> package example; >> >> public abstract aspect AbstractTransaction >> percflow(scope()){ >> >> private EntityManager manager; >> >> protected abstract pointcut tx(); >> >> protected pointcut >> obtainEntityManager(EntityManager manager): call(* >> example.AccountDao.setEntityManager(EntityManager)) >> && target(manager); >> >> protected pointcut scope(): tx() >> && !cflowbelow(tx()); >> >> Object around(): scope(){ >> >> System.out.println("EntityManager:"+manager);// always null >> >> Object result = >> proceed(); >> return result; >> } >> >> EntityManager around(EntityManager >> manager): obtainEntityManager(manager) >> && cflow(tx()){ >> if(null == manager){ >> >> manager = proceed(manager); >> >> } > >> return manager; >> } >> } >> >> AccountTransaction.aj >> >> package example; >> >> public aspect AccountTransaction extends >> AbstractTransaction{ >> >> protected pointcut tx(): execution(* >> example.Main.process()); >> } >> -- >> View this message in context: >> http://old.nabble.com/A-transaction-question-tp26195112p26195112.html >> Sent from the AspectJ - users mailing list archive at >> Nabble.com. >> >> _______________________________________________ >> aspectj-users mailing list >> aspectj-users@eclipse.org >> https://dev.eclipse.org/mailman/listinfo/aspectj-users >> > > > > _______________________________________________ > aspectj-users mailing list > aspectj-users@eclipse.org > https://dev.eclipse.org/mailman/listinfo/aspectj-users > > -- View this message in context: http://old.nabble.com/A-transaction-question-tp26195112p26203290.html Sent from the AspectJ - users mailing list archive at Nabble.com. _______________________________________________ aspectj-users mailing list aspectj-users@eclipse.org https://dev.eclipse.org/mailman/listinfo/aspectj-users