[ 
https://issues.apache.org/activemq/browse/CAMEL-1019?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=46789#action_46789
 ] 

Willem Jiang commented on CAMEL-1019:
-------------------------------------

After went through your code,  I found you made a great mistake in your 
processor.
You can't store the exchange as the object member, which is the critical 
variable when you run the processor in the multi-thread environment.
Since more than one thread can change the exchange object in the 
IPValidateProcessor, that will explain why your IPValidateProcessor can't set 
the right exchange's message header.
You need to keep your processors to use the original process method, which 
makes sure  your processor's process method is reentrant function(可重入函数).



> unexpected result in pressure testing
> -------------------------------------
>
>                 Key: CAMEL-1019
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-1019
>             Project: Apache Camel
>          Issue Type: Bug
>          Components: camel-cxf
>    Affects Versions: 1.4.0
>         Environment: operating system: Red Hat Enterprise Linux AS release 3 
> Hardware:HP   PROLIANT BL460c ,4Core CPU, 4G Memory
> software plaform: apache-camel-1.4.0 
>            Reporter: Sky Wang
>         Attachments: processors.rar
>
>
> I develop an application on camel.It's routing logic as follows:
> <route>
>       <from uri="cxf:bean:routerEndpoint" />
>       <try>
>               <process ref="ipValidateProcessor" />
>               <choice>
>                       <when>
>                               <!-- First predicate -->
>                               <el>${in.headers.IP_VALIDATE_RESULT == 
> 'true'}</el>
>                               <to uri="cxf:bean:serviceEndpoint" />
>                               <process ref="responseProcessor" />
>                       </when>
>                       <otherwise>
>                               <process ref="invalidIPProcessor" />
>                       </otherwise>
>               </choice>
>               <catch>
>                       
> <exception>com.aspire.archtype.camel.exception.AppException</exception>
>                       <process ref="sreExceptionHandler"></process>
>               </catch>
>       </try>
> </route>
> I do a pressure testing on this application with LoadRunner.
> My test case is as follows:
> 1. loadrunner send a reqeust
> 2. server receive the request, and then forward it to IPValidateProcessor
> 3. IPValidateProcessor set exchange.getIn().setHeader("IP_VALIDATE_RESULT", 
> "true"); 
> 4. do <to uri="cxf:bean:serviceEndpoint" />
> 5. do <process ref="responseProcessor" />
> 6. end
> I only want to test the <when> clause in the routing logic.
> When only one virtual user runs the test case once, it runs ok.
> But when have 30 virtual users concurrent run for 1 minute, some of the 
> transactions run into <otherwise> clause.I found that   they run into 
> <otherwise> because in.headers.IP_VALIDATE_RESULT is null.
> I don't now why, the same requests, most run into <when> clause, few  run 
> into <otherwith> clause?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to