Hi

I had a chat with James about it, and we came to a conclusion.
See the JIRA for summary.

I am running final unit tests now on the change. Will commit later
today if all passes.



On Wed, Mar 18, 2009 at 2:53 PM, William Tam <email.w...@gmail.com> wrote:
> +1 on overloading methods.
>
> On Wed, Mar 18, 2009 at 7:22 AM, Claus Ibsen <claus.ib...@gmail.com> wrote:
>> Hi
>>
>> Any thoughts on this one?
>>
>> It all boils down to a suggestion to add 1 methods to the
>> org.apache.camel.Message API
>>
>> new method:
>> - tryGetBody(Class type)
>>
>> or overload existing with a boolean to indicate ignore exception and return 
>> null
>> - getBody(Class, true)
>>
>> The same applies for the org.apache.camel.spi.TypeConverter interface
>> as we need a method
>> on the line as above
>>
>> new method:
>> - tryConvertTo(Class type)
>>
>> or overload existing with a boolean to indicate ignore exception and return 
>> null
>> - convertTo(Class, true)
>>
>> The boolean thing is maybe a nice one as it have the same method name.
>>
>>
>>
>>
>> On Mon, Mar 16, 2009 at 7:32 AM, Claus Ibsen <claus.ib...@gmail.com> wrote:
>>> Hi
>>>
>>> In Camel 1.6.0 and 2.0 we have had a performance issue that could
>>> seriously degrade performance by x2-x10 when you did stress test by
>>> sending > 1000 msg/sec.
>>>
>>> The cause of this is the TypeConverter that will throw a
>>> NoSuchTypeConverterExists when Camel cannot converter to the desired
>>> type.
>>> We do this internally in Camel in some areas of the code where we will
>>> ignore this exception and eg. continue.
>>>
>>> We did a fix for this performance issue in the stream cache but this
>>> was just a fix in once place. Lately this issue surfaced again in
>>> camel-mina when using UDP.
>>>
>>> So I have been experimenting with doing a fix once for all.
>>>
>>> I suggest to:
>>> - add 2 new methods to TypeConverter that returns *null* instread of
>>> throwing the NoSuchTypeConverterExists exception.
>>>  I have named them: tryConvertTo. But maybe there is a better name?
>>> - add 1 new method on Message to get the body using the try convert to 
>>> instead.
>>>  I have named the method: tryGetBody(T). But maybe there is a better name?
>>> - Use tryGetBody internally in Camel where we today do try ..
>>> catch(NoSuchTypeConverterExists)
>>> - Then we can expose the regular getBody(T) for the end users, and let
>>> it act as it does today by throwing the exception
>>> - We can also optimize the DefaultTypeConverter to let it look in the
>>> miss cache first if it have tried to convert this before but could not
>>>
>>> If the tryGetBody, tryConvertTo are you to your liking we can also do:
>>> - add a new method to TypeConvert: boolean canConvertTo(T, value)
>>> - add a new method to Message: boolean canGetBody(T, value)
>>> - then use that method as guard before doing the regular convertTo/getBody
>>>  But this requires that you always use this as guard, to be sure that
>>> the NoSuchTypeConverterExists is not thrown
>>>  And it also requires that we use the miss cache to not do 2x
>>> convertions, 1 for the boolean check, and then 1 for the actual
>>> convertion
>>>  It also requires that the body can be converted multiple times.
>>>
>>> Whether solution 1 or 2 we also need to check the other components and
>>> fix it internally as well, so we dont have a situation like mina with
>>> UDP that was affected by the performance drawback.
>>>
>>> In my experiment I have the first solution up and running.
>>>
>>> Any thoughts?
>>>
>>> I will create a JIRA ticket for this one as well so we wont forget it.
>>>
>>>
>>> --
>>> Claus Ibsen
>>> Apache Camel Committer
>>>
>>> Open Source Integration: http://fusesource.com
>>> Blog: http://davsclaus.blogspot.com/
>>>
>>
>>
>>
>> --
>> Claus Ibsen
>> Apache Camel Committer
>>
>> Open Source Integration: http://fusesource.com
>> Blog: http://davsclaus.blogspot.com/
>>
>



-- 
Claus Ibsen
Apache Camel Committer

Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/

Reply via email to