Yes. But I need after that to create a patch because I don't have WRITE
access to SVN now.
Otherwise, we have added this code in the class QuickFixInitiator &
QuickFixAcceptor
:
ClassLoader ccl =
Thread.currentThread().getContextClassLoader();
try {
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
acceptor = new SocketAcceptor(application, storeFactory,
settings, logFactory,
new DefaultMessageFactory());
acceptor.start();
} finally {
Thread.currentThread().setContextClassLoader(ccl);
}
to solution the classloading issue raised by the class
quickfix.DefaultMessageFactory
s...@root:osgi> Exception in thread "SpringOsgiExtenderThread-34"
java.lang.NoClassDefFoundError: quickfix/fix41/MessageFactory
at
quickfix.DefaultMessageFactory.<init>(DefaultMessageFactory.java:30)
at
org.apache.camel.component.quickfix.QuickfixAcceptor$QuickfixAcceptorEndpoint.start(QuickfixAcceptor.java:62)
at
org.apache.camel.component.quickfix.QuickfixEndpoint.start(QuickfixEndpoint.java:179)
see here : http://www.eclipsezone.com/eclipse/forums/t61831.html and here
for more info
http://mail-archives.apache.org/mod_mbox/felix-users/200803.mbox/%[email protected]%3e
Regards,
Charles Moulliard
Senior Enterprise Architect
Apache Camel Committer
*****************************
blog : http://cmoulliard.blogspot.com
On Thu, May 7, 2009 at 10:32 AM, Willem Jiang <[email protected]>wrote:
> 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
> >>>>>>>>>
> >>>>>
> >>
> >
>
>