Yes HiveMind is flexible! As far as I remember someone has already pointed out that this flexible aproach to interceptors is one HiveMind's main strengths.

Howard - if I remember right - last time on interceptor ordering you said something about bundles of interceptors. It did not realy understand that.

I ask this because I think the proxy-based interceptors gain a lot of speed by using the same objects in a number of interceptors, which is lost if you mix them with class based interceptors. So ordering also becomes a performance issue.

On Fri, 5 Mar 2004 13:57:38 -0500, Howard M. Lewis Ship <[EMAIL PROTECTED]> wrote:

A valuable discussion. I think Javassist will have a slight edge based on lack of object
instantiation in the long run. I may be wrong. Doesn't really matter ... that why
ServiceInterceptorFactory is a service ... we may ultimately have all kinds of different
implementations based on whatever bytecode enhancement framework is handy ... or even JDK proxies.


--
Howard M. Lewis Ship
Independent J2EE / Open-Source Java Consultant
Creator, Tapestry: Java Web Components
http://howardlewisship.com


-----Original Message-----
From: Harish Krishnaswamy [mailto:[EMAIL PROTECTED]
Sent: Friday, March 05, 2004 1:45 PM
To: Jakarta Commons Developers List
Subject: Re: [HiveMind] Interceptors - CGLIB / Javassist comparison


Seems that's what you said before ;) But nevermind this is a more-than-enough-pointer!

-Harish

Christian Essl wrote:

> Sorry I made a mistake I meant ProxyFactory.extend() not create().
>
> On Fri, 05 Mar 2004 13:37:06 -0500, Harish Krishnaswamy
> <[EMAIL PROTECTED]> wrote:
>
>> Absolutely! Thanks for the tips. So that's what I'll do.
>>
>> -Harish
>>
>> Christian Essl wrote:
>>
>>> Hi Harish,
>>>
>>> I agree with you that HiveMind should provide a simpler (second)
>>> form to write interceptors.
>>>
>>> But before you waste your weekend looking at my code I
have to tell
>>> you that I did not use CGLIB but rather used Javassist to call
>>> MethodInterceptors. And this was a mistake CGLIB is
certainly better
>>> for that.
>>>
>>> If you want to see how CGLIB is used take a look at one of the
>>> aop-frameworks dynaop, spring or nanning.
>>>
>>> I persanlly like dynaop (while they use CGLIB 1)
according to there
>>> website dynaop is faster than the others (even than JBoss aop -
>>> which uses Javassist). Dynaop is also well documented and not too
>>> complex - while you can learn a lot. To start look at the
>>> ProxyFactory.extend() method - as I see cglib is used
only from in
>>> there - and take a look at the
ClassProxyInvocationHandler and its
>>> super-class.
>>>
>>> I hope this helps a bit (certainly more than my code).
>>>
>>> Thanks,
>>> Chris
>>>
>>>
>>>
>>> On Fri, 05 Mar 2004 13:06:05 -0500, Harish Krishnaswamy
>>> <[EMAIL PROTECTED]> wrote:
>>>
>>>> Oops, sent to the wrong list!
>>>>
>>>> Harish Krishnaswamy wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> I decided to do some work on interceptors and wanted to find a
>>>>> suitable solution and so tried out CGLIB and Javassist and here
>>>>> are my initial findings.
>>>>>
>>>>> 1. Ease-of-use / clarity / maintainability - Obviously here,
>>>>> anybody that has done a little bit of Javassist will
agree that it
>>>>> is in no way comparable to CGLIB when it comes to ease-of-use.
>>>>> CGLIB is all plain Java and very straight forward and
Javassist is
>>>>> on the other end of the spectrum - pieces of string literals
>>>>> patched together to form Java statements.
>>>>>
>>>>> 2. Performance - This is interesting. CGLIB has a disadvantage
>>>>> here due to the number of parameters passed to the intercept
>>>>> method. It turns out, all of the overhead is because of these
>>>>> parameters that cannot be overcome (atleast AFAIK).
With a single
>>>>> counter interceptor I could make Javassist as much as
~4 times as
>>>>> fast as CGLIB (~300% faster). And with more
interceptors obviously
>>>>> Javassist is more faster. Now, if I insert a method call in the
>>>>> Javassist interceptor with 4 parameters, to my surprise the
>>>>> performance is identical to the CGLIB interceptor.
Would be really
>>>>> nice if CGLIB can be designed around this problem.
>>>>>
>>>>> 3. Limitations - There are quite a few limitations with
Javassist
>>>>> that can be found on their website primary one for me being not
>>>>> able to debug instrumented classes. I have not come across any
>>>>> such limitations with CGLIB.
>>>>>
>>>>> From this intial study, it looks to me that we certainly need a
>>>>> way to provide CGLIB interceptors to services. And that's what
>>>>> I'll be doing this weekend. I know Christian has
already done some
>>>>> work on this, I'll see if I can reuse it.
>>>>>
>>>>> -Harish
>>>>>
>>>>> PS. I can post the code if anybody is interested.
>>>>>
>>>>>
>>>>
>>>>
---------------------------------------------------------------------
>>>> To unsubscribe, e-mail:
[EMAIL PROTECTED]
>>>> For additional commands, e-mail:
[EMAIL PROTECTED]
>>>
>>>
>>>
>>>
>>>
>>
>>
---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail:
[EMAIL PROTECTED]
>
>
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



-- Christian Essl http://jucas.sourceforge.net

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to