servicemix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dominique De Vito (JIRA)" <j...@apache.org>
Subject [jira] Commented: (SM-910) better handling of unavailable external http services
Date Tue, 03 Apr 2007 12:44:34 GMT

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


Mime
View raw message