[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
RE: [aspectj-users] Serialization aspect problem

Thanks Bhaskar,

I think there must be a simpler way to do this where I don't have to access
the attributes and copy them one by one...  In the OO example I was messing
around with I didn't have to make new references or copy attributes.

So I think it may have something to do with the joinpoint/advice type?

Cheers
Neil
  

> -----Original Message-----
> From: aspectj-users-bounces@xxxxxxxxxxx [mailto:aspectj-users-
> bounces@xxxxxxxxxxx] On Behalf Of Bhaskar Maddala
> Sent: 19 December 2007 18:33
> To: aspectj-users@xxxxxxxxxxx
> Subject: Re: [aspectj-users] Serialization aspect problem
> 
> A modified aspect that works
> 
> public aspect SerializationAspect
> {
>    declare parents: Foo implements Serializable;
>    String filename = "Foo.ser";
> 
>    // problematic advice? - no longer problematic
>    after(Foo f): this(f) && execution(Foo.new())  {
>        try  {
>            Foo f1 = (Foo) SerializeObject.load(filename);
>            System.out.println("[MyAspect] x = "+f1.getX()); // works fine
> here!
>            f.setX(f1.getX()); // it's all about the references.....
>        }
> 
>        catch(Exception e)  {
>            System.out.println("File not found "+ e);
>        }
>    }
> 
>    after(Foo f): this(f) && execution(public void Foo.setX(String)) &&
> !within(SerializationAspect) {
>        System.out.println("Setting");
>        try  {
>            SerializeObject.save(f,filename);
>        }
> 
>        catch(IOException e)  {
>            System.out.println("File not found "+ e);
>        }
>    }
> }
> 
> Thanks
> Bhaskar
> 
> On Dec 19, 2007 10:59 AM, neil loughran <loughran@xxxxxxxxxxxxxxxx> wrote:
> > Hi all
> >
> > I'm trying to figure out what exactly is wrong with my pointcut/advice
> for a
> > serialisation aspect.
> >
> > The code below is fairly simple but captures the problem I have.
> Basically
> > I create an object of type Foo and set Foo.x to Foobar. My aspect has
> two
> > advice.. one for capturing instantiation of Foo and the other for
> capturing
> > setX on Foo objects.
> >
> > On instantiation of Foo, I attempt to load a serialised file (Foo.ser).
> If
> > it doesn't exist then an exception is thrown but the program carries on
> as
> > usual.  When I setX the second advice serializes the Foo object as file
> > Foo.ser.
> >
> > Therefore when I run the program a second time I expect the Foo.ser file
> to
> > load and the contents loaded to the Foo object.  However, for some
> reason I
> > can't seem to show the loaded value in FooDriver only in the aspect.
> > Therefore, I am assuming my first advice is incorrectly written and the
> > loaded content is lost outside of the aspect.  I have tried a few
> different
> > varieties of around/after returning advice to no avail.
> >
> > Can anyone spot the mistake in the first advice... it's driving me nuts!
> >
> > Many thanks
> > Neil Loughran
> >
> >
> >
> > import java.io.*;
> >
> > class FooDriver  {
> >     public static void main(String args[])  {
> >         Foo f = new Foo();
> >         System.out.println("[FooDriver] x = "+f.getX()); // always
> null!!?
> >
> >         f.setX("Foobar");
> >     }
> > }
> >
> > class Foo  {
> >     public String x;
> >     public void setX(String _x)  {
> >         x = _x;
> >     }
> >
> >     public String getX() {
> >                 return x;
> >         }
> > }
> >
> > aspect MyAspect  {
> >     declare parents: Foo implements Serializable;
> >     String filename = "Foo.ser";
> >
> >     // problematic advice?
> >     after(Foo f): this(f) && execution (Foo.new())  {
> >         try  {
> >             f = (Foo) SerializeObject.load(filename);
> >             System.out.println("[MyAspect] x = "+f.getX()); // works
> fine
> > here!
> >         }
> >
> >         catch(Exception e)  {
> >             System.out.println("File not found "+ e);
> >         }
> >     }
> >
> >     after(Foo f): this(f) && execution(public void Foo.setX(String))  {
> >         System.out.println("Setting");
> >         try  {
> >             SerializeObject.save(f,filename);
> >         }
> >
> >         catch(IOException e)  {
> >             System.out.println("File not found "+ e);
> >         }
> >     }
> > }
> >
> > class SerializeObject  {
> >     public static void save(Object obj, String filename) throws
> IOException
> > {
> >           System.out.println("Saving file: "+filename);
> >         ObjectOutputStream objstream = new ObjectOutputStream(new
> > FileOutputStream(filename));
> >         objstream.writeObject(obj);
> >         objstream.close();
> >     }
> >
> >     public static Object load(String filename) throws Exception  {
> >         System.out.println("Loading file: "+filename);
> >         ObjectInputStream objstream = new ObjectInputStream(new
> > FileInputStream(filename));
> >         Object obj = objstream.readObject();
> >         objstream.close();
> >         return obj;
> >     }
> > }
> >
> > _______________________________________________
> > 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