Question

I have a maven + spring based application which I built and deployed in Servicemix. However, when tried to start the bundle, it remained in the Waiting status for a long time before generating following exception:

16:25:52,219 | DEBUG | Timer-0          | DependencyServiceManager         | startup.DependencyServiceManager  339 | 72 - org.springframework.osgi.extender - 1.2.0 | Deregistering service dependency dependencyDetector for OsgiBundleXmlApplicationContext(bundle= abc, config=osgibundle:/META-INF/spring/*.xml)
16:25:52,219 | ERROR | Timer-0          | WaiterApplicationContextExecutor | WaiterApplicationContextExecutor  432 | 72 - org.springframework.osgi.extender - 1.2.0 | Unable to create application context for [abc], unsatisfied dependencies: Dependency on [(objectClass=javax.sql.DataSource)] (from bean [&dataSource])
org.springframework.context.ApplicationContextException: Application context initialization for 'com.vetstreet.pet_mailer' has timed out

Appreciate any help or suggestion.

Était-ce utile?

La solution

Spring Extender holds back the startup of an application (setting it's status to Waiting) if a service that you're referencing is unavailable at startup. The reason is that the availability attribute of every referenced service is set to mandatory, and there's a default-timeout global attribute which is by default set to 5 seconds. If the service you're referring to doesn't appear in that amount of time, Spring Extender will throw an Exception like that you have. So what I think is something wrong with the service publication of your DataSource. Do you have the corresponding tag in your other application?

<osgi:service ...>

Check out this link: http://static.springsource.org/osgi/docs/2.0.0.M1/reference/html/service-registry.html. It contains a lot of example. Ensure that in both osgi:service and both osgi:reference you have the javax.sql.DataSource interface set. And be aware of not publishing the same interface by 2 different bundles.

One more thing: just to be sure, import the javax.sql package in your manifest:

<Import-Package>javax.sql</Import-Package>

Hope this helps, Gergely

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top