Hi Charles, Just a quick question for your change of camel-quickfix? Can you add some comments on "Thread.currentThread().setContextClassLoader added in quickFixAcceptor and Initiator"
Willem Charles Moulliard wrote: > Hi Willem, > > I haven't deploy mina and it works in my OSGI environment. I will deploy the > mina-core as you propose and see the result. > > BTW, the current code is not yet ready to be used. Modifications must be > done concerning logging strategy, .... and probably about how we can receive > FIX messages. Why, the current quickfix package is able to connect to a FIX > server and exchange messages but the messages received are converted into > quickfix.FIX40 java classes. *I prefer that the user can choose the > dataformat he would like to use (by default can be String (= FIX content), > quickfix.FIX4x, BindyDataFormat, ....)*. How it is another question because > I'm quite sure that we need to modify quickfix package. I have tried to > contact quickfix team but it is for moment "---------". As quickfix is also > used by third parties companies providing billable support including > resources of the project ! > > Regards, > > Charles Moulliard > Senior Enterprise Architect > Apache Camel Committer > > ***************************** > blog : http://cmoulliard.blogspot.com > > > On Wed, May 6, 2009 at 6:04 PM, Willem Jiang <[email protected]> wrote: > >> Hi Charles >> >> After changed the pom.xml to make camel-quickfix component as bundle, I >> managed to load it in Pax-Exam. >> BTW, you need to wrap the quickfix and mina-core jars. >> >> >> wrappedBundle(mavenBundle().groupId("org.quickfixj").artifactId("quickfixj-all").version("1.4.0")), >> >> >> wrappedBundle(mavenBundle().groupId("org.apache.mina").artifactId("mina-core").version("1.1.7")), >> >> >> Willem >> >> >> Charles Moulliard wrote: >>> Hi, >>> >>> I will first check the code in order to be able to run it in Camel with >>> quickfix/j (it seems that there is a classloading issue inside >> quickfix/j, >>> ...) and deploy it in OSGI server. >>> After, I will check why there is an issue with the XML file, .... >>> >>> Regards >>> >>> Charles Moulliard >>> Senior Enterprise Architect >>> Apache Camel Committer >>> >>> ***************************** >>> blog : http://cmoulliard.blogspot.com >>> >>> >>> On Wed, May 6, 2009 at 6:51 AM, Willem Jiang <[email protected]> >> wrote: >>>> Yes, declare the component in the spring configuration file just a walk >>>> around solution. >>>> >>>> I can dig the code of quickfix resource loading later today. >>>> >>>> Willem >>>> >>>> Claus Ibsen wrote: >>>>> On Tue, May 5, 2009 at 5:15 PM, Charles Moulliard < >> [email protected]> >>>> wrote: >>>>>> With the following config, it works : >>>>>> >>>>>> <bean id="quickfix-server" >>>>>> class="org.apache.camel.quickfix.QuickfixAcceptor"/> >>>>>> <bean id="quickfix-client" >>>>>> class="org.apache.camel.quickfix.QuickfixInitiator"/> >>>>>> >>>>>> >>>>>> <camel:camelContext trace="true" xmlns=" >>>>>> http://camel.apache.org/schema/osgi"> >>>>>> <camel:route> >>>>>> <camel:from >>>> uri="quickfix-server:META-INF/examples/server.cfg"/> >>>>>> <camel:to >>>> uri="quickfix-client:META-INF/examples/client.cfg"/> >>>>>> </camel:route> >>>>>> </camel:camelContext> >>>>>> >>>>>> Any idea why we have to declare the beans ? >>>>> No but its your job to dig into the code base :) >>>>> >>>>> I assume the code that reads the resources from the URI has a flaw. >>>>> I can help with this later. The important part is to make sure the >>>>> camel-quickfix component works, has the features we want and is >>>>> properly tested etc. >>>>> >>>>> Then later we can fix the minor issues with resource loading. >>>>> It should support loading in classpath, file, and OSGi :) >>>>> >>>>> >>>>> >>>>> >>>>>> Charles Moulliard >>>>>> Senior Enterprise Architect >>>>>> Apache Camel Committer >>>>>> >>>>>> ***************************** >>>>>> blog : http://cmoulliard.blogspot.com >>>>>> >>>>>> >>>>>> On Tue, May 5, 2009 at 5:12 PM, Charles Moulliard < >> [email protected] >>>>> wrote: >>>>>>> I have modified the spring xml file like you propose : >>>>>>> >>>>>>> <camel:camelContext trace="true" xmlns=" >>>>>>> http://camel.apache.org/schema/osgi"> >>>>>>> <camel:route> >>>>>>> <camel:from uri="quickfix-server:examples/server.cfg"/> >>>>>>> <camel:to uri="quickfix-client:examples/client.cfg"/> >>>>>>> </camel:route> >>>>>>> </camel:camelContext> >>>>>>> >>>>>>> and now we have the error : >>>>>>> >>>>>>> s...@root:osgi> Exception in thread "SpringOsgiExtenderThread-63" >>>>>>> org.apache.camel.ResolveEndpointFailedException: Failed to resolve >>>> endpoint: >>>>>>> quickfix-server:examples/ser >>>>>>> ver.cfg due to: java.io.FileNotFoundException: class path resource >>>>>>> [examples/server.cfg] cannot be opened because it does not exist >>>>>>> >>>>>>> at >>>>>>> >> org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:378) >>>>>>> at >>>>>>> >> org.apache.camel.util.CamelContextHelper.getMandatoryEndpoint(CamelContextHelper.java:52) >>>>>>> at >>>>>>> >> org.apache.camel.model.RouteDefinition.resolveEndpoint(RouteDefinition.java:133) >>>>>>> at >>>>>>> >> org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:103) >>>>>>> at >>>>>>> >> org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:109) >>>>>>> at >>>>>>> >> org.apache.camel.model.FromDefinition.resolveEndpoint(FromDefinition.java:72) >>>>>>> at >>>>>>> >> org.apache.camel.impl.DefaultRouteContext.getEndpoint(DefaultRouteContext.java:78) >>>>>>> at >>>>>>> >> org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:302) >>>>>>> at >>>>>>> >> org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:121) >>>>>>> at >>>>>>> >> org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:481) >>>>>>> at >>>>>>> >> org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:777) >>>>>>> at >>>>>>> >> org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:759) >>>>>>> at >>>>>>> >> org.apache.camel.spring.SpringCamelContext.maybeDoStart(SpringCamelContext.java:165) >>>>>>> at >>>>>>> >> org.apache.camel.spring.SpringCamelContext.doStart(SpringCamelContext.java:160) >>>>>>> at >>>>>>> org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:50) >>>>>>> at >>>>>>> >> org.apache.camel.spring.SpringCamelContext.maybeStart(SpringCamelContext.java:95) >>>>>>> at >>>>>>> >> org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:114) >>>>>>> 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.osgi.context.support.AbstractOsgiBundleApplicationContext.finishRefresh(AbstractOsgiBundleApplicationContext.java:235) >>>>>>> at >>>>>>> >> org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionApplicationContext.java:358) >>>>>>> at >>>>>>> >> org.springframework.osgi.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85) >>>>>>> at >>>>>>> >> org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java:320) >>>>>>> at >>>>>>> >> org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationC >>>>>>> ontextExecutor.java:136) >>>>>>> at java.lang.Thread.run(Thread.java:619) >>>>>>> *Caused by: java.io.FileNotFoundException: class path resource >>>>>>> [examples/server.cfg] cannot be opened because it does not exist* >>>>>>> at >>>>>>> >> org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:143) >>>>>>> at >>>>>>> >> org.apache.camel.quickfix.QuickfixEndpoint.start(QuickfixEndpoint.java:167) >>>>>>> at >>>>>>> >> org.apache.camel.impl.DefaultCamelContext.addService(DefaultCamelContext.java:510) >>>>>>> at >>>>>>> >> org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:372) >>>>>>> ... 27 more >>>>>>> >>>>>>> I will change the path and retest >>>>>>> >>>>>>> Charles Moulliard >>>>>>> Senior Enterprise Architect >>>>>>> Apache Camel Committer >>>>>>> >>>>>>> ***************************** >>>>>>> blog : http://cmoulliard.blogspot.com >>>>>>> >>>>>>> >>>>>>> On Tue, May 5, 2009 at 5:08 PM, Willem Jiang <[email protected] >>>>> wrote: >>>>>>>> Hi Charles, >>>>>>>> >>>>>>>> I just checked the code with the stack trace, and found this issue >> may >>>>>>>> caused by the java.lang.NullPointerException. >>>>>>>> >>>>>>>> Here is the code snippet of the OsgiComponentResolver. >>>>>>>> try { >>>>>>>> type = getComponent(name); >>>>>>>> } catch (Throwable e) { >>>>>>>> throw new IllegalArgumentException("Invalid URI, no >>>>>>>> Component registered for schema : " + name, e); >>>>>>>> } >>>>>>>> >>>>>>>> The getComponent() method just search the bundle entry for the >>>> component. >>>>>>>> I have no idea why the NPE will be thrown from this getComponent() >>>> method. >>>>>>>> Willem >>>>>>>> >>>>>>>> Charles Moulliard wrote: >>>>>>>>> Hi, >>>>>>>>> >>>>>>>>> I'm currently working on the new camel-quickfix component provided >> by >>>>>>>> Anton >>>>>>>>> Arhipov. >>>>>>>>> >>>>>>>>> I have created a camel spring xml file to use it : >>>>>>>>> >>>>>>>>> <camel:camelContext trace="true" xmlns=" >>>>>>>>> http://camel.apache.org/schema/osgi"> >>>>>>>>> <camel:route> >>>>>>>>> <camel:from uri="quickfix-server:examples/server.cfg"/> >>>>>>>>> <camel:to uri="quickfix-client:examples/client.cfg"/> >>>>>>>>> </camel:route> >>>>>>>>> </camel:camelContext> >>>>>>>>> >>>>>>>>> but when the component is launched, I receive the following error : >>>>>>>>> >>>>>>>>> 16:25:20,625 | ERROR | xtenderThread-53 | ContextLoaderListener >>>>>>>> | >>>>>>>>> BundleApplicationContextListener 50 | Application context refresh >>>>>>>> failed >>>>>>>>> (OsgiBundleXmlApplicationContext(bundle=reportincident.quickfix, >>>>>>>>> config=osgibundle:/META-INF/spring/*.xml)) >>>>>>>>> org.apache.camel.ResolveEndpointFailedException: *Failed to resolve >>>>>>>>> endpoint: quickfix-server:examples/server.cfg* due to: >>>>>>>>> org.apache.camel.RuntimeCamelException: Could not auto create >>>> component: >>>>>>>>> quickfix-server >>>>>>>>> at >>>>>>>>> >> org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:378) >>>>>>>>> at >>>>>>>>> >> org.apache.camel.util.CamelContextHelper.getMandatoryEndpoint(CamelContextHelper.java:52) >>>>>>>>> at >>>>>>>>> >> org.apache.camel.model.RouteDefinition.resolveEndpoint(RouteDefinition.java:133) >>>>>>>>> at >>>>>>>>> >> org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:103) >>>>>>>>> at >>>>>>>>> >> org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:109) >>>>>>>>> at >>>>>>>>> >> org.apache.camel.model.FromDefinition.resolveEndpoint(FromDefinition.java:72) >>>>>>>>> at >>>>>>>>> >> org.apache.camel.impl.DefaultRouteContext.getEndpoint(DefaultRouteContext.java:78) >>>>>>>>> at >>>>>>>>> >> org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:302) >>>>>>>>> at >>>>>>>>> >> org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:121) >>>>>>>>> at >>>>>>>>> >> org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:481) >>>>>>>>> at >>>>>>>>> >> org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:777) >>>>>>>>> at >>>>>>>>> >> org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:759) >>>>>>>>> at >>>>>>>>> >> org.apache.camel.spring.SpringCamelContext.maybeDoStart(SpringCamelContext.java:165) >>>>>>>>> at >>>>>>>>> >> org.apache.camel.spring.SpringCamelContext.doStart(SpringCamelContext.java:160) >>>>>>>>> at >>>>>>>> org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:50) >>>>>>>>> at >>>>>>>>> >> org.apache.camel.spring.SpringCamelContext.maybeStart(SpringCamelContext.java:95) >>>>>>>>> at >>>>>>>>> >> org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:114) >>>>>>>>> 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.osgi.context.support.AbstractOsgiBundleApplicationContext.finishRefresh(AbstractOsgiBundleApplicationContext.java:235) >>>>>>>>> at >>>>>>>>> >> org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionApplicationContext.java:358) >>>>>>>>> at >>>>>>>>> >> org.springframework.osgi.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85) >>>>>>>>> at >>>>>>>>> >> org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java:320) >>>>>>>>> at >>>>>>>>> >> org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:136) >>>>>>>>> at java.lang.Thread.run(Thread.java:619) >>>>>>>>> Caused by: org.apache.camel.RuntimeCamelException: Could not auto >>>> create >>>>>>>>> component: quickfix-server >>>>>>>>> at >>>>>>>>> >> org.apache.camel.impl.DefaultCamelContext.getComponent(DefaultCamelContext.java:211) >>>>>>>>> at >>>>>>>>> >> org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:354) >>>>>>>>> ... 27 more >>>>>>>>> Caused by: java.lang.IllegalArgumentException: *Invalid URI, no >>>>>>>> Component >>>>>>>>> registered for scheme : quickfix-server* >>>>>>>>> at >>>>>>>>> >> org.apache.camel.osgi.OsgiComponentResolver.resolveComponent(OsgiComponentResolver.java:66) >>>>>>>>> at >>>>>>>>> >> org.apache.camel.impl.DefaultCamelContext.getComponent(DefaultCamelContext.java:201) >>>>>>>>> ... 28 more >>>>>>>>> Caused by: java.lang.NullPointerException >>>>>>>>> When looking in the code provided, I see that Anton has created >> under >>>>>>>> the >>>>>>>>> directory META-INF/services, the following files : >>>>>>>>> >>>>>>>>> org\apache\camel\component\quickfix-server >>>>>>>>> >>>>>>>>> class=org.apache.camel.quickfix.QuickfixAcceptor >>>>>>>>> >>>>>>>>> org\apache\camel\component\quickfix-client >>>>>>>>> >>>>>>>>> class=org.apache.camel.quickfix.QuickfixInitiator >>>>>>>>> >>>>>>>>> Is it enough to register new camel endpoints ? >>>>>>>>> >>>>>>>>> Regards, >>>>>>>>> >>>>>>>>> Charles Moulliard >>>>>>>>> Senior Enterprise Architect >>>>>>>>> Apache Camel Committer >>>>>>>>> >>>>>>>>> ***************************** >>>>>>>>> blog : http://cmoulliard.blogspot.com >>>>>>>>> >>>>> >> >
