I think I've narrowed this down to a test case but am not sure if it is a bug or just incompatible bundles.
We've got a legacy application using struts 1.1. Bottom line here is that the struts 1.1 bundle (see EBR artifact names and versions below) requires several other bundles in play, which we have, but they don't seem to play well together.
To reproduce simply, I can drop the following into the pickup folder of a CLEAN dm server 2 (I have tried M5, CI-453 and CI-458) in the order listed here:
- com.springsource.org.apache.commons.collections-3.2.1
- com.springsource.org.apache.commons.beanutils-1.8.0
- com.springsource.org.apache.commons.digester-1.8.1
- com.springsource.org.apache.struts-1.1.0
The error that you get is very unhelpful, however:
Code:
[2009-11-11 17:24:12.389] fs-watcher <DE0018E> Unable to install application from location 'file:/R:/bin/springsource/springsource-dm-server-2.0.0.CI-453/pickup/com.springsource.org.apache.struts-1.1.0.jar'. Could not satisfy constraints for bundle 'com.springsource.org.apache.struts' at version '1.1.0'. Cannot resolve: com.springsource.org.apache.struts
Unsatisfied leaf constraints:
.
com.springsource.kernel.deployer.core.DeploymentException: Dependency satisfaction failed
at com.springsource.kernel.deployer.core.internal.PipelinedApplicationDeployer.performInstall(PipelinedApplicationDeployer.java:250)
at com.springsource.kernel.deployer.core.internal.PipelinedApplicationDeployer.deploy(PipelinedApplicationDeployer.java:167)
at com.springsource.kernel.deployer.hot.HotDeploymentFileSystemListener.deploy(HotDeploymentFileSystemListener.java:192)
at com.springsource.kernel.deployer.hot.HotDeploymentFileSystemListener.onChange(HotDeploymentFileSystemListener.java:89)
at com.springsource.util.io.FileSystemChecker.notifyListeners(FileSystemChecker.java:182)
at com.springsource.util.io.FileSystemChecker.check(FileSystemChecker.java:145)
at com.springsource.kernel.deployer.hot.WatchTask.run(WatchTask.java:69)
at java.lang.Thread.run(Thread.java:619)
Caused by: com.springsource.kernel.osgi.framework.UnableToSatisfyBundleDependenciesException: Unable to satisfy dependencies of bundle 'com.springsource.org.apache.struts' at version '1.1.0': Cannot resolve: com.springsource.org.apache.struts
Unsatisfied leaf constraints:
at com.springsource.kernel.install.pipeline.stage.resolve.internal.ResolveStage.diagnoseResolutionFailure(ResolveStage.java:105)
at com.springsource.kernel.install.pipeline.stage.resolve.internal.ResolveStage.process(ResolveStage.java:74)
at com.springsource.kernel.install.pipeline.internal.StandardPipeline.doProcessTree(StandardPipeline.java:71)
at com.springsource.kernel.install.pipeline.internal.CompensatingPipeline.doProcessTree(CompensatingPipeline.java:80)
at com.springsource.kernel.install.pipeline.stage.AbstractPipelineStage.process(AbstractPipelineStage.java:50)
at com.springsource.kernel.install.pipeline.internal.StandardPipeline.doProcessTree(StandardPipeline.java:71)
at com.springsource.kernel.install.pipeline.stage.AbstractPipelineStage.process(AbstractPipelineStage.java:50)
at com.springsource.kernel.deployer.core.internal.PipelinedApplicationDeployer.performInstall(PipelinedApplicationDeployer.java:247)
... 7 more
[2009-11-11 17:24:12.389] fs-watcher <HD0002E> Hot deploy failed for resource 'R:\bin\springsource\springsource-dm-server-2.0.0.CI-453\pickup\com.springsource.org.apache.struts-1.1.0.jar'.
What's more, from the console I see that the struts module is installed, but not started, obviously, so if I start it, I get:
Code:
Error occured while starting bundle '[62] com.springsource.org.apache.struts-1.1.0' : The bundle could not be resolved. Reason: Package uses conflict: Import-Package: org.apache.commons.digester; version="[1.8.0,2.0.0)"
But digester is now active at 1.8.0 (here's a snippet from executing bundles in the console):
Code:
57 Active com.springsource.server.splash-2.0.0.D-20091027131059
58 Active com.springsource.org.apache.commons.collections-3.2.1
59 Active com.springsource.org.apache.commons.beanutils-1.8.0
60 Active com.springsource.org.apache.commons.digester-1.8.1
61 Active com.springsource.slf4j.org.apache.commons.logging-1.5.6
62 Installed com.springsource.org.apache.struts-1.1.0
The best I've been able to come up with is that digester has pulled in com.springsource.slf4j.org.apache.commons.logging-1.5.6 to satisfy the import for org.apache.commons.logging. However, once that is done, any subsequent request for that package resolves to two bundles:
Code:
Package:org.apache.commons.logging
Importers:
2 Resolved org.springframework.aop-3.0.0.RC1
5 Resolved org.springframework.beans-3.0.0.RC1
6 Resolved org.springframework.core-3.0.0.RC1
7 Resolved org.springframework.context-3.0.0.RC1
8 Resolved org.springframework.osgi.core-1.2.1
9 Resolved org.springframework.osgi.extender-1.2.1
10 Resolved org.springframework.osgi.io-1.2.1
33 Resolved com.springsource.org.apache.commons.httpclient-3.1.0
43 Resolved org.springframework.oxm-3.0.0.RC1
44 Resolved org.springframework.web-3.0.0.RC1
45 Resolved com.springsource.server.admin.content-2.0.0.D-20091027131059
46 Resolved com.springsource.server.admin.web-2.0.0.D-20091027131059
49 Resolved org.springframework.context.support-3.0.0.RC1
50 Resolved org.springframework.jdbc-3.0.0.RC1
51 Resolved org.springframework.js-2.0.8.RELEASE
52 Resolved org.springframework.transaction-3.0.0.RC1
53 Resolved org.springframework.web.servlet-3.0.0.RC1
59 Resolved com.springsource.org.apache.commons.beanutils-1.8.0
60 Resolved com.springsource.org.apache.commons.digester-1.8.1
62 Resolved com.springsource.org.apache.struts-1.1.0
Exporters:
1 Resolved com.springsource.region.user-0.0.0
61 Resolved com.springsource.slf4j.org.apache.commons.logging-1.5.6
So my questions:
- Am I on the right track trying to figure this out?
- What is com.springsource.region.user-0.0.0 doing exporting this package?
- How can this be resolved? The two things exporting this package come from dm server's default install - I've provided neither of these.