[ 
https://issues.apache.org/activemq/browse/SM-910?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_38950
 ] 

Dominique De Vito commented on SM-910:
--------------------------------------

I have done a simple test using a seda flow with a JCA consumer.
        
<sm:flows>
  <sm:sedaFlow />
  <sm:jcaFlow connectionManager="#connectionManager"
    jmsURL="${activemq.url}" />
</sm:flows>

...

<sm:activationSpec componentName="inputReceiver_2">
   <sm:component>
        <jms:component>
          <jms:endpoints>
            <jms:endpoint 
                    role="consumer"
                    endpoint="jmsbeginningpoint_2"
                    service="foo:myJmsReceiver_2"
                    connectionFactory="#jmsFactory"
                    targetService="foo:ws_2"
                    synchronous="true" 
                    rollbackOnError="true"
                    defaultMep="http://www.w3.org/2004/08/wsdl/in-only";
                    processorName="jca"
                    bootstrapContext="#bootstrapContext"
                    resourceAdapter="#activemqRA">
                    <jms:activationSpec>
                        <amqra:activationSpec destination="queue_2"
                            destinationType="javax.jms.Queue" />
                    </jms:activationSpec>
            </jms:endpoint>
        </jms:endpoints>
   </jms:component>
 </sm:component>
</sm:activationSpec>


<sm:activationSpec componentName="ws_2">
   <sm:component>
      <http:component>
          <http:endpoints>
              <http:endpoint service="foo:ws_2"
                 endpoint="myProvider"
                 role="provider" 
                 locationURI="http://localhost:8090/WsListener/index.do";
                 defaultMep="http://www.w3.org/2004/08/wsdl/in-only";
              />
         </http:endpoints>
    </http:component>
  </sm:component>
</sm:activationSpec>

The test scenario was the following:
(a) using another pipeline, I have pushed a message into the queue_2
 
(b) I have run the pipeline defined above WITHOUT running the external web 
service provider, than I have got plenty of "java.net.ConnectException: 
Connection refused: connect". 
The traces are full of rollback, no single one commit.

(c) While there was no commit into the traces, and due to 
rollbackOnError="true", I was expecting still the message to be into the queue 
(called queue_2). 
I have re-started ServiceMix and my external web service provider too. I was 
expecting ServiceMix to get this message to give it to the external web service 
provider now running. But ServiceMix has not treated any message.

I have tested this under servicemix-3.1-incubating et 
servicemix-3.2-incubating-20070308.121113-12

While traces include no commit, only rollbacks, I expect the message to be stil 
into the queue and ServiceMix to treat it again while restarting. This is not 
the case, i.e. when adding synchronous="true" rollbackOnError="true", the 
message is rollbacked, but after a few number of attempts, it disappears 
somewhere.

Can you tell me what happens ? 
Where this message goes ? 
Why ServiceMix does not treat it again when restarted ?

Did the message go some component DLQ ? 

I have found these traces after the last rollback:

DEBUG - AbstractRegion                 - Adding destination: 
queue://ActiveMQ.DLQ
DEBUG - JournalPersistenceAdapter      - Waking for checkpoint to complete.
DEBUG - JournalPersistenceAdapter      - Checkpoint started.
DEBUG - JournalPersistenceAdapter      - Checkpoint done.
DEBUG - JournalMessageStore            - Journalled message add for: 
ID:p-105825-1398-1175602237242-3:35:1:1:1, at: 0:10457
DEBUG - DLQ                            - No subscriptions registered, will not 
dispatch message at this time.

Thanks.



> better handling of unavailable external http services
> -----------------------------------------------------
>
>                 Key: SM-910
>                 URL: https://issues.apache.org/activemq/browse/SM-910
>             Project: ServiceMix
>          Issue Type: Improvement
>          Components: servicemix-http
>    Affects Versions: 3.1
>            Reporter: Dominique De Vito
>             Fix For: 3.1.1
>
>         Attachments: patchfile.txt
>
>   Original Estimate: 1 hour
>  Remaining Estimate: 1 hour
>
> The org.apache.servicemix.http.processors.ProviderProcessor calls an external 
> http service.
>             
> When calling an unavailable external http service, the following stack trace 
> appears after an exception rise:
> java.net.ConnectException: Connection refused: connect
>         at java.net.PlainSocketImpl.socketConnect(Native Method)
>         at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
>         at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
>         at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
>         at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
>         at java.net.Socket.connect(Socket.java:516)
>         at java.net.Socket.connect(Socket.java:466)
>         at java.net.Socket.<init>(Socket.java:366)
>         at java.net.Socket.<init>(Socket.java:239)
>         at 
> org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:79)
>         at 
> org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:121)
>         at 
> org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:706)
>         at 
> org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.open(MultiThreadedHttpConnectionManager.java:1321)
>         at 
> org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:386)
>         at 
> org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:170)
>         at 
> org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396)
>         at 
> org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:346)
>         at 
> org.apache.servicemix.http.processors.ProviderProcessor.process(ProviderProcessor.java:168)
>         at 
> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:489)
>         at 
> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:441)
>         at 
> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>         at 
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:593)
>         at 
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:174)
>         at 
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:176)
>         at 
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>         at 
> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
>         at 
> edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
>         at java.lang.Thread.run(Thread.java:595)
> I think handling could be improved in case of (exchange instanceof InOnly == 
> false), so that a response could be returned. 
> See the attached patch.

-- 
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