Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-dev] NotSerializableException: org.aspectj.runtime.reflect.JoinPointImpl$StaticPartImpl

If I understand the use-case/problem correctly, there are not many great solutions to this problem. 

Either we serialize StaticPart along with the object and make the serialized class incompatible with an unweaved application, or we make it transient and risk an inconsistent or unexpected state after the object is rehydrated. 

Would it be possible to have these fields set to transient but set them on-demand when deserialized (one time only) ? Choudary, does your product require transparency in deserializing the instrumented objects (from an uninstrumented instance of the application)?

-John


From: "Choudary Kothapalli" <choudary.kothapalli@xxxxxxxxx>
To: "AspectJ developer discussions" <aspectj-dev@xxxxxxxxxxx>
Sent: Friday, March 2, 2012 6:22:38 AM
Subject: Re: [aspectj-dev] NotSerializableException:        org.aspectj.runtime.reflect.JoinPointImpl$StaticPartImpl

Hi Andy,

I will try to give you the patch, but here is what I notice after taking a deeper look into the JoinPointImpl.StaticPartImpl class.

Not all fields in this class are primitives and Serializable classes. For example, the Signature implementation classes like AdviceSignatureImpl have Method as a field, which is not Serializable. But I think we can safely make this a transient field.

The same applies to Cache field in the SignatureImpl class. I think we can make it transient too.

Shall I go ahead and do these changes or do you have any reservations?

Thanks,
Choudary.

On Thu, Mar 1, 2012 at 11:05 AM, Andy Clement <andrew.clement@xxxxxxxxx> wrote:
Sure, and if you want to give me a patch that does it, even better :)

cheers,
Andy

On 29 February 2012 16:52, Choudary Kothapalli
<choudary.kothapalli@xxxxxxxxx> wrote:
> Shall I raise a request to make JoinPoint.StaticPart serializable, then? It
> would solve the problem of serialization.
>
> Choudary.
>
>
> On Wed, Feb 29, 2012 at 6:03 PM, Andy Clement <andrew.clement@xxxxxxxxx>
> wrote:
>>
>> Making them serializable is also reasonable.  There is nothing special
>> in them - mostly strings/ints.
>>
>> There is no option to weave the classes with no synthetic fields.  It
>> is feasible but they aren't necessarily cheap to construct and
>> inlining their construction where they are used would damage
>> performance to some degree.
>>
>> Andy
>>
>> On 29 February 2012 14:12, Choudary Kothapalli
>> <choudary.kothapalli@xxxxxxxxx> wrote:
>> > On second thoughts, making them transient may not be a good idea because
>> > the
>> > deserialization may fail.
>> >
>> > Do you think you can make JoinPoint.StaticPart and its contents
>> > Serializable? I am not sure if that would be correct, but just asking.
>> >
>> > Or, is there any option to weave the classes so that the synthetic
>> > fields do
>> > not exist at all?
>> >
>> > I know that I'm asking for something that may not be a requirement for
>> > most
>> > usage scenarios or the actual intended usage of AspectJ. But I am stuck
>> > with
>> > this problem and just checking if there is a way out.
>> >
>> > Thanks for your time.
>> >
>> > Choudary.
>> >
>> >
>> > On Wed, Feb 29, 2012 at 4:39 PM, Andy Clement <andrew.clement@xxxxxxxxx>
>> > wrote:
>> >>
>> >> I can provide you an option to make them transient, but I'm hesitant
>> >> to just change the default to transient.  If you want an option like
>> >> that, please open a bugzilla:
>> >> https://bugs.eclipse.org/bugs/enter_bug.cgi?product=AspectJ
>> >>
>> >> and I'll take a look.
>> >>
>> >> cheers,
>> >> Andy
>> >>
>> >> On 28 February 2012 14:35, Choudary Kothapalli
>> >> <choudary.kothapalli@xxxxxxxxx> wrote:
>> >> > My product MaintainJ uses AspectJ load time weaving to capture the
>> >> > call
>> >> > trace at runtime. When weaving an application, the following
>> >> > exception
>> >> > is
>> >> > seen.
>> >> >
>> >> > Caused by: java.io.NotSerializableException:
>> >> > org.aspectj.runtime.reflect.JoinPointImpl$StaticPartImpl
>> >> >     at java.io.ObjectOutputStream.writeObject0(Unknown Source)
>> >> >     at java.io.ObjectOutputStream.writeObject(Unknown Source)
>> >> >     at xxx.yyyyy.ZZZClass.writeExternal_aroundBody4(ZZZClass.java:70)
>> >> >
>> >> > AspectJ LTW seems to insert many fields as below in the class files
>> >> > and
>> >> > serializing them seems to be failing.
>> >> >
>> >> > private static final org.aspectj.lang.JoinPoint.StaticPart ajc$tjp_0;
>> >> > /*
>> >> > synthetic field */
>> >> >
>> >> > Is there any quick fix for this? Can AspectJ make these fields
>> >> > transient
>> >> > without any other issues?
>> >> >
>> >> > Thanks,
>> >> > Choudary Kothapalli
>> >> > MaintainJ Inc.
>> >> >
>> >> > _______________________________________________
>> >> > aspectj-dev mailing list
>> >> > aspectj-dev@xxxxxxxxxxx
>> >> > https://dev.eclipse.org/mailman/listinfo/aspectj-dev
>> >> >
>> >> _______________________________________________
>> >> aspectj-dev mailing list
>> >> aspectj-dev@xxxxxxxxxxx
>> >> https://dev.eclipse.org/mailman/listinfo/aspectj-dev
>> >
>> >
>> >
>> > _______________________________________________
>> > aspectj-dev mailing list
>> > aspectj-dev@xxxxxxxxxxx
>> > https://dev.eclipse.org/mailman/listinfo/aspectj-dev
>> >
>> _______________________________________________
>> aspectj-dev mailing list
>> aspectj-dev@xxxxxxxxxxx
>> https://dev.eclipse.org/mailman/listinfo/aspectj-dev
>
>
>
> _______________________________________________
> aspectj-dev mailing list
> aspectj-dev@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-dev
>
_______________________________________________
aspectj-dev mailing list
aspectj-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-dev


_______________________________________________
aspectj-dev mailing list
aspectj-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-dev


Back to the top