Skip to main content

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

I think I prefer this just a little more, but it all depends on what
you want to do....
 Object around() : call(Foo.new(..))
 {
        try  {
            Foo f1 = (Foo) SerializeObject.load(filename);
            return f1;
        }
        catch(Exception e)  {
            System.out.println("File not found "+ e);
           return proceed();

        }
    }

On Dec 19, 2007 2:29 PM, Bhaskar Maddala <maddalab@xxxxxxxxx> wrote:
> >> 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.
>
> Why did'nt you say so.... (just do not call proceed)
>
>
> Object around() : call(Foo.new(..)) && !within(SerializationAspect)
>    {
>        try  {
>            Foo f1 = (Foo) SerializeObject.load(filename);
>            return f1;
>        }
>        catch(Exception e)  {
>            System.out.println("File not found "+ e);
>            return new Foo();
>
>        }
>    }
>
> On Dec 19, 2007 2:11 PM, neil loughran <loughran@xxxxxxxxxxxxxxxx> wrote:
> > Thanks for that Dean,
> >
> > I suspected as much…
> >
> > I'll give it a go…
> >
> > Cheers
> > Neil
> >
> > ________________________________________
> > From: aspectj-users-bounces@xxxxxxxxxxx
> > [mailto:aspectj-users-bounces@xxxxxxxxxxx] On Behalf Of Dean Wampler
> > Sent: 19 December 2007 19:05
> >
> > To: aspectj-users@xxxxxxxxxxx
> > Subject: Re: [aspectj-users] Serialization aspect problem
> >
> > I'm not positive, but I suspect you need to use around advice, instead of
> > after advice. Make sure it returns the newly constructed object.
> >
> > dean
> >
> > On Dec 19, 2007, at 1:01 PM, neil loughran wrote:
> >
> >
> > 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
> >
> > _______________________________________________
> > aspectj-users mailing list
> > aspectj-users@xxxxxxxxxxx
> > https://dev.eclipse.org/mailman/listinfo/aspectj-users
> >
> > Dean Wampler, Ph.D.
> > dean at objectmentor.com
> > http://www.objectmentor.com
> > See also:
> > http://www.aspectprogramming.com AOP advocacy site
> > http://aquarium.rubyforge.org AOP for Ruby
> > http://www.contract4j.org Design by Contract for Java5
> >
> >
> >
> >
> > _______________________________________________
> > aspectj-users mailing list
> > aspectj-users@xxxxxxxxxxx
> > https://dev.eclipse.org/mailman/listinfo/aspectj-users
> >
>


Back to the top