Declarative Exception Handling in ServiceMix

2006-10-05 Thread Ralf Wunsch


Ralf Wunsch wrote:
 
 

 We are starting a new EAI project. At this time ServiceMix is our choice
 for the implementation plattform. We have strong requirements for
 monitoring and control issues. At this one aspect is the handling of
 unexpected errors. For this reason i have implemented the following error
 handler solution.
 

 

 

 The error handling solution delegates errors or faults detected in
 analysis of the MessageExchange objects to an ErrorHandler implemented as
 XBean. This bean is used by an ErrorHandlerComponent (a JBI component
 embedded in the flow) or by the JBIContainer (the centralized way) or
 both.
 

 
http://www.nabble.com/file/290/error-handler-embedding.png 

 

 The ErrorHandler can cancel transactions and stop the container or the
 source component (all cofigurable). Furthermore it's possible to route the
 error or fault messages and the actuating message to a configurable
 target. In this case ist possible to embed one or more
 ErrorHandlerComponents into the flow.
 

 
http://www.nabble.com/file/291/error-handler-flow.png 

 

 Such an ambedded ErrorHandlerComponent borrowed by the EIP WireTap ensures
 that the rerouted message from the source will be in a well know format
 (the centralised approach can't accomplish this). The embedded and the
 centralized approach can be used in combination. For synchronization the
 ErrorHandlerComponent sets a Property on the outgoing MessageExchange and
 the ErrorEventListener does nothing as long as this property can be found
 in the MessageEchange which signals a fault or an error.
 

 

 A sample configuration...
 

 

 lt;bean id=errorHandler
   class=de.eval.eai.error.DefaultErrorHandlergt;
 lt;/beangt;
 ...
 lt;bean id=errorHandlerConfig
   class=de.eval.eai.error.ErrorHandlerConfiggt;
   lt;property name=shutdownOnFault value=true /gt;
   lt;property name=rollbackOnFault value=false /gt;
 lt;/beangt;
 ...
 lt;test:container id=jbi 
useMBeanServer=true
createMBeanServer=false
dumpStats=true
statsInterval=10
errorHandler=#errorHandler
errorHandlerConfig=#errorHandlerConfiggt;
 ...
   lt;sm:activationSpecsgt;
 ...
 lt;sm:activationSpec componentName=errorHandlergt;
   lt;sm:componentgt;
 lt;eai:componentgt;
   lt;eai:endpointsgt;
 lt;eai:errorHandler service=errorHandler
 endpoint=endpointgt;
   lt;eai:targetgt;
 lt;eai:exchange-target service=transformer /gt;
   lt;/eai:targetgt;
   lt;eai:disqualifyTargetgt;
 lt;eai:exchange-target service=failedQueue /gt;
   lt;/eai:disqualifyTargetgt;
   lt;eai:errorTargetgt;
 lt;eai:exchange-target service=errorQueue /gt;
   lt;/eai:errorTargetgt;
   lt;eai:faultTargetgt;
 lt;eai:exchange-target service=faultQueue /gt;
   lt;/eai:faultTargetgt;
   lt;property name=shutdownOnFault value=true /gt;
   lt;property name=rollbackOnFault value=false /gt;
 lt;/eai:errorHandlergt;
   lt;/eai:endpointsgt;
 lt;/eai:componentgt;
   lt;/sm:componentgt;
 lt;/sm:activationSpecgt;
 ...

 

 

 Two questions:
 

 

 Ist this a accurate ServieMix way (in accordance with the ideas of
 ServiceMix)?
 

 

 Is it on behalf of the project or the communitiy to reuse this solution?
 

 

 Thanks,

 Ralf Wunsch
 

 

-- 
View this message in context: 
http://www.nabble.com/Declarative-Exception-Handling-in-ServiceMix-tf2161788.html#a6658179
Sent from the ServiceMix - Dev mailing list archive at Nabble.com.


Re: Declarative Exception Handling in ServiceMix

2006-10-05 Thread Guillaume Nodet

Sounds good. Nice work !

A few questions:
* How are the errorHandler and errorHandlerConfig related ?
* If I want to handle a given exception specifically, i guess
   I need to implement a custom errorHandler, right ?
* how does the errorHandler plug into the jbi container ?

If you want to donate this code, feel free to raise a JIRA issue
and attach the code.  I think it would be a nice addition.


On 10/5/06, Ralf Wunsch [EMAIL PROTECTED] wrote:



Ralf Wunsch wrote:



 We are starting a new EAI project. At this time ServiceMix is our choice
 for the implementation plattform. We have strong requirements for
 monitoring and control issues. At this one aspect is the handling of
 unexpected errors. For this reason i have implemented the following error
 handler solution.






 The error handling solution delegates errors or faults detected in
 analysis of the MessageExchange objects to an ErrorHandler implemented as
 XBean. This bean is used by an ErrorHandlerComponent (a JBI component
 embedded in the flow) or by the JBIContainer (the centralized way) or
 both.



http://www.nabble.com/file/290/error-handler-embedding.png



 The ErrorHandler can cancel transactions and stop the container or the
 source component (all cofigurable). Furthermore it's possible to route the
 error or fault messages and the actuating message to a configurable
 target. In this case ist possible to embed one or more
 ErrorHandlerComponents into the flow.



http://www.nabble.com/file/291/error-handler-flow.png



 Such an ambedded ErrorHandlerComponent borrowed by the EIP WireTap ensures
 that the rerouted message from the source will be in a well know format
 (the centralised approach can't accomplish this). The embedded and the
 centralized approach can be used in combination. For synchronization the
 ErrorHandlerComponent sets a Property on the outgoing MessageExchange and
 the ErrorEventListener does nothing as long as this property can be found
 in the MessageEchange which signals a fault or an error.




 A sample configuration...




 lt;bean id=errorHandler
   class=de.eval.eai.error.DefaultErrorHandlergt;
 lt;/beangt;
 ...
 lt;bean id=errorHandlerConfig
   class=de.eval.eai.error.ErrorHandlerConfiggt;
   lt;property name=shutdownOnFault value=true /gt;
   lt;property name=rollbackOnFault value=false /gt;
 lt;/beangt;
 ...
 lt;test:container id=jbi
useMBeanServer=true
createMBeanServer=false
dumpStats=true
statsInterval=10
errorHandler=#errorHandler
errorHandlerConfig=#errorHandlerConfiggt;
 ...
   lt;sm:activationSpecsgt;
 ...
 lt;sm:activationSpec componentName=errorHandlergt;
   lt;sm:componentgt;
 lt;eai:componentgt;
   lt;eai:endpointsgt;
 lt;eai:errorHandler service=errorHandler
 endpoint=endpointgt;
   lt;eai:targetgt;
 lt;eai:exchange-target service=transformer /gt;
   lt;/eai:targetgt;
   lt;eai:disqualifyTargetgt;
 lt;eai:exchange-target service=failedQueue /gt;
   lt;/eai:disqualifyTargetgt;
   lt;eai:errorTargetgt;
 lt;eai:exchange-target service=errorQueue /gt;
   lt;/eai:errorTargetgt;
   lt;eai:faultTargetgt;
 lt;eai:exchange-target service=faultQueue /gt;
   lt;/eai:faultTargetgt;
   lt;property name=shutdownOnFault value=true /gt;
   lt;property name=rollbackOnFault value=false /gt;
 lt;/eai:errorHandlergt;
   lt;/eai:endpointsgt;
 lt;/eai:componentgt;
   lt;/sm:componentgt;
 lt;/sm:activationSpecgt;
 ...





 Two questions:




 Ist this a accurate ServieMix way (in accordance with the ideas of
 ServiceMix)?




 Is it on behalf of the project or the communitiy to reuse this solution?




 Thanks,

 Ralf Wunsch




--
View this message in context: 
http://www.nabble.com/Declarative-Exception-Handling-in-ServiceMix-tf2161788.html#a6658179
Sent from the ServiceMix - Dev mailing list archive at Nabble.com.





--
Cheers,
Guillaume Nodet


Re: Declarative Exception Handling in ServiceMix

2006-10-05 Thread Guillaume Nodet

On 10/5/06, Ralf Wunsch [EMAIL PROTECTED] wrote:



gnodet wrote:

 A few questions:
  * How are the errorHandler and errorHandlerConfig related ?
  * If I want to handle a given exception specifically, i guess
 I need to implement a custom errorHandler, right ?
  * how does the errorHandler plug into the jbi container ?


* If i have more than one ErrorHandlerComponent in the flow it should be
possible to use one ErrorHandler with different configurations for each
ErrorHandlerComponent (e.g. to specify different targets for different types
of failed messages). To provide this the configuration for the ErrorHandler
has been extracted and assembled in the ErrorHandlerConfig XBean.

* In my opinion the error handler hook and the handlers strategy should be
separated. I am involved in a migration project (from a commercial EAI
solution to open source). In the current EAI system an error handler is
always implemented. We want to migrate this solution that is based on a set
of database stored rules. I think there can be a lot of error handler
strategy implementations. One default handler can be an implementation as
discussed before.

* At this time i am using my own extension of the JBIContainer. This
extension registeres an ErrorEventListener as EventListener by default. I
have not found a way to configure event listeners in the deployment
descriptor. The ErrorHandler is a attribute of the extended container (the
getter/setter methods are using the ErrorEventListerners 'errorHandler'
attribute).


Have you tried something like:
sm:container id=jbi embedded=true
 sm:listeners
 bean class= /
 /sm:listeners

It works.



Best regards,
Ralf Wunsch
--
View this message in context: 
http://www.nabble.com/Declarative-Exception-Handling-in-ServiceMix-tf2161788.html#a6661952
Sent from the ServiceMix - Dev mailing list archive at Nabble.com.





--
Cheers,
Guillaume Nodet