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