Skip to main content

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

Yeah thanks, I figured out pretty much what you wrote except I used Foo
instead of Object.. but I guess it doesn't matter much ;-)

Many thanks.

> -----Original Message-----
> From: aspectj-users-bounces@xxxxxxxxxxx [mailto:aspectj-users-
> bounces@xxxxxxxxxxx] On Behalf Of Bhaskar Maddala
> Sent: 19 December 2007 19:37
> To: aspectj-users@xxxxxxxxxxx
> Subject: 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
> > >
> >
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-users



Back to the top