[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [aspectj-users] A transaction question
|
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 <javadeveloper999@xxxxxxxxxxx> wrote:
>
>> From: neo anderson <javadeveloper999@xxxxxxxxxxx>
>> Subject: [aspectj-users] A transaction question
>> To: aspectj-users@xxxxxxxxxxx
>> 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@xxxxxxxxxxx
>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>>
>
>
>
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> 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.