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

Bengt Rodehav commented on CAMEL-1350:
--------------------------------------

Steve, yes you're right the session level support in QuickFixJ takes care of 
the power outage problem - bad example from me. However, if I've understood 
correctly, when the fromApp() method (in an ordinary QuickFixJ application) 
returns without exceptions, then QuickFixJ will regard that message as 
processed and it's not possible to "re-recieve" that message. For that reason, 
it must be possible for the programmer to control whether an exception should 
be propagated back to QuickFixJ or not.

Let's forget about the power outage problem but focus on the potential case 
where QuickFixJ thinks that a message is processed correctly (fromApp() returns 
without exceptions) but the message is not yet "secured" (in a database or JMS 
queue for example). If this situation could arise then the message would be 
lost.

In an earlier version of this component, the received FIX message was passed on 
to a load balancer (if I remember correctly). If, later on, an exception was 
thrown, it was set on the exchange but not rethrown. The effect was that 
QuickFixJ always regarded all messages as processed even if exceptions were 
thrown. This is not OK in my opinion.

I believe this can still happen - right? I do agree that maybe not all 
exceptions should be propagated back to QuickFixJ but it must be possible for 
the developer to control this. The developer must decide whether an error is of 
a sort that can be fixed by trying again or not. E g if I get an OOME I would 
probably like to reconfigure my application (increase the heap size), restart 
it and then try to process that message again. My point is that these things 
must be under the control of the developer.

As a side note, I agree with Hadrian, This is an excellent contribution and I'm 
really looking forward to start using it. I'm also thankful that we can benefit 
from Steve's competence in QuickFixJ and FIX. It's a real enabler for a 
component like this.

> camel-quickfix component in apache camel distribution
> -----------------------------------------------------
>
>                 Key: CAMEL-1350
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-1350
>             Project: Apache Camel
>          Issue Type: New Feature
>         Environment:  <properties>
>               <camel-version>2.0-SNAPSHOT</camel-version>
>               <fuse-version>2.x-fuse-SNAPSHOT</fuse-version>
>               <activemq-version>5.2.0</activemq-version>
>               <quickfix-version>1.3.3</quickfix-version>
>               <mina-version>1.1.0</mina-version>
>               <slf4j-version>1.5.6</slf4j-version>
>       </properties>
>            Reporter: Charles Moulliard
>            Assignee: Hadrian Zbarcea
>             Fix For: 2.5.0
>
>         Attachments: camel-quickfix-2.zip, camel-quickfix.patch, 
> camel-quickfix.zip, camel-quickfix.zip, QuickFixDataFormat.java, 
> reportincident.quickfix.zip
>
>
> Hi,
> ATTENTION: Ignoring converter type: org.apache.camel.fix.FixConverter as a 
> dependent class could not be found: java.lang.NoClassDefFoundError: 
> biz/c24/io/api/data/DataType
> java.lang.NoClassDefFoundError: biz/c24/io/api/data/DataType
>       at java.lang.Class.getDeclaredMethods0(Native Method)
>       at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
>       at java.lang.Class.getDeclaredMethods(Class.java:1791)
>       at 
> org.apache.camel.impl.converter.AnnotationTypeConverterLoader.loadConverterMethods(AnnotationTypeConverterLoader.java:147)
>       at 
> org.apache.camel.impl.converter.AnnotationTypeConverterLoader.load(AnnotationTypeConverterLoader.java:78)
>       at 
> org.apache.camel.impl.converter.DefaultTypeConverter.checkLoaded(DefaultTypeConverter.java:260)
>       at 
> org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:95)
>       at 
> org.apache.camel.impl.converter.DefaultTypeConverter.convertTo(DefaultTypeConverter.java:71)
>       at 
> org.apache.camel.util.IntrospectionSupport.convert(IntrospectionSupport.java:263)
>       at 
> org.apache.camel.util.IntrospectionSupport.setProperty(IntrospectionSupport.java:221)
>       at 
> org.apache.camel.util.IntrospectionSupport.setProperties(IntrospectionSupport.java:188)
>       at 
> org.apache.camel.impl.DefaultComponent.setProperties(DefaultComponent.java:213)
>       at 
> org.apache.camel.component.file.GenericFileComponent.createEndpoint(GenericFileComponent.java:63)
>       at 
> org.apache.camel.component.file.GenericFileComponent.createEndpoint(GenericFileComponent.java:33)
>       at 
> org.apache.camel.impl.DefaultComponent.createEndpoint(DefaultComponent.java:81)
>       at 
> org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:330)
>       at 
> org.apache.camel.util.CamelContextHelper.getMandatoryEndpoint(CamelContextHelper.java:54)
>       at org.apache.camel.model.RouteType.resolveEndpoint(RouteType.java:96)
>       at 
> org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:106)
>       at 
> org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:112)
>       at org.apache.camel.model.FromType.resolveEndpoint(FromType.java:72)
>       at 
> org.apache.camel.impl.DefaultRouteContext.getEndpoint(DefaultRouteContext.java:81)
>       at org.apache.camel.model.RouteType.addRoutes(RouteType.java:239)
>       at org.apache.camel.model.RouteType.addRoutes(RouteType.java:86)
>       at 
> org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:661)
>       at 
> org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:651)
>       at 
> org.apache.camel.spring.SpringCamelContext.maybeDoStart(SpringCamelContext.java:166)
>       at 
> org.apache.camel.spring.SpringCamelContext.doStart(SpringCamelContext.java:161)
>       at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:49)
>       at 
> org.apache.camel.spring.SpringCamelContext.maybeStart(SpringCamelContext.java:96)
>       at 
> org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:115)
>       at 
> org.springframework.context.event.SimpleApplicationEventMulticaster$1.run(SimpleApplicationEventMulticaster.java:78)
>       at 
> org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:49)
>       at 
> org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:76)
>       at 
> org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:274)
>       at 
> org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:736)
>       at 
> org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:383)
>       at 
> org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
>       at 
> org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93)
>       at 
> org.apache.camel.spring.Main.createDefaultApplicationContext(Main.java:232)
>       at org.apache.camel.spring.Main.doStart(Main.java:186)
>       at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:49)
>       at org.apache.camel.util.MainSupport.run(MainSupport.java:121)
>       at org.apache.camel.util.MainSupport.run(MainSupport.java:299)
>       at org.apache.camel.spring.Main.main(Main.java:98)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at java.lang.reflect.Method.invoke(Method.java:597)
>       at org.apache.camel.maven.RunMojo$1.run(RunMojo.java:396)
>       at java.lang.Thread.run(Thread.java:619)
> The org.apache.camel.fix.FixConverter class uses proprietary classes : 
> import biz.c24.io.api.data.BooleanDataType;
> import biz.c24.io.api.data.CharDataType;
> import biz.c24.io.api.data.ComplexDataObject;
> import biz.c24.io.api.data.ComplexDataType;
> import biz.c24.io.api.data.DataType;
> import biz.c24.io.api.data.DateDataType;
> import biz.c24.io.api.data.Element;
> import biz.c24.io.api.data.IntDataType;
> import biz.c24.io.api.data.NumberDataType;
> import biz.c24.io.api.data.StringDataType;
> import biz.c24.io.api.presentation.TextualSource;
> import biz.c24.io.fix42.NewOrderSingleElement;
> Except if those classes are part of open source community but How can I use 
> this component without Artix Data Service ?
> ex config :
>               <route>
>                       <from uri="fixserver:banzai-to-camel.cfg" />
>                       <to uri="log:quickfix" />
>               </route>

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