Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorootto2018-04-02 22:13:16 +0000
committerootto2018-04-02 22:13:17 +0000
commit011209974b8e760b8fc058c673db525d0de97595 (patch)
treeed110275cd28edf40cfa09479eeb4c0c3bfcd481
parent537e766f302ce8a59eb0875ebb214ea675ba245d (diff)
downloadblueprint-011209974b8e760b8fc058c673db525d0de97595.tar.gz
blueprint-011209974b8e760b8fc058c673db525d0de97595.tar.xz
blueprint-011209974b8e760b8fc058c673db525d0de97595.zip
Release 3.0.0.M01
-rw-r--r--contribute/_index.html5
-rw-r--r--documentation/_index.html6
-rw-r--r--documentation/reference/3.0.0.M01/html-single/css/highlight.css35
-rw-r--r--documentation/reference/3.0.0.M01/html-single/css/html.css305
-rw-r--r--documentation/reference/3.0.0.M01/html-single/faq.html439
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/admons/blank.pngbin0 -> 374 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/admons/caution.gifbin0 -> 743 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/admons/caution.pngbin0 -> 1250 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/admons/draft.pngbin0 -> 17454 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/admons/home.gifbin0 -> 321 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/admons/home.pngbin0 -> 1156 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/admons/important.gifbin0 -> 1003 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/admons/important.pngbin0 -> 1178 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/admons/next.gifbin0 -> 1083 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/admons/next.pngbin0 -> 1150 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/admons/note.gifbin0 -> 580 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/admons/note.pngbin0 -> 1178 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/admons/prev.gifbin0 -> 1118 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/admons/prev.pngbin0 -> 1132 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/admons/tip.gifbin0 -> 598 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/admons/tip.pngbin0 -> 1178 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/admons/toc-blank.pngbin0 -> 318 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/admons/toc-minus.pngbin0 -> 259 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/admons/toc-plus.pngbin0 -> 264 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/admons/up.gifbin0 -> 1089 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/admons/up.pngbin0 -> 1111 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/admons/warning.gifbin0 -> 613 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/admons/warning.pngbin0 -> 3993 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/bundle-states.pngbin0 -> 32803 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/callouts/1.pngbin0 -> 329 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/callouts/10.pngbin0 -> 361 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/callouts/11.pngbin0 -> 565 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/callouts/12.pngbin0 -> 617 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/callouts/13.pngbin0 -> 623 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/callouts/14.pngbin0 -> 411 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/callouts/15.pngbin0 -> 640 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/callouts/2.pngbin0 -> 353 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/callouts/3.pngbin0 -> 350 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/callouts/4.pngbin0 -> 345 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/callouts/5.pngbin0 -> 348 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/callouts/6.pngbin0 -> 355 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/callouts/7.pngbin0 -> 344 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/callouts/8.pngbin0 -> 357 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/callouts/9.pngbin0 -> 357 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/deadlock.pngbin0 -> 28787 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/i21-banner-rhs.jpgbin0 -> 10504 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/pde/find-install.pngbin0 -> 36406 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/pde/preferences.pngbin0 -> 29056 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/pde/select-pde-1.pngbin0 -> 37307 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/pde/select-pde-2.pngbin0 -> 41144 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/pde/select-plugins-view.pngbin0 -> 48800 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/pde/show-plugins.pngbin0 -> 73312 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/pde/spring-osgi-plugin.pngbin0 -> 122105 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/pde/springide-site-select.pngbin0 -> 103302 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/pde/springide-site.pngbin0 -> 21333 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/pde/target-select.pngbin0 -> 272451 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/s2-banner-rhs.pngbin0 -> 9627 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/s2_box_logo.pngbin0 -> 6877 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/spring-osgi-model.pngbin0 -> 63706 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/start-diagram.pngbin0 -> 27141 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/stop-diagram.pngbin0 -> 16343 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/visibility.pngbin0 -> 29996 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/images/xdev-spring_logo.jpgbin0 -> 37376 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html-single/index.html5423
-rw-r--r--documentation/reference/3.0.0.M01/html-single/issues.html42
-rw-r--r--documentation/reference/3.0.0.M01/html/app-deploy.html515
-rw-r--r--documentation/reference/3.0.0.M01/html/appendix-ack.html11
-rw-r--r--documentation/reference/3.0.0.M01/html/appendix-osgi-repo.html82
-rw-r--r--documentation/reference/3.0.0.M01/html/appendix-pde-integration.html74
-rw-r--r--documentation/reference/3.0.0.M01/html/appendix-roadmap.html40
-rw-r--r--documentation/reference/3.0.0.M01/html/appendix-schema.html931
-rw-r--r--documentation/reference/3.0.0.M01/html/appendix-security.html31
-rw-r--r--documentation/reference/3.0.0.M01/html/appendix-tips.html70
-rw-r--r--documentation/reference/3.0.0.M01/html/appendixes.html46
-rw-r--r--documentation/reference/3.0.0.M01/html/blueprint.html153
-rw-r--r--documentation/reference/3.0.0.M01/html/bnd-app-ctx.html365
-rw-r--r--documentation/reference/3.0.0.M01/html/bundles.html72
-rw-r--r--documentation/reference/3.0.0.M01/html/compendium.html399
-rw-r--r--documentation/reference/3.0.0.M01/html/css/highlight.css35
-rw-r--r--documentation/reference/3.0.0.M01/html/css/html.css305
-rw-r--r--documentation/reference/3.0.0.M01/html/eclipse-migration.html21
-rw-r--r--documentation/reference/3.0.0.M01/html/faq.html22
-rw-r--r--documentation/reference/3.0.0.M01/html/get-started.html83
-rw-r--r--documentation/reference/3.0.0.M01/html/images/admons/blank.pngbin0 -> 374 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/admons/caution.gifbin0 -> 743 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/admons/caution.pngbin0 -> 1250 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/admons/draft.pngbin0 -> 17454 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/admons/home.gifbin0 -> 321 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/admons/home.pngbin0 -> 1156 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/admons/important.gifbin0 -> 1003 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/admons/important.pngbin0 -> 1178 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/admons/next.gifbin0 -> 1083 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/admons/next.pngbin0 -> 1150 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/admons/note.gifbin0 -> 580 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/admons/note.pngbin0 -> 1178 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/admons/prev.gifbin0 -> 1118 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/admons/prev.pngbin0 -> 1132 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/admons/tip.gifbin0 -> 598 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/admons/tip.pngbin0 -> 1178 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/admons/toc-blank.pngbin0 -> 318 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/admons/toc-minus.pngbin0 -> 259 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/admons/toc-plus.pngbin0 -> 264 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/admons/up.gifbin0 -> 1089 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/admons/up.pngbin0 -> 1111 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/admons/warning.gifbin0 -> 613 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/admons/warning.pngbin0 -> 3993 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/bundle-states.pngbin0 -> 32803 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/callouts/1.pngbin0 -> 329 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/callouts/10.pngbin0 -> 361 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/callouts/11.pngbin0 -> 565 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/callouts/12.pngbin0 -> 617 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/callouts/13.pngbin0 -> 623 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/callouts/14.pngbin0 -> 411 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/callouts/15.pngbin0 -> 640 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/callouts/2.pngbin0 -> 353 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/callouts/3.pngbin0 -> 350 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/callouts/4.pngbin0 -> 345 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/callouts/5.pngbin0 -> 348 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/callouts/6.pngbin0 -> 355 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/callouts/7.pngbin0 -> 344 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/callouts/8.pngbin0 -> 357 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/callouts/9.pngbin0 -> 357 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/deadlock.pngbin0 -> 28787 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/i21-banner-rhs.jpgbin0 -> 10504 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/pde/find-install.pngbin0 -> 36406 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/pde/preferences.pngbin0 -> 29056 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/pde/select-pde-1.pngbin0 -> 37307 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/pde/select-pde-2.pngbin0 -> 41144 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/pde/select-plugins-view.pngbin0 -> 48800 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/pde/show-plugins.pngbin0 -> 73312 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/pde/spring-osgi-plugin.pngbin0 -> 122105 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/pde/springide-site-select.pngbin0 -> 103302 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/pde/springide-site.pngbin0 -> 21333 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/pde/target-select.pngbin0 -> 272451 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/s2-banner-rhs.pngbin0 -> 9627 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/s2_box_logo.pngbin0 -> 6877 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/spring-osgi-model.pngbin0 -> 63706 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/start-diagram.pngbin0 -> 27141 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/stop-diagram.pngbin0 -> 16343 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/visibility.pngbin0 -> 29996 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/images/xdev-spring_logo.jpgbin0 -> 37376 bytes
-rw-r--r--documentation/reference/3.0.0.M01/html/index.html31
-rw-r--r--documentation/reference/3.0.0.M01/html/introduction.html32
-rw-r--r--documentation/reference/3.0.0.M01/html/issues.html20
-rw-r--r--documentation/reference/3.0.0.M01/html/known-issues.html18
-rw-r--r--documentation/reference/3.0.0.M01/html/links.html19
-rw-r--r--documentation/reference/3.0.0.M01/html/preface.html32
-rw-r--r--documentation/reference/3.0.0.M01/html/reference.html59
-rw-r--r--documentation/reference/3.0.0.M01/html/requirements.html22
-rw-r--r--documentation/reference/3.0.0.M01/html/resources.html16
-rw-r--r--documentation/reference/3.0.0.M01/html/service-registry.html1789
-rw-r--r--documentation/reference/3.0.0.M01/html/spring-osgi-faq.html422
-rw-r--r--documentation/reference/3.0.0.M01/html/testing.html460
-rw-r--r--documentation/reference/3.0.0.M01/html/what-is-new.html122
-rw-r--r--documentation/reference/3.0.0.M01/html/why-Spring DM.html49
-rw-r--r--download/_index.html16
-rw-r--r--home/_index.html34
157 files changed, 12609 insertions, 42 deletions
diff --git a/contribute/_index.html b/contribute/_index.html
index 511dde1..a4ffe29 100644
--- a/contribute/_index.html
+++ b/contribute/_index.html
@@ -13,7 +13,10 @@
All of our source code resides in git:
<ul>
<li>
- Web access: <a href="http://git.eclipse.org/c/gemini.blueprint/org.eclipse.gemini.blueprint.git/tree">http://git.eclipse.org/c/gemini.blueprint/org.eclipse.gemini.blueprint.git/tree</a>
+ Web access: <a href="https://git.eclipse.org/c/gemini.blueprint/org.eclipse.gemini.blueprint.git/tree">https://git.eclipse.org/c/gemini.blueprint/org.eclipse.gemini.blueprint.git/tree</a>
+ </li>
+ <li>
+ Github: <a href="https://github.com/eclipse/gemini.blueprint">https://github.com/eclipse/gemini.blueprint</a>
</li>
<li>
Anonymous: git clone git://git.eclipse.org/gitroot/gemini.blueprint/org.eclipse.gemini.blueprint.git
diff --git a/documentation/_index.html b/documentation/_index.html
index ce553d1..1882685 100644
--- a/documentation/_index.html
+++ b/documentation/_index.html
@@ -2,9 +2,9 @@
<p>
<ul>
- <li><a href="http://www.eclipse.org/gemini/blueprint/documentation/reference/2.1.0.RELEASE/html/index.html">Reference documentation</a></li>
- <li><a href="http://www.eclipse.org/gemini/blueprint/documentation/reference/2.1.0.RELEASE/html/faq.html">FAQ</a></li>
- <li>Latest release <a href="http://www.eclipse.org/gemini/blueprint/documentation/reference/2.1.0.RELEASE/html/index.html">reference documentation</a></li>
+ <li><a href="http://www.eclipse.org/gemini/blueprint/documentation/reference/3.0.0.M01/html-single/index.html">Reference documentation</a></li>
+ <li><a href="http://www.eclipse.org/gemini/blueprint/documentation/reference/3.0.0.M01/html-single/faq.html">FAQ</a></li>
+ <li>Latest release <a href="http://www.eclipse.org/gemini/blueprint/documentation/reference/3.0.0.M01/html-single/index.html">reference documentation</a></li>
</ul>
</p>
diff --git a/documentation/reference/3.0.0.M01/html-single/css/highlight.css b/documentation/reference/3.0.0.M01/html-single/css/highlight.css
new file mode 100644
index 0000000..ffefef7
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/css/highlight.css
@@ -0,0 +1,35 @@
+/*
+ code highlight CSS resemblign the Eclipse IDE default color schema
+ @author Costin Leau
+*/
+
+.hl-keyword {
+ color: #7F0055;
+ font-weight: bold;
+}
+
+.hl-comment {
+ color: #3F5F5F;
+ font-style: italic;
+}
+
+.hl-multiline-comment {
+ color: #3F5FBF;
+ font-style: italic;
+}
+
+.hl-tag {
+ color: #3F7F7F;
+}
+
+.hl-attribute {
+ color: #7F007F;
+}
+
+.hl-value {
+ color: #2A00FF;
+}
+
+.hl-string {
+ color: #2A00FF;
+} \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html-single/css/html.css b/documentation/reference/3.0.0.M01/html-single/css/html.css
new file mode 100644
index 0000000..dd2ab69
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/css/html.css
@@ -0,0 +1,305 @@
+@IMPORT url("highlight.css");
+
+body {
+ text-align: justify;
+ margin-right: 2em;
+ margin-left: 2em;
+}
+
+a,
+a[accesskey^="h"],
+a[accesskey^="n"],
+a[accesskey^="u"],
+a[accesskey^="p"] {
+ font-family: Verdana, Arial, helvetica, sans-serif;
+ font-size: 12px;
+ color: #003399;
+}
+
+a:active {
+ color: #003399;
+}
+
+a:visited {
+ color: #888888;
+}
+
+p {
+ font-family: Verdana, Arial, sans-serif;
+}
+
+dt {
+ font-family: Verdana, Arial, sans-serif;
+ font-size: 12px;
+}
+
+p, dl, dt, dd, blockquote {
+ color: #000000;
+ margin-bottom: 3px;
+ margin-top: 3px;
+ padding-top: 0;
+}
+
+ol, ul, p {
+ margin-top: 6px;
+ margin-bottom: 6px;
+}
+
+p, blockquote {
+ font-size: 90%;
+}
+
+p.releaseinfo {
+ font-size: 100%;
+ font-weight: bold;
+ font-family: Verdana, Arial, helvetica, sans-serif;
+ padding-top: 10px;
+}
+
+p.pubdate {
+ font-size: 120%;
+ font-weight: bold;
+ font-family: Verdana, Arial, helvetica, sans-serif;
+}
+
+td {
+ font-size: 80%;
+}
+
+td, th, span {
+ color: #000000;
+}
+
+td[width^="40%"] {
+ font-family: Verdana, Arial, helvetica, sans-serif;
+ font-size: 12px;
+ color: #003399;
+}
+
+table[summary^="Navigation header"] tbody tr th[colspan^="3"] {
+ font-family: Verdana, Arial, helvetica, sans-serif;
+}
+
+blockquote {
+ margin-right: 0;
+}
+
+h1, h2, h3, h4, h6 {
+ color: #000000;
+ font-weight: 500;
+ margin-top: 0;
+ padding-top: 14px;
+ font-family: Verdana, Arial, helvetica, sans-serif;
+ margin-bottom: 0;
+}
+
+h2.title {
+ font-weight: 800;
+ margin-bottom: 8px;
+}
+
+h2.subtitle {
+ font-weight: 800;
+ margin-bottom: 20px;
+}
+
+.firstname, .surname {
+ font-size: 12px;
+ font-family: Verdana, Arial, helvetica, sans-serif;
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+ border: 1px black;
+ empty-cells: hide;
+ margin: 10px 0 30px 50px;
+ width: 90%;
+}
+
+div.table {
+ margin: 30px 0 10px 0;
+ border: 1px dashed gray;
+ padding: 10px;
+}
+
+div .table-contents table {
+ border: 1px solid black;
+}
+
+div.table > p.title {
+ padding-left: 10px;
+}
+
+table[summary^="Navigation footer"] {
+ border-collapse: collapse;
+ border-spacing: 0;
+ border: 1px black;
+ empty-cells: hide;
+ margin: 0px;
+ width: 100%;
+}
+
+table[summary^="Note"],
+table[summary^="Warning"],
+table[summary^="Tip"] {
+ border-collapse: collapse;
+ border-spacing: 0;
+ border: 1px black;
+ empty-cells: hide;
+ margin: 10px 0px 10px -20px;
+ width: 100%;
+}
+
+td {
+ padding: 4pt;
+ font-family: Verdana, Arial, helvetica, sans-serif;
+}
+
+div.warning TD {
+ text-align: justify;
+}
+
+h1 {
+ font-size: 150%;
+}
+
+h2 {
+ font-size: 110%;
+}
+
+h3 {
+ font-size: 100%; font-weight: bold;
+}
+
+h4 {
+ font-size: 90%; font-weight: bold;
+}
+
+h5 {
+ font-size: 90%; font-style: italic;
+}
+
+h6 {
+ font-size: 100%; font-style: italic;
+}
+
+tt {
+ font-size: 110%;
+ font-family: "Courier New", Courier, monospace;
+ color: #000000;
+}
+
+.navheader, .navfooter {
+ border: none;
+}
+
+div.navfooter table {
+ border-style: dashed;
+ border-color: gray;
+ border-width: 1px 1px 1px 1px;
+ background-color: #cde48d;
+}
+
+pre {
+ font-size: 110%;
+ padding: 5px;
+ border-style: solid;
+ border-width: 1px;
+ border-color: #CCCCCC;
+ background-color: #f3f5e9;
+}
+
+ul, ol, li {
+ list-style: disc;
+}
+
+hr {
+ width: 100%;
+ height: 1px;
+ background-color: #CCCCCC;
+ border-width: 0;
+ padding: 0;
+}
+
+.variablelist {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ margin: 0;
+}
+
+.term {
+ font-weight:bold;
+}
+
+.mediaobject {
+ padding-top: 30px;
+ padding-bottom: 30px;
+}
+
+.legalnotice {
+ font-family: Verdana, Arial, helvetica, sans-serif;
+ font-size: 12px;
+ font-style: italic;
+}
+
+.sidebar {
+ float: right;
+ margin: 10px 0 10px 30px;
+ padding: 10px 20px 20px 20px;
+ width: 33%;
+ border: 1px solid black;
+ background-color: #F4F4F4;
+ font-size: 14px;
+}
+
+.property {
+ font-family: "Courier New", Courier, monospace;
+}
+
+a code {
+ font-family: Verdana, Arial, monospace;
+ font-size: 12px;
+}
+
+td code {
+ font-size: 110%;
+}
+
+div.note * td,
+div.tip * td,
+div.warning * td,
+div.calloutlist * td {
+ text-align: justify;
+ font-size: 100%;
+}
+
+.programlisting {
+ clear: both;
+}
+
+.programlisting .interfacename,
+.programlisting .literal,
+.programlisting .classname {
+ font-size: 95%;
+}
+
+.title .interfacename,
+.title .literal,
+.title .classname {
+ font-size: 130%;
+}
+
+/* everything in a <lineannotation/> is displayed in a coloured, comment-like font */
+.programlisting * .lineannotation,
+.programlisting * .lineannotation * {
+ color: green;
+}
+
+.question * p {
+ font-size: 100%;
+}
+
+.answer * p {
+ font-size: 100%;
+} \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html-single/faq.html b/documentation/reference/3.0.0.M01/html-single/faq.html
new file mode 100644
index 0000000..100b705
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/faq.html
@@ -0,0 +1,439 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Eclipse Gemini Blueprint</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="book"><div class="titlepage"><div><div><h1 class="title"><a name="d1020e1"></a>Eclipse Gemini Blueprint</h1></div><div><h2 class="subtitle">Frequently Asked Questions</h2></div><div><div class="authorgroup">
+ <div class="author"><h3 class="author"><span class="firstname">Costin</span> <span class="surname">Leau</span></h3><div class="affiliation">SpringSource</div></div>
+ </div></div><div><p class="releaseinfo">3.0.0.M01</p></div><div><p class="copyright">Copyright &copy; 2006 -, 2011 VMware Inc., Oracle Inc.</p></div><div><div class="legalnotice"><a name="d1020e11"></a>
+ <p>Documentation made available under the terms of the Eclipse Public License v1.0
+ and Apache License v2.0 which accompanies this distribution.
+ The Eclipse Public License is available at <a class="ulink" href="http://www.eclipse.org/legal/epl-v10.html" target="_top">http://www.eclipse.org/legal/epl-v10.html</a> and
+ the Apache License v2.0 is available at <a class="ulink" href="http://www.opensource.org/licenses/apache2.0.php" target="_top">http://www.opensource.org/licenses/apache2.0.php</a>.
+ You may elect to redistribute this code under either of these licenses.</p>
+ </div></div></div><hr></div><div class="toc"><dl class="toc"><dt><span class="chapter"><a href="#spring-osgi-faq">1. Frequently Asked Questions</a></span></dt><dd><dl><dt><span class="section"><a href="#eclipse-springdm">1.1. What's the relationship between Spring Dynamic Modules and Gemini Blueprint?</a></span></dt><dt><span class="section"><a href="#name-change">1.2. What happened to "Spring OSGi" project name?</a></span></dt><dt><span class="section"><a href="#internal-package">1.3. Why aren't there any javadocs on <code class="literal">*.internal.*</code>?</a></span></dt><dt><span class="section"><a href="#requirements">1.4. What are Gemini Blueprint requirements?</a></span></dt><dt><span class="section"><a href="#other-module-frameworks">1.5. Are there plans to support other dynamic module frameworks (such as the JSR 277 extensions in Java 7)?</a></span></dt><dt><span class="section"><a href="#restricted-environments">1.6. Will Gemini Blueprint work in restricted environments (such as small/mobile devices)?</a></span></dt><dt><span class="section"><a href="#supported-osgi-platforms">1.7. What OSGi platforms are supported?</a></span></dt><dt><span class="section"><a href="#osgi-intro">1.8. Where can I learn about OSGi?</a></span></dt><dt><span class="section"><a href="#building-the-sources">1.9. I have problems building the sources. What can I do?</a></span></dt><dt><span class="section"><a href="#logging">1.10. How can I use logging in OSGi?</a></span></dt><dt><span class="section"><a href="#commons-logging">1.11. If you use the commons-logging API, why rely on SLF4J and
+ not the commons-logging jar?</a></span></dt><dt><span class="section"><a href="#getting-commons-logging-to-work">1.12. I have to use commons-logging, what can I do?</a></span></dt><dt><span class="section"><a href="#logging-impl-choice">1.13. Why don't you use the OSGi logging service/[insert your favourite
+ logging library in here]?</a></span></dt><dt><span class="section"><a href="#osgi-wrapping">1.14. I have to use [insert name] library/framework inside. What can I do?</a></span></dt><dt><span class="section"><a href="#jdk-crippled-jta-api">1.15. I keep getting <span class="emphasis"><em>java.lang.NoClassDefFoundError: javax/transaction/...</em></span> when trying to do data access..</a></span></dt><dt><span class="section"><a href="#incomplete-osgi-jar">1.16. When doing integration testing I receive <span class="emphasis"><em>java.lang.NoClassDefFoundError: org.osgi.vendor.framework property not set</em></span>... </a></span></dt><dt><span class="section"><a href="#auto-export-visibility">1.17. The autoExport option doesn't work properly!</a></span></dt><dt><span class="section"><a href="#junit382-serialization">1.18. When using Gemini Blueprint integration testing I get an exception about serialVersionUID. What is the problem?</a></span></dt><dt><span class="section"><a href="#pde-errors">1.19. I'm using Eclipse PDE and I started getting some weird exceptions/behaviour. What's the matter?</a></span></dt><dt><span class="section"><a href="#upgrade-to-1.1">1.20. I'm upgrading to Spring DM 1.1 but now I get some ClassNotFoundExceptions. What has changed?</a></span></dt><dt><span class="section"><a href="#proxy-equality">1.21. I've noticed that objects imported by Gemini Blueprint are not always equal to the raw target service. Why is that?</a></span></dt><dt><span class="section"><a href="#static-collections">1.22. My Gemini Blueprint collection doesn't change even though the number of OSGi service changes. What's wrong?</a></span></dt><dt><span class="section"><a href="#update-to-1.2">1.23. I have upgraded to Gemini Blueprint but my custom extender/web extender configuration doesn't work anymore. What has changed?</a></span></dt><dt><span class="section"><a href="#linkage-error">1.24. I get a <code class="literal">java.lang.LinkageError: loader constraint violation</code> if I use Gemini Blueprint. Things work fine with vanilla OSGi.
+ What's wrong?</a></span></dt><dt><span class="section"><a href="#blueprint">1.25. What can I use Gemini Blueprint with the Blueprint Container spec? What's the relationship between the two? Are the they compatible?
+ Are there any differences?</a></span></dt><dt><span class="section"><a href="#kf-2.3-boot-delegation">1.26. I'm using Knopflerfish 2.3.x and I have a lot of visibility exception. How can I fix this?</a></span></dt><dt><span class="section"><a href="#pde-cycles">1.27. I'm using Gemini Blueprint and Spring jars inside Eclipse PDE but I get an error about cycle dependency errors. What's wrong?</a></span></dt></dl></dd></dl></div>
+
+
+
+
+ <div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="spring-osgi-faq"></a>Chapter&nbsp;1.&nbsp;Frequently Asked Questions</h1></div></div></div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="eclipse-springdm"></a>1.1.&nbsp;What's the relationship between Spring Dynamic Modules and Gemini Blueprint?</h2></div></div></div>
+
+
+ <p>Eclipse Gemini Blueprint is based on Spring Dynamic Modules 2.0 which has been migrated
+ to the Eclipse Foundation. While the name and the packages have changed the internals are still the same; one
+ will find both names are used interchangeably (especially by those that have used Spring DM for a while).
+ Further more, all Spring DM applications are supported by Gemini Blueprint (do pay attention to the migration guide available
+ <a class="ulink" href="http://www.eclipse.org/gemini/blueprint/documentation/migration/" target="_top">here</a>).</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="name-change"></a>1.2.&nbsp;What happened to "Spring OSGi" project name?</h2></div></div></div>
+
+
+ <p>The OSGi term is a trademark belonging to <a class="ulink" href="http://www.osgi.org/" target="_top">The OSGi Alliance</a>. In order to
+ comply with their guidelines, it was decided that the project name
+ be changed to "Spring Dynamic Modules for OSGi Service Platforms"
+ (aka Spring DM). The new name is still pending final approval
+ by the OSGi Alliance.
+ The name change was the result of an amicable discussion between
+ the OSGi Alliance and Interface21. Interface21 is a member of the
+ OSGi Alliance, and the OSGi Alliance remain very supportive of
+ the project.
+ Note that Spring Dynamic Modules has moved to Eclipse Foundation to form Gemini Blueprint project (see above)</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="internal-package"></a>1.3.&nbsp;Why aren't there any javadocs on <code class="literal">*.internal.*</code>?</h2></div></div></div>
+
+
+ <p><code class="literal">org.eclipse.gemini.blueprint.*.internal</code> packages are
+ meant (as the name implies) to be private and non-public package. Thus,
+ there is no documentation, support or compatibility guarantee for
+ them. In fact, the Gemini Blueprint bundle does not even export
+ them to prevent accidental usage.</p>
+
+ <p>If you find classes under this package, which you really, really
+ depend on, then consider raising an issue on <a class="ulink" href="http://opensource.atlassian.com/projects/spring/browse/OSGI" target="_top">JIRA</a>
+ to have access opened up.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="requirements"></a>1.4.&nbsp;What are Gemini Blueprint requirements?</h2></div></div></div>
+
+ <p>
+ Gemini Blueprint requires at least Java 1.7, OSGi 4.1+ and Spring 4.2
+ It might be possible to use Gemini Blueprint on a lower <a class="ulink" href="http://wiki.eclipse.org/index.php/Execution_Environments" target="_top">execution environment</a>
+ (such <a class="ulink" href="http://java.sun.com/products/cdc/" target="_top">CDC</a>) but
+ it is not guaranteed to work.
+ Both Spring and Gemini Blueprint rely on <a class="ulink" href="http://java.sun.com/products/javabeans/" target="_top">
+ JavaBeans</a> (java.beans package) which, unfortunately, is missing in most
+ restricted environments. See this <a class="ulink" href="http://java.sun.com/products/cdc/reference/cdc_packages.pdf" target="_top">PDF</a> for information on CDC profiles.
+ Note that, Spring 4.2 also requires Java 1.7.
+ </p>
+ <p>
+ Nevertheless, experiences and feedback on running Gemini Blueprint in restricted environments
+ is welcomed - please use our mailing list.
+ </p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="other-module-frameworks"></a>1.5.&nbsp;Are there plans to support other dynamic module frameworks (such as the JSR 277 extensions in Java 7)?</h2></div></div></div>
+
+ <p>There are no current plans to support other dynamic module frameworks.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="restricted-environments"></a>1.6.&nbsp;Will Gemini Blueprint work in restricted environments (such as small/mobile devices)?</h2></div></div></div>
+
+ <p>See the <a class="link" href="#requirements" title="1.4.&nbsp;What are Gemini Blueprint requirements?">requirements</a> entry. The OSGi Service Platform is designed to run in
+ very constrained environments however, Gemini Blueprint depends on the Spring Framework v4.2.x which in turn depends on
+ JDK 1.7. Thus Gemini Blueprint cannot run on more constrained environments (such as the OSGi Minimum Execution Environment)
+ unless Spring itself also runs in those environments. There are no current plans to make such a version of Spring.
+ However as existing OSGi developers adopt Gemini Blueprint to simplify creation of OSGi applications and the user
+ base expands, the target audience can cover domains much broader than <span class="emphasis"><em>enterprise Java applications</em></span>.
+ In time this could create a large enough demand to justify the investment needed to allow Spring and Gemini Blueprint to run in
+ restricted environments.</p>
+ </div>
+
+
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="supported-osgi-platforms"></a>1.7.&nbsp;What OSGi platforms are supported?</h2></div></div></div>
+
+ <p>
+ Gemini Blueprint requires an OSGi 4.2 (though it might work on OSGi 4.0 and 4.1) platform. The framework has been tested
+ on <a class="ulink" href="http://www.eclipse.org/equinox/" target="_top">Equinox</a>, <a class="ulink" href="http://felix.apache.org" target="_top">Felix</a>
+ and <a class="ulink" href="http://www.knopflerfish.org/" target="_top">Knopflerfish</a>
+ - in fact, the test suite is <a class="ulink" href="http://build.springframework.org:8085/bamboo/browse/OSGI" target="_top">ran</a>
+ against all of them as part of our continuous integration process.
+ </p>
+ </div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="osgi-intro"></a>1.8.&nbsp;Where can I learn about OSGi?</h2></div></div></div>
+
+ <p>
+ The best place to start is The Osgi Alliance <a class="ulink" href="http://www.osgi.org/" target="_top">home</a> and
+ <a class="ulink" href="http://www2.osgi.org/Main/HomePage" target="_top">developer</a> pages which
+ provide the OSGi specifications, introductions and many links and blogs on the topic.
+ Please see the reference documentation appendix for more information.
+ </p>
+
+ <p>
+ In addition, all OSGi implementation websites host detailed, step-by-step tutorials and introduction.
+ </p>
+
+ <p>
+ If you discover any additional materials useful for OSGi newbies, please let us know to update the list.
+ Thank you.
+ </p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="building-the-sources"></a>1.9.&nbsp;I have problems building the sources. What can I do?</h2></div></div></div>
+
+ <p>Please see the file called <code class="literal">readme-building.txt</code> found in the source tree.
+ </p>
+ </div>
+
+
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="logging"></a>1.10.&nbsp;How can I use logging in OSGi?</h2></div></div></div>
+
+
+ <p>OSGi platforms do not change the way libraries work, it just
+ enforces tighter classloading. Thus, you can, in most of the cases,
+ use the same logging strategy used in non-OSGi environments.</p>
+
+ <p>Spring (and Gemini Blueprint) use internally the <a class="ulink" href="http://commons.apache.org/logging/" target="_top">commons-logging API</a>
+ which acts as an "ultra-thin bridge between different logging
+ implementations". In OSGi, just like in a non-OSGi environment, Spring
+ and Gemini Blueprint delegate all logging (including initialisation) to the
+ actual commons-logging API implementation.</p>
+
+ <p>Out of the box, <a class="ulink" href="http://www.slf4j.org/" target="_top">SLF4J</a> library is provided, which
+ shares the same purpose as commons-logging but without the
+ class loading discovery mechanism (that causes loading issues), using
+ static wiring (see the SLF4J site for more info). To use slf4j, make sure
+ you use: <code class="literal">slf4j-api-XXX.jar</code>, <code class="literal">jcl104-overslf4j-XXX.jar</code>
+ and <code class="literal">slf4j-log4j-XXX.jar</code> (where XXX stands for the slf4j version).
+ The last jar provides the static wiring between slf4j and log4j - if another implementation
+ is desired (such as jdk14), then a different jar is required (for the jdk14 that would be
+ slf4j-jdk14-XXX.jar) - see the official SLF4J site for more information.
+ Please see <a class="link" href="#commons-logging" title="1.11.&nbsp;If you use the commons-logging API, why rely on SLF4J and not the commons-logging jar?">this
+ question</a> for more details on why commons-logging jar is not
+ used.</p>
+
+ <p>Gemini Blueprint uses SLF4J on top of <a class="ulink" href="http://logging.apache.org/log4j/" target="_top">Log4J</a> but this can be
+ easily changed. As part of log4j initialisation, a
+ <code class="literal">log4j.properties</code> or <code class="literal">log4j.xml</code>
+ configuration fille needs to be present in the bundle classpath. This
+ means that the configuration file has to be part of your bundle or one
+ of its attached fragments. Besides SLF4J, for another OSGi-aware
+ solution, one can try <a class="ulink" href="http://wiki.ops4j.org/dokuwiki/doku.php?id=pax:logging" target="_top">Pax
+ Logging</a>.</p>
+
+ <p>To learn more about log4j setup process, follow this <a class="ulink" href="http://logging.apache.org/log4j/1.2/manual.html" target="_top">link</a>.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="commons-logging"></a>1.11.&nbsp;If you use the commons-logging API, why rely on SLF4J and
+ not the commons-logging jar?</h2></div></div></div>
+
+
+ <p>The commons-logging project provides the commons-logging API
+ (<code class="literal">commons-logging-api-nn.jar</code>) along with an
+ implementation (<code class="literal">commons-logging-adapters-nn.jar</code>)
+ that provides a wrapper between the API and the actual logging libraries
+ used underneath (such as log4j, java.util.logging, etc). However, in
+ order to determine what implementation should be used, commons-logging
+ library tries to do some classloading-based discovery that is fragile
+ and can fail unexpectedly. In an strict classloading environment such
+ as OSGi, this mechanism adds unnecessary complexity - that's why we
+ decided to use SFL4J which is not just simpler and actively maintained
+ but is also OSGi-friendly out of the box.</p>
+
+ <p>For more information about commons-logging classloading
+ problems, see these links: <a class="ulink" href="http://radio.weblogs.com/0122027/2003/08/15.html" target="_top">#1</a>
+ <a class="ulink" href="http://www.qos.ch/logging/thinkAgain.jsp" target="_top">#2</a></p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="getting-commons-logging-to-work"></a>1.12.&nbsp;I have to use commons-logging, what can I do?</h2></div></div></div>
+
+
+ <p>If you have to use commons-logging (for example the jar is required by certain bundles)
+ then try using the most recent version commons-logging version (1.1+) as it provides more options
+ on the discovery process. Below are some settings that can be used to make commons-logging work
+ inside an OSGi environment:</p>
+
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <p>1.0.x</p>
+ <p>
+ Unfortunately, commons-logging 1.0.x uses the thread context class loader (TCCL) always for <a class="ulink" href="http://commons.apache.org/logging/commons-logging-1.1/tech.html#A_Short_Theory_Guide_To_JCL" target="_top">loading
+ loggers</a> implementations. Inside an OSGi environment, the TCCL is undefined and cannot be relied upon.
+ Since managing the TCCL is almost impossible as most loggers are defined as static fields that need to
+ resolved on class loading, using a different <code class="classname">LogFactory</code> is advised. One can use
+ the <span class="emphasis"><em>org.apache.commons.logging.LogFactory</em></span> system property to specify a different
+ log factory however, the commons-logging bundle should be able to load this class.</p>
+ </li><li class="listitem">
+ <p>1.1.x</p>
+ <p>If using commons logging 1.1.x, one can turn off the tccl usage through <span class="emphasis"><em>use_tccl</em></span>
+ property, part of the <span class="emphasis"><em>commons-logging.properties</em></span> file.
+ <a class="ulink" href="http://commons.apache.org/logging/commons-logging-1.1/troubleshooting.html" target="_top">http://commons.apache.org/logging/commons-logging-1.1/troubleshooting.html</a>. Additionally,
+ 1.1.x provides several system properties (such as <span class="emphasis"><em>org.apache.commons.logging.Log.allowFlawedContext</em></span>,
+ <span class="emphasis"><em>org.apache.commons.logging.Log.allowFlawedDiscovery</em></span> and
+ <span class="emphasis"><em>org.apache.commons.logging.Log.allowFlawedHierarchy</em></span>) that can change the behavious of the discovery process.
+ See the <a class="ulink" href="http://commons.apache.org/logging/apidocs/org/apache/commons/logging/impl/LogFactoryImpl.html" target="_top">LogFactoryImpl</a>
+ javadoc for more details.</p>
+ </li></ul></div>
+
+ <p>In our tests, commons logging 1.1.x can be used with reasonable success inside OSGi. We haven't been able to find a generic
+ configuration for commons logging 1.0.x that works and that does not rely on fragile hacks dependent on the running environment.</p>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="logging-impl-choice"></a>1.13.&nbsp;Why don't you use the OSGi logging service/[insert your favourite
+ logging library in here]?</h2></div></div></div>
+
+
+ <p>It is completely up to you what logging implementation you want
+ Gemini Blueprint to use. To route log messages to the OSGi logging service,
+ just use a commons-logging API implementation that delegates to the
+ OSGi logging service, such as Pax Logging.</p>
+ </div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="osgi-wrapping"></a>1.14.&nbsp;I have to use [insert name] library/framework inside. What can I do?</h2></div></div></div>
+
+
+ <p>
+ OSGi requires JARs to contain certain <code class="literal">MANIFEST.MF</code> entries which indicate what classes are
+ required and shared by each archive. This means that <span class="emphasis"><em>tradition</em></span> jars cannot be used inside an OSGi environment.
+ To solve the problem one can:
+ </p>
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <p>Use a repository of pre-wrapped libraries such as <a class="ulink" href="http://www.eclipse.org/orbit/" target="_top">Orbit</a>,
+ <a class="ulink" href="http://felix.apache.org/site/apache-felix-commons.html" target="_top">Felix Commons</a> or Knopflerfish <a class="ulink" href="http://www.knopflerfish.org/repo/index.html" target="_top">repository</a>.
+ Gemini Blueprint uses the SpringSource Enterprise <a class="ulink" href="http://www.springsource.com/repository/app/" target="_top">Bundle Repository</a>
+ for its dependencies, which you might find useful. Additionally, for artifacts that have not yet made it into SpringSource Repository,
+ Gemini Blueprint provides a small, temporary (Amazon S3)
+ Maven repository (<a class="ulink" href="http://s3.amazonaws.com/maven.springframework.org/osgi" target="_top">link</a> |
+ <a class="ulink" href="http://s3browse.com/explore/maven.springframework.org/osgi/" target="_top">browser-friendly link</a>) for its internal usage.</p>
+ </li><li class="listitem">
+ <p>Wrap the necessary jars with proper OSGi manifest. While this can be done by hand, we strongly recommend Peter Kriens
+ excellent <a class="ulink" href="http://www.aqute.biz/Code/Bnd" target="_top">bnd</a> tool which can do this for you automatically.
+ For Maven, see Felix <a class="ulink" href="http://felix.apache.org/site/maven-bundle-plugin-bnd.html" target="_top">
+ maven-bundle-plugin</a>.
+ </p>
+ </li><li class="listitem">
+ <p>Include the jar inside your OSGi bundle and include it in the bundle classpath through <span class="emphasis"><em>Bundle-ClassPath</em></span>
+ directive. See the OSGi specification for more information.</p>
+ </li></ul></div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="jdk-crippled-jta-api"></a>1.15.&nbsp;I keep getting <span class="emphasis"><em>java.lang.NoClassDefFoundError: javax/transaction/...</em></span> when trying to do data access..</h2></div></div></div>
+
+
+ <p>
+ This problem is likely to be caused by bad class wiring. All 1.3+ JDKs include incomplete <span class="emphasis"><em>javax.transaction</em></span>
+ and <span class="emphasis"><em>javax.transaction.xa</em></span> packages for usage inside ORB environments. To address the problem, use a proper
+ JTA library which contains all the classes from the forementioned packages and exports them with a specific version to prevent
+ confusion.
+ </p>
+ <p>
+ Gemini Blueprint wraps JTA 1.1 library for OSGI environments which can be found at Spring snapshot repository. One can deploy this library
+ and specify version 1.1 for <span class="emphasis"><em>javax.transaction*</em></span> packages inside <span class="emphasis"><em>Import-Package</em></span> header.
+ By specifying the version, one can be sure that the proper package is used.
+ </p>
+ <p>
+ Note that JTA 1.1 is compatible with version 1.0.1.
+ </p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="incomplete-osgi-jar"></a>1.16.&nbsp;When doing integration testing I receive <span class="emphasis"><em>java.lang.NoClassDefFoundError: org.osgi.vendor.framework property not set</em></span>... </h2></div></div></div>
+
+
+ <p>Remove the official OSGi jars (osgi.jar or osgi-r4-core.jar) from the classpath and use only the actual OSGi platform (Equinox/Knopflerfish/Felix)
+ jars. The former provides only the public classes without an actual implementation and thus cannot be used during runtime, only during the compilation stage.
+ </p>
+ </div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="auto-export-visibility"></a>1.17.&nbsp;The autoExport option doesn't work properly!</h2></div></div></div>
+
+
+ <p>autoExport flag, part of the service exporter, will discover and
+ include for exporting only the <span class="emphasis"><em>visible</em></span> interfaces/classes implemented
+ by the service object. Consider class
+ <code class="literal">GenericApplicationContext</code> which implements among
+ others, interfaces <code class="literal">BeanFactory</code> (from
+ <code class="literal">org.springframework.beans.factory</code> package) and
+ <code class="literal">ResourceLoader</code>
+ (<code class="literal">org.springframework.core.io</code>).</p>
+
+ <p>
+ </p><div class="mediaobject" align="center"><img src="images/visibility.png" align="middle"><div class="caption">
+ <p>Class Hierarchy</p>
+ </div></div><p>
+ </p>
+
+ <p>Depending on your OSGi imports, the exporting bundle can see
+ only one of the packages, none or both. Based on these visibility
+ settings, the exporter will only export the classes that are 'known'
+ to the exporting bundle. For example, if the exporting bundle sees
+ <code class="literal">org.springframework.core.io</code> but not
+ <code class="literal">org.springframework.beans.factory</code>, the service will
+ be exported as a <code class="literal">ResourceLoader</code> but not as a
+ <code class="literal">BeanFactory</code>. In fact, exporting the object as a
+ <code class="literal">BeanFactory</code> will fail since the bundle doesn't see
+ this interface and thus doesn't know how to handle its contract.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="junit382-serialization"></a>1.18.&nbsp;When using Gemini Blueprint integration testing I get an exception about serialVersionUID. What is the problem?</h2></div></div></div>
+
+
+ <p>
+ This problem occurs on Spring DM versions up to 1.0 - consider upgrading to 1.0.1 or better. If you are stuck with 1.0 see below.
+ When running an integration test, Gemini Blueprint will duplicate the test instance and execute it inside OSGi. To avoid problems
+ like this one, make sure you are using the same libraries (with the same version) as Spring DM when running your test. This
+ particular problem for example is caused by a JUnit 3.8.2 vs 3.8.x serialization compatibility. Make sure that you are using
+ at least JUnit 3.8.2 for the execution of your tests.
+ </p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="pde-errors"></a>1.19.&nbsp;I'm using Eclipse PDE and I started getting some weird exceptions/behaviour. What's the matter?</h2></div></div></div>
+
+
+ <p>
+ Eclipse PDE uses Equinox OSGi platform underneath which (like other OSGi platforms) caches the bundles between re-runs. When
+ the cache is not properly updated, one can encounter strange behaviour (such as the new services/code being picked up)
+ or errors ranging from class versioning to linkage. Consider doing a complete clean build or, in case of Eclipse,
+ creating a new workspace or deleting the bundle folder (depends on each project settings but most users should find it at:
+ <code class="code">[workspace_dir]\.metadata\.plugins\org.eclipse.pde.core\OSGi\org.eclipse.osgi\bundles</code>).
+ </p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="upgrade-to-1.1"></a>1.20.&nbsp;I'm upgrading to Spring DM 1.1 but now I get some ClassNotFoundExceptions. What has changed?</h2></div></div></div>
+
+
+ <p>
+ In Spring DM 1.1 M2, the proxy infrastructure has been refined to avoid <span class="emphasis"><em>type leaks</em></span>, the usage of dynamic imports
+ or exposure of class loader chain delegation. If you encounter class visibility problems during the upgrade then it's likely you have
+ missing imports which were previously resolved as a side effect of Spring DM proxy weaving process.
+ </p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="proxy-equality"></a>1.21.&nbsp;I've noticed that objects imported by Gemini Blueprint are not always equal to the raw target service. Why is that?</h2></div></div></div>
+
+
+ <p>
+ To deal with dynamics, Gemini Blueprint creates proxies around the imported services. The proxies are classes (generated at runtime), different
+ from the target but able to intercept the calls made to it. Since a proxy is different then its target, comparing objects against it can
+ yield different results then when the comparison is done against the target. In most scenarios this is not a problem but there might be
+ corner cases where this contract matters. Since 1.1, Gemini Blueprint importer proxies implement <code class="interfacename">InfrastructureProxy</code>
+ interface (from Spring framework) which allow access to the raw target.
+ </p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="static-collections"></a>1.22.&nbsp;My Gemini Blueprint collection doesn't change even though the number of OSGi service changes. What's wrong?</h2></div></div></div>
+
+
+ <p>
+ Make sure the Gemini Blueprint collections are injected into object of compatible types (for example <code class="literal">list</code> into
+ <code class="interfacename">java.util.List</code> or <code class="interfacename">java.util.Collection</code>). If the types are not compatible,
+ the container will have to perform
+ <a class="ulink" href="http://static.springframework.org/spring/docs/2.5.x/reference/validation.html#beans-beans-conversion" target="_top">type conversion</a>,
+ transforming the Gemini Blueprint managed collection into a 'normal' one, unaware of the OSGi dynamics.
+ </p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="update-to-1.2"></a>1.23.&nbsp;I have upgraded to Gemini Blueprint but my custom extender/web extender configuration doesn't work anymore. What has changed?</h2></div></div></div>
+
+
+ <p>Since Spring 2.5.6, the symbolic names of the artifacts have changed slightly. Spring DM/Gemini Blueprint aligned its symbolic names as well with the
+ new patter since Spring DM 1.2.0 M2. Thus the prefix <code class="literal">org.springframework.bundle.osgi</code> has been changed to
+ <code class="literal">org.eclipse.gemini.blueprint</code>; for example Gemini BLueprint extender symbolic name was changed from
+ <code class="literal">org.springframework.bundle.osgi.extender</code> to <code class="literal">org.eclipse.gemini.blueprint.extender</code>
+ (notice the missing <code class="literal">bundle</code> word).
+ To fix this problem, change the reference to the old symbolic name (usually inside the fragments manifests or LDAP filters) to the new one.</p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="linkage-error"></a>1.24.&nbsp;I get a <code class="literal">java.lang.LinkageError: loader constraint violation</code> if I use Gemini Blueprint. Things work fine with vanilla OSGi.
+ What's wrong?</h2></div></div></div>
+
+
+ <p>Most likely the bundle imports do not identify all the transitive packages dependencies (through the <span class="emphasis"><em>uses</em></span> directive). Packages
+ imported from a bundle, can in turn, depend on other packages from other bundles - these are sometime called transitive or indirect dependencies. If
+ these are not properly identified, the OSGi platform cannot validate the wiring and allows multiple versions of the same class to be available inside the
+ same class space. This problem appears whether Gemini Blueprint is used or not. However, due to the usage of proxies inside Gemini Blueprint (which forces eager class loading
+ for the classes proxies), the class graph is evaluated at runtime causing the problem to occur early. With vanilla OSGi, the loading occurs lazy which means
+ the problem is going to occur at runtime rather then at startup.
+ To fix the problem, add the relevant transitive packages to the list of exported packages, either manually or automatically through tools such as
+ <a class="ulink" href="http://www.springsource.org/bundlor" target="_top">Bundlor</a> or <a class="ulink" href="http://www.aqute.biz/Code/Bnd" target="_top">Bnd</a>.
+ For more information on the <code class="literal">uses</code> directive please see the OSGi spec,
+ section 3.6.4 or <a class="ulink" href="http://blog.springsource.com/2008/10/20/understanding-the-osgi-uses-directive/" target="_top">this</a> SpringSource blog entry.
+ </p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="blueprint"></a>1.25.&nbsp;What can I use Gemini Blueprint with the Blueprint Container spec? What's the relationship between the two? Are the they compatible?
+ Are there any differences?</h2></div></div></div>
+
+
+ <p>Gemini Blueprint (Spring DM 2.0) is the Reference Implementation for OSGi 4.2 Blueprint Container specification. Simply deploy your Blueprint bundles in a platform
+ where Gemini Blueprint is already activated and you should be done. For more information about Blueprint and Gemini Blueprint, please see the
+ <span class="emphasis"><em>Blueprint Container</em></span> chapter in the reference documentation.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="kf-2.3-boot-delegation"></a>1.26.&nbsp;I'm using Knopflerfish 2.3.x and I have a lot of visibility exception. How can I fix this?</h2></div></div></div>
+
+
+ <p>Since 2.3.0, Knopflerfish changed the way it does bootpath delegation which causes classes to be loaded from inside and outside OSGi. Set
+ the system property <code class="literal">org.knopflerfish.framework.strictbootclassloading</code> to <code class="literal">true</code> before starting up the Knopflerfish
+ platform to prevent this from happening. See Knopflerfish 2.3.x release <a class="ulink" href="http://www.knopflerfish.org/release_notes_2.3.html" target="_top">notes</a> for more
+ information.</p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="pde-cycles"></a>1.27.&nbsp;I'm using Gemini Blueprint and Spring jars inside Eclipse PDE but I get an error about cycle dependency errors. What's wrong?</h2></div></div></div>
+
+
+ <p>Some of the Spring jars (optionally) import each other packages for bootstrapping reasons. While cycles between jars are allowed and
+ supported by the OSGi platform, by default, Eclipse PDE complains about them. Since Eclipse Galileo, it is possible to enable binary cycles
+ in a target platform. allowing the build to compile. For more information, see
+ <a class="ulink" href="http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.pde.doc.user/guide/tools/export_wizards/export_plugins.htm" target="_top">this</a>
+ entry from the Eclipse Reference Guide.</p>
+ </div>
+ </div>
+</div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html-single/images/admons/blank.png b/documentation/reference/3.0.0.M01/html-single/images/admons/blank.png
new file mode 100644
index 0000000..764bf4f
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/admons/blank.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/admons/caution.gif b/documentation/reference/3.0.0.M01/html-single/images/admons/caution.gif
new file mode 100644
index 0000000..d9f5e5b
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/admons/caution.gif
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/admons/caution.png b/documentation/reference/3.0.0.M01/html-single/images/admons/caution.png
new file mode 100644
index 0000000..5b7809c
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/admons/caution.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/admons/draft.png b/documentation/reference/3.0.0.M01/html-single/images/admons/draft.png
new file mode 100644
index 0000000..0084708
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/admons/draft.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/admons/home.gif b/documentation/reference/3.0.0.M01/html-single/images/admons/home.gif
new file mode 100644
index 0000000..6784f5b
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/admons/home.gif
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/admons/home.png b/documentation/reference/3.0.0.M01/html-single/images/admons/home.png
new file mode 100644
index 0000000..cbb711d
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/admons/home.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/admons/important.gif b/documentation/reference/3.0.0.M01/html-single/images/admons/important.gif
new file mode 100644
index 0000000..6795d9a
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/admons/important.gif
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/admons/important.png b/documentation/reference/3.0.0.M01/html-single/images/admons/important.png
new file mode 100644
index 0000000..ad57f6f
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/admons/important.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/admons/next.gif b/documentation/reference/3.0.0.M01/html-single/images/admons/next.gif
new file mode 100644
index 0000000..aa1516e
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/admons/next.gif
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/admons/next.png b/documentation/reference/3.0.0.M01/html-single/images/admons/next.png
new file mode 100644
index 0000000..45835bf
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/admons/next.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/admons/note.gif b/documentation/reference/3.0.0.M01/html-single/images/admons/note.gif
new file mode 100644
index 0000000..f329d35
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/admons/note.gif
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/admons/note.png b/documentation/reference/3.0.0.M01/html-single/images/admons/note.png
new file mode 100644
index 0000000..ad57f6f
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/admons/note.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/admons/prev.gif b/documentation/reference/3.0.0.M01/html-single/images/admons/prev.gif
new file mode 100644
index 0000000..64ca8f3
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/admons/prev.gif
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/admons/prev.png b/documentation/reference/3.0.0.M01/html-single/images/admons/prev.png
new file mode 100644
index 0000000..cf24654
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/admons/prev.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/admons/tip.gif b/documentation/reference/3.0.0.M01/html-single/images/admons/tip.gif
new file mode 100644
index 0000000..823f2b4
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/admons/tip.gif
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/admons/tip.png b/documentation/reference/3.0.0.M01/html-single/images/admons/tip.png
new file mode 100644
index 0000000..ad57f6f
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/admons/tip.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/admons/toc-blank.png b/documentation/reference/3.0.0.M01/html-single/images/admons/toc-blank.png
new file mode 100644
index 0000000..6ffad17
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/admons/toc-blank.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/admons/toc-minus.png b/documentation/reference/3.0.0.M01/html-single/images/admons/toc-minus.png
new file mode 100644
index 0000000..abbb020
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/admons/toc-minus.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/admons/toc-plus.png b/documentation/reference/3.0.0.M01/html-single/images/admons/toc-plus.png
new file mode 100644
index 0000000..941312c
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/admons/toc-plus.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/admons/up.gif b/documentation/reference/3.0.0.M01/html-single/images/admons/up.gif
new file mode 100644
index 0000000..aabc2d0
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/admons/up.gif
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/admons/up.png b/documentation/reference/3.0.0.M01/html-single/images/admons/up.png
new file mode 100644
index 0000000..07634de
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/admons/up.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/admons/warning.gif b/documentation/reference/3.0.0.M01/html-single/images/admons/warning.gif
new file mode 100644
index 0000000..c6acdec
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/admons/warning.gif
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/admons/warning.png b/documentation/reference/3.0.0.M01/html-single/images/admons/warning.png
new file mode 100644
index 0000000..ef3e10f
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/admons/warning.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/bundle-states.png b/documentation/reference/3.0.0.M01/html-single/images/bundle-states.png
new file mode 100644
index 0000000..323cdc2
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/bundle-states.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/callouts/1.png b/documentation/reference/3.0.0.M01/html-single/images/callouts/1.png
new file mode 100644
index 0000000..7d47343
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/callouts/1.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/callouts/10.png b/documentation/reference/3.0.0.M01/html-single/images/callouts/10.png
new file mode 100644
index 0000000..997bbc8
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/callouts/10.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/callouts/11.png b/documentation/reference/3.0.0.M01/html-single/images/callouts/11.png
new file mode 100644
index 0000000..ce47dac
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/callouts/11.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/callouts/12.png b/documentation/reference/3.0.0.M01/html-single/images/callouts/12.png
new file mode 100644
index 0000000..31daf4e
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/callouts/12.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/callouts/13.png b/documentation/reference/3.0.0.M01/html-single/images/callouts/13.png
new file mode 100644
index 0000000..14021a8
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/callouts/13.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/callouts/14.png b/documentation/reference/3.0.0.M01/html-single/images/callouts/14.png
new file mode 100644
index 0000000..64014b7
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/callouts/14.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/callouts/15.png b/documentation/reference/3.0.0.M01/html-single/images/callouts/15.png
new file mode 100644
index 0000000..0d65765
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/callouts/15.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/callouts/2.png b/documentation/reference/3.0.0.M01/html-single/images/callouts/2.png
new file mode 100644
index 0000000..5d09341
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/callouts/2.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/callouts/3.png b/documentation/reference/3.0.0.M01/html-single/images/callouts/3.png
new file mode 100644
index 0000000..ef7b700
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/callouts/3.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/callouts/4.png b/documentation/reference/3.0.0.M01/html-single/images/callouts/4.png
new file mode 100644
index 0000000..adb8364
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/callouts/4.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/callouts/5.png b/documentation/reference/3.0.0.M01/html-single/images/callouts/5.png
new file mode 100644
index 0000000..4d7eb46
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/callouts/5.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/callouts/6.png b/documentation/reference/3.0.0.M01/html-single/images/callouts/6.png
new file mode 100644
index 0000000..0ba694a
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/callouts/6.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/callouts/7.png b/documentation/reference/3.0.0.M01/html-single/images/callouts/7.png
new file mode 100644
index 0000000..472e96f
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/callouts/7.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/callouts/8.png b/documentation/reference/3.0.0.M01/html-single/images/callouts/8.png
new file mode 100644
index 0000000..5e60973
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/callouts/8.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/callouts/9.png b/documentation/reference/3.0.0.M01/html-single/images/callouts/9.png
new file mode 100644
index 0000000..a0676d2
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/callouts/9.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/deadlock.png b/documentation/reference/3.0.0.M01/html-single/images/deadlock.png
new file mode 100644
index 0000000..fd49b83
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/deadlock.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/i21-banner-rhs.jpg b/documentation/reference/3.0.0.M01/html-single/images/i21-banner-rhs.jpg
new file mode 100644
index 0000000..8b24a77
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/i21-banner-rhs.jpg
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/pde/find-install.png b/documentation/reference/3.0.0.M01/html-single/images/pde/find-install.png
new file mode 100644
index 0000000..ace425f
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/pde/find-install.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/pde/preferences.png b/documentation/reference/3.0.0.M01/html-single/images/pde/preferences.png
new file mode 100644
index 0000000..3612ad0
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/pde/preferences.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/pde/select-pde-1.png b/documentation/reference/3.0.0.M01/html-single/images/pde/select-pde-1.png
new file mode 100644
index 0000000..b729526
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/pde/select-pde-1.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/pde/select-pde-2.png b/documentation/reference/3.0.0.M01/html-single/images/pde/select-pde-2.png
new file mode 100644
index 0000000..17d887d
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/pde/select-pde-2.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/pde/select-plugins-view.png b/documentation/reference/3.0.0.M01/html-single/images/pde/select-plugins-view.png
new file mode 100644
index 0000000..e0ddaeb
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/pde/select-plugins-view.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/pde/show-plugins.png b/documentation/reference/3.0.0.M01/html-single/images/pde/show-plugins.png
new file mode 100644
index 0000000..c91089b
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/pde/show-plugins.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/pde/spring-osgi-plugin.png b/documentation/reference/3.0.0.M01/html-single/images/pde/spring-osgi-plugin.png
new file mode 100644
index 0000000..c33fc1f
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/pde/spring-osgi-plugin.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/pde/springide-site-select.png b/documentation/reference/3.0.0.M01/html-single/images/pde/springide-site-select.png
new file mode 100644
index 0000000..27cf0dc
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/pde/springide-site-select.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/pde/springide-site.png b/documentation/reference/3.0.0.M01/html-single/images/pde/springide-site.png
new file mode 100644
index 0000000..da07781
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/pde/springide-site.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/pde/target-select.png b/documentation/reference/3.0.0.M01/html-single/images/pde/target-select.png
new file mode 100644
index 0000000..28979ed
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/pde/target-select.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/s2-banner-rhs.png b/documentation/reference/3.0.0.M01/html-single/images/s2-banner-rhs.png
new file mode 100644
index 0000000..a9f6d95
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/s2-banner-rhs.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/s2_box_logo.png b/documentation/reference/3.0.0.M01/html-single/images/s2_box_logo.png
new file mode 100644
index 0000000..8c778a5
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/s2_box_logo.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/spring-osgi-model.png b/documentation/reference/3.0.0.M01/html-single/images/spring-osgi-model.png
new file mode 100644
index 0000000..8e958db
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/spring-osgi-model.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/start-diagram.png b/documentation/reference/3.0.0.M01/html-single/images/start-diagram.png
new file mode 100644
index 0000000..9dcddce
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/start-diagram.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/stop-diagram.png b/documentation/reference/3.0.0.M01/html-single/images/stop-diagram.png
new file mode 100644
index 0000000..6e72b9f
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/stop-diagram.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/visibility.png b/documentation/reference/3.0.0.M01/html-single/images/visibility.png
new file mode 100644
index 0000000..47d306e
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/visibility.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/images/xdev-spring_logo.jpg b/documentation/reference/3.0.0.M01/html-single/images/xdev-spring_logo.jpg
new file mode 100644
index 0000000..622962e
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/images/xdev-spring_logo.jpg
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html-single/index.html b/documentation/reference/3.0.0.M01/html-single/index.html
new file mode 100644
index 0000000..7525feb
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/index.html
@@ -0,0 +1,5423 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Eclipse Gemini Blueprint Reference Guide</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="book"><div class="titlepage"><div><div><h1 class="title"><a name="d21e1"></a>Eclipse Gemini Blueprint Reference Guide</h1></div><div><div class="authorgroup">
+ <div class="author"><h3 class="author"><span class="firstname">Adrian M</span> <span class="surname">Colyer</span></h3><div class="affiliation">SpringSource, division of VMware</div></div>
+ <div class="author"><h3 class="author"><span class="firstname">Hal</span> <span class="surname">Hildebrand</span></h3><div class="affiliation">Oracle</div></div>
+ <div class="author"><h3 class="author"><span class="firstname">Costin</span> <span class="surname">Leau</span></h3><div class="affiliation">SpringSource, division of VMware</div></div>
+ <div class="author"><h3 class="author"><span class="firstname">Andy</span> <span class="surname">Piper</span></h3><div class="affiliation">BEA</div></div>
+ <div class="author"><h3 class="author"><span class="firstname">Olaf</span> <span class="surname">Otto</span></h3><div class="affiliation">Unic AG</div></div>
+ </div></div><div><p class="releaseinfo">3.0.0.M01</p></div><div><p class="copyright">Copyright &copy; 2006 -, 2011 VMware Inc., Oracle Inc.</p></div><div><div class="legalnotice"><a name="d21e26"></a>
+
+ <p>Documentation made available under the terms of the Eclipse Public License v1.0
+ and Apache License v2.0 which accompanies this distribution.
+ The Eclipse Public License is available at <a class="ulink" href="http://www.eclipse.org/legal/epl-v10.html" target="_top">http://www.eclipse.org/legal/epl-v10.html</a> and
+ the Apache License v2.0 is available at <a class="ulink" href="http://www.opensource.org/licenses/apache2.0.php" target="_top">http://www.opensource.org/licenses/apache2.0.php</a>.
+ You may elect to redistribute this code under either of these licenses.</p>
+ </div></div></div><hr></div><div class="toc"><dl class="toc"><dt><span class="preface"><a href="#preface">Preface</a></span></dt><dt><span class="part"><a href="#introduction">I. Introduction</a></span></dt><dd><dl><dt><span class="chapter"><a href="#eclipse-migration">1. Spring Dynamic Modules becomes Eclipse Gemini Blueprint</a></span></dt><dt><span class="chapter"><a href="#why-Spring DM">2. Why Gemini Blueprint?</a></span></dt><dt><span class="chapter"><a href="#requirements">3. Requirements</a></span></dt><dt><span class="chapter"><a href="#get-started">4. Getting Started</a></span></dt><dd><dl><dt><span class="section"><a href="#get-started:first-steps">4.1. First Steps</a></span></dt><dd><dl><dt><span class="section"><a href="#get-started:first-steps:spring">4.1.1. Knowing Spring</a></span></dt><dt><span class="section"><a href="#get-started:first-steps:osgi">4.1.2. Knowing OSGi</a></span></dt><dt><span class="section"><a href="#get-started:first-steps:blueprint">4.1.3. Quick start - OSGi 5.x Blueprint Container</a></span></dt></dl></dd><dt><span class="section"><a href="#get-started:help">4.2. Need Help?</a></span></dt><dd><dl><dt><span class="section"><a href="#get-started:help:community">4.2.1. Community Support</a></span></dt><dt><span class="section"><a href="#get-started:help:professional">4.2.2. Professional Support</a></span></dt></dl></dd><dt><span class="section"><a href="#get-started:up-to-date">4.3. Following Development</a></span></dt></dl></dd><dt><span class="chapter"><a href="#what-is-new">5. What is new?</a></span></dt><dd><dl><dt><span class="section"><a href="#gemini-blueprint-3.0.0.M01">5.1. Gemini Blueprint 3.0.x</a></span></dt><dd><dl><dt><span class="section"><a href="#gemini-blueprint-3.0.x:spring-5.x">5.1.1. Spring 5.x</a></span></dt></dl></dd><dt><span class="section"><a href="#gemini-blueprint-2.1.0">5.2. Gemini Blueprint 2.1.0+</a></span></dt><dd><dl><dt><span class="section"><a href="#gemini-blueprint-2.1.0.x:jdk8">5.2.1. Java 8</a></span></dt><dt><span class="section"><a href="#gemini-blueprint-2.1.x:spring-4.3.x">5.2.2. Spring 4.3.x</a></span></dt><dt><span class="section"><a href="#gemini-blueprint-2.1.x:gemini-blueprint-extensions">5.2.3. Gemini Blueprint Extensions</a></span></dt></dl></dd><dt><span class="section"><a href="#gemini-blueprint-2.0.0">5.3. Gemini Blueprint 2.0.0+</a></span></dt><dd><dl><dt><span class="section"><a href="#gemini-blueprint-2.0.0.x:blueprint">5.3.1. OSGi 5.x Blueprint Reference Implementation (RI)</a></span></dt><dt><span class="section"><a href="#gemini-blueprint-2.0.0.x:jdk5">5.3.2. Java 7</a></span></dt><dt><span class="section"><a href="#gemini-blueprint-2.0.x:spring-4.2.x">5.3.3. Spring 4.2.x</a></span></dt></dl></dd><dt><span class="section"><a href="#gemini-blueprint-2.0.x">5.4. Gemini Blueprint 1.x</a></span></dt><dd><dl><dt><span class="section"><a href="#gemini-blueprint-2.0.x:blueprint">5.4.1. OSGi 4.2 Blueprint Reference Implementation (RI)</a></span></dt><dt><span class="section"><a href="#gemini-blueprint-2.0.x:jdk5">5.4.2. Java 5</a></span></dt><dt><span class="section"><a href="#gemini-blueprint-2.0.x:spring-3.x">5.4.3. Spring 3.x</a></span></dt><dt><span class="section"><a href="#gemini-blueprint-2.0.x:imports">5.4.4. Service Importer Improvements</a></span></dt><dt><span class="section"><a href="#gemini-blueprint-2.0.x:security">5.4.5. Java 2 Security Integration</a></span></dt></dl></dd><dt><span class="section"><a href="#gemini-blueprint-1.2.x">5.5. Spring DM 1.2.x</a></span></dt><dd><dl><dt><span class="section"><a href="#gemini-blueprint-1.2.x:security">5.5.1. Java 2 Security Integration</a></span></dt><dt><span class="section"><a href="#gemini-blueprint-1.2.x:compendium">5.5.2. Compendium Services Support</a></span></dt><dt><span class="section"><a href="#gemini-blueprint-1.2.x:sym-name-change">5.5.3. Changed Spring DM Symbolic Names</a></span></dt><dt><span class="section"><a href="#gemini-blueprint-1.2.x:ebr-usage">5.5.4. Usage of SpringSource Enterprise Bundle Repository (EBR)</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="#reference">II. Reference Documentation</a></span></dt><dd><dl><dt><span class="chapter"><a href="#blueprint">6. OSGi 4.2 Blueprint Container</a></span></dt><dd><dl><dt><span class="section"><a href="#blueprint:requirements">6.1. Blueprint Requirements</a></span></dt><dt><span class="section"><a href="#blueprint:differences">6.2. Blueprint/Gemini Blueprint Differences</a></span></dt><dd><dl><dt><span class="section"><a href="#blueprint:differences:xml">6.2.1. XML Declarations</a></span></dt><dt><span class="section"><a href="#blueprint:differences:container">6.2.2. Container Capabilities</a></span></dt></dl></dd><dt><span class="section"><a href="#blueprint:using">6.3. Using Blueprint</a></span></dt></dl></dd><dt><span class="chapter"><a href="#bnd-app-ctx">7. Bundles and Application Contexts</a></span></dt><dd><dl><dt><span class="section"><a href="#bnd-app-ctx:extender">7.1. The Gemini Blueprint Extender Bundle</a></span></dt><dt><span class="section"><a href="#bnd-app-ctx:app-creation">7.2. Application Context Creation</a></span></dt><dd><dl><dt><span class="section"><a href="#bnd-app-ctx:app-creation:mandatory-deps">7.2.1. Mandatory Service Dependencies</a></span></dt><dt><span class="section"><a href="#bnd-app-ctx:app-creation:app-ctx-publication">7.2.2. Application Context Service Publication</a></span></dt></dl></dd><dt><span class="section"><a href="#bnd-app-ctx:bnd-lifecycle">7.3. Bundle Lifecycle</a></span></dt><dt><span class="section"><a href="#bnd-app-ctx:osgi-resource">7.4. The Resource Abstraction</a></span></dt><dt><span class="section"><a href="#bnd-app-ctx:bundle-scope">7.5. Bundle Scope</a></span></dt><dt><span class="section"><a href="#bnd-app-ctx:access-bnd-ctx">7.6. Accessing the BundleContext</a></span></dt><dt><span class="section"><a href="#bnd-app-ctx:app-destruction">7.7. Application Context Destruction</a></span></dt><dt><span class="section"><a href="#bnd-app-ctx:access-bnd-ctx:stop-extender">7.8. Stopping the Extender Bundle</a></span></dt></dl></dd><dt><span class="chapter"><a href="#app-deploy">8. Packaging and Deploying Spring-based OSGi applications</a></span></dt><dd><dl><dt><span class="section"><a href="#app-deploy:headers">8.1. Bundle Format And Manifest Headers</a></span></dt><dt><span class="section"><a href="#app-deploy:headers:blueprint">8.2. Blueprint Manifest Configuration Comparison</a></span></dt><dt><span class="section"><a href="#app-deploy:extender-configuration">8.3. Extender Configuration Options</a></span></dt><dd><dl><dt><span class="section"><a href="#app-deploy:extender-configuration:events">8.3.1. Listening To Extender Events</a></span></dt></dl></dd><dt><span class="section"><a href="#app-deploy:required-libraries">8.4. Required Spring Framework And Gemini Blueprint
+ Bundles</a></span></dt><dt><span class="section"><a href="#app-deploy:optional-libraries">8.5. Optional Gemini Blueprint Bundles</a></span></dt><dt><span class="section"><a href="#app-deploy:spring-namespaces">8.6. Spring XML Authoring Support</a></span></dt><dt><span class="section"><a href="#app-deploy:imports-exports">8.7. Importing and Exporting Packages</a></span></dt><dt><span class="section"><a href="#app-deploy:ext-libs">8.8. Considerations When Using External Libraries</a></span></dt><dt><span class="section"><a href="#app-deploy:troubleshooting">8.9. Diagnosing Problems</a></span></dt></dl></dd><dt><span class="chapter"><a href="#service-registry">9. The Service Registry</a></span></dt><dd><dl><dt><span class="section"><a href="#service-registry:export">9.1. Exporting A Spring Bean As An OSGi Service</a></span></dt><dd><dl><dt><span class="section"><a href="#service-registry:export:registration">9.1.1. Using The Service Registration</a></span></dt><dt><span class="section"><a href="#service-registry:export:service-factory">9.1.2. <code class="interfacename">org.osgi.framework.ServiceFactory</code> Support</a></span></dt><dt><span class="section"><a href="#service-registry:export:intfs">9.1.3. Controlling The Set Of Advertised Service Interfaces For
+ An Exported Service</a></span></dt><dd><dl><dt><span class="section"><a href="#service-registry:export:auto-export">9.1.3.1. Detecting The Advertised Interfaces At Runtime</a></span></dt></dl></dd><dt><span class="section"><a href="#service-registry:export:props">9.1.4. Controlling The Set Of Advertised Properties For An
+ Exported Service</a></span></dt><dt><span class="section"><a href="#service-registry:export:depends-on">9.1.5. The depends-on Attribute</a></span></dt><dt><span class="section"><a href="#service-registry:export:ccl">9.1.6. The context-class-loader Attribute</a></span></dt><dt><span class="section"><a href="#service-registry:export:ranking">9.1.7. The <code class="literal">ranking</code> Attribute</a></span></dt><dt><span class="section"><a href="#service-registry:export:cache">9.1.8. The <code class="literal">cache-target</code> Attribute</a></span></dt><dt><span class="section"><a href="#service-registry:export:service:attributes">9.1.9. <code class="literal">service</code> Element Attributes</a></span></dt><dt><span class="section"><a href="#service-registry:export:lifecycle">9.1.10. Service Registration And Unregistration Lifecycle</a></span></dt><dd><dl><dt><span class="section"><a href="#service-registry:export:lifecycle:interface">9.1.10.1. Using <code class="interfacename">OsgiServiceRegistrationListener</code> Interface</a></span></dt><dt><span class="section"><a href="#service-registry:export:blueprint">9.1.10.2. Blueprint <code class="literal">service</code> Comparison</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="#service-registry:refs">9.2. Defining References To OSGi Services</a></span></dt><dd><dl><dt><span class="section"><a href="#service-registry:annotations-vs-xml-declarations">9.2.1. Referencing services via the @ServiceReference annotation</a></span></dt><dt><span class="section"><a href="#service-registry:refs:availability">9.2.2. Imported Service Availability</a></span></dt><dd><dl><dt><span class="section"><a href="#service-registry:refs:availability:startup">9.2.2.1. Mandatory Services and Application Startup</a></span></dt><dt><span class="section"><a href="#service-registry:export-import-relationship">9.2.2.2. Relationship Between The Service Exporter And Service Importer</a></span></dt></dl></dd><dt><span class="section"><a href="#service-registry:refs:singular">9.2.3. Referencing An Individual Service</a></span></dt><dd><dl><dt><span class="section"><a href="#service-registry:refs:singular:interface">9.2.3.1. Controlling The Set Of Advertised Interfaces For The Imported Service</a></span></dt><dt><span class="section"><a href="#service-registry:refs:singular:filter">9.2.3.2. The <code class="literal">filter</code> Attribute</a></span></dt><dt><span class="section"><a href="#service-registry:refs:singular:bean-name">9.2.3.3. The <code class="literal">bean-name</code> Attribute</a></span></dt><dt><span class="section"><a href="#service-registry:refs:singular:cardinality">9.2.3.4. The <code class="literal">availability</code> Attribute</a></span></dt><dt><span class="section"><a href="#service-registry:refs:singular:depends-on">9.2.3.5. The <code class="literal">depends-on</code> Attribute</a></span></dt><dt><span class="section"><a href="#service-registry:refs:singular:tccl">9.2.3.6. The <code class="literal">context-class-loader</code> Attribute</a></span></dt><dt><span class="section"><a href="#service-registry:refs:singular:sticky">9.2.3.7. The <code class="literal">sticky</code> Attribute</a></span></dt><dt><span class="section"><a href="#service-registry:refs:singular:reference:attributes">9.2.3.8. <code class="literal">reference</code> Element Attributes</a></span></dt><dt><span class="section"><a href="#service-registry:refs:singular:dynamics">9.2.3.9. <code class="literal">reference</code> And OSGi Service Dynamics</a></span></dt><dt><span class="section"><a href="#service-registry:refs:singular:property-editor">9.2.3.10. Getting A Hold Of The Managed Service Reference</a></span></dt></dl></dd><dt><span class="section"><a href="#service-registry:refs:collection">9.2.4. Referencing A Collection Of Services</a></span></dt><dd><dl><dt><span class="section"><a href="#service-registry:refs:collection:greedy-proxying">9.2.4.1. Greedy Proxying</a></span></dt><dt><span class="section"><a href="#service-registry:refs:collection:member-type">9.2.4.2. Member Type</a></span></dt><dt><span class="section"><a href="#service-registry:refs:collection:attributes">9.2.4.3. Collection (<code class="literal">list</code> And <code class="literal">set</code>) Element Attributes</a></span></dt><dt><span class="section"><a href="#service-registry:refs:collection:dynamics">9.2.4.4. <code class="literal">list</code> / <code class="literal">set</code> And OSGi Service Dynamics</a></span></dt><dt><span class="section"><a href="#service-registry:refs:collection:iterator">9.2.4.5. <code class="interfacename">Iterator</code> Contract And Service Collections</a></span></dt></dl></dd><dt><span class="section"><a href="#service-registry:refs:dynamics">9.2.5. Dealing With The Dynamics Of OSGi Imported Services</a></span></dt><dt><span class="section"><a href="#service-registry:refs:blueprint">9.2.6. Blueprint <code class="literal">reference</code> Comparison</a></span></dt></dl></dd><dt><span class="section"><a href="#service-registry:refs:listener-and-proxies">9.3. Listener And Service Proxies</a></span></dt><dt><span class="section"><a href="#service-registry:refs:invoker-bundle-context">9.4. Accessing The Caller <code class="interfacename">BundleContext</code></a></span></dt><dt><span class="section"><a href="#service-registry:refs:listener-best-practices">9.5. Exporter/Importer Listener Best Practices</a></span></dt><dd><dl><dt><span class="section"><a href="#service-registry:refs:listener-best-practices:cycles">9.5.1. Listener And Cyclic Dependencies</a></span></dt></dl></dd><dt><span class="section"><a href="#service-registry:refs:global-defaults">9.6. Service Importer Global Defaults</a></span></dt></dl></dd><dt><span class="chapter"><a href="#bundles">10. Working With Bundles</a></span></dt><dt><span class="chapter"><a href="#compendium">11. Compendium Services</a></span></dt><dd><dl><dt><span class="section"><a href="#compendium:cm">11.1. Configuration Admin</a></span></dt><dd><dl><dt><span class="section"><a href="#compendium:cm:props">11.1.1. Exposing Configuration Admin Entries As <code class="classname">Properties</code></a></span></dt><dt><span class="section"><a href="#compendium:cm:managed-properties">11.1.2. Managed Properties</a></span></dt><dd><dl><dt><span class="section"><a href="#compendium:cm:managed-properties:update">11.1.2.1. Configuration Admin Runtime Updates</a></span></dt></dl></dd><dt><span class="section"><a href="#compendium:cm:managed-service-factories">11.1.3. Managed Service Factories</a></span></dt><dt><span class="section"><a href="#compendium:cm:dict">11.1.4. Direct Access To Configuration Data</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#testing">12. Testing OSGi based Applications</a></span></dt><dd><dl><dt><span class="section"><a href="#testing:mocks">12.1. OSGi Mocks</a></span></dt><dt><span class="section"><a href="#testing:integration">12.2. Integration Testing</a></span></dt><dd><dl><dt><span class="section"><a href="#testing:integration:simple-test">12.2.1. Creating A Simple OSGi Integration Test</a></span></dt><dt><span class="section"><a href="#testing:integration:provisioning">12.2.2. Installing Test Prerequisites</a></span></dt><dt><span class="section"><a href="#testing:integration:advanced-topics">12.2.3. Advanced Testing Framework Topics</a></span></dt><dd><dl><dt><span class="section"><a href="#testing:integration:customize-manifest">12.2.3.1. Customizing The Test Manifest</a></span></dt><dt><span class="section"><a href="#testing:integration:specify-test-jar-content">12.2.3.2. Customizing Test Bundle Content</a></span></dt><dt><span class="section"><a href="#testing:integration:understanding-manifest-creator">12.2.3.3. Understanding The <code class="code">MANIFEST.MF</code> Generation</a></span></dt></dl></dd><dt><span class="section"><a href="#testing:integration:appContext">12.2.4. Creating An OSGi Application Context</a></span></dt><dt><span class="section"><a href="#testing:integration:specify-platform">12.2.5. Specifying The OSGi Platform To Use</a></span></dt><dt><span class="section"><a href="#testing:integration:specify-test-wait-time">12.2.6. Waiting For The Test Dependencies</a></span></dt><dt><span class="section"><a href="#testing:integration:performance">12.2.7. Testing Framework Performance</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="#resources">III. Other Resources</a></span></dt><dd><dl><dt><span class="chapter"><a href="#links">13. Useful Links</a></span></dt></dl></dd><dt><span class="part"><a href="#appendixes">IV. Appendixes</a></span></dt><dd><dl><dt><span class="appendix"><a href="#appendix-security">A. Security Integration</a></span></dt><dt><span class="appendix"><a href="#appendix-pde-integration">B. Eclipse Plug-in Development integration</a></span></dt><dt><span class="appendix"><a href="#appendix-tips">C. Useful OSGi tips</a></span></dt><dd><dl><dt><span class="section"><a href="#appendix-tips:fragments">C.1. OSGi Fragments</a></span></dt></dl></dd><dt><span class="appendix"><a href="#appendix-roadmap">D. Roadmap</a></span></dt><dd><dl><dt><span class="section"><a href="#d21e3346">D.1. Start Level Integration</a></span></dt></dl></dd><dt><span class="appendix"><a href="#appendix-osgi-repo">E. Gemini Blueprint OSGi Repository</a></span></dt><dd><dl><dt><span class="section"><a href="#appendix-osgi-repo:old-repo">E.1. Gemini Blueprint Temporary OSGi Repository</a></span></dt><dd><dl><dt><span class="section"><a href="#appendix-osgi-repo:conventions">E.1.1. Repository Conventions</a></span></dt><dt><span class="section"><a href="#appendix-osgi-repo:browsing">E.1.2. Browsing The Repository Content</a></span></dt><dt><span class="section"><a href="#appendix-osgi-repo:maven">E.1.3. Using The Repository With Maven</a></span></dt><dt><span class="section"><a href="#appendix-osgi-repo:ant">E.1.4. Using The Repository With Ant/Ivy</a></span></dt></dl></dd></dl></dd><dt><span class="appendix"><a href="#appendix-schema">F. Gemini Blueprint Schema</a></span></dt><dt><span class="appendix"><a href="#appendix-ack">G. Acknowledgments</a></span></dt></dl></dd></dl></div>
+
+
+
+
+ <div class="preface"><div class="titlepage"><div><div><h1 class="title"><a name="preface"></a>Preface</h1></div></div></div>
+
+ <p>
+ Application development has seen significant changes in the last years, moving towards a simpler, more agile,
+ POJO-based programming model in order to keep a fast pace. Dependency injection and Aspect Oriented Programming,
+ which were once <span class="emphasis"><em>bleeding edge</em></span> ideas, are used on a daily basis by most developers to manage
+ and simplify the complexity of their applications.</p>
+
+ <p>However, in terms of deployment, things have remained mainly unchanged. Even though code bases are divided into
+ modules, whether logical, conceptual or physical, at runtime they are seen as one monolithic application in which,
+ making a change (be it large or small), requires a restart. <a class="ulink" href="http://www.osgi.org" target="_top">OSGi</a> aims
+ to change this by allowing applications to be divided into <span class="emphasis"><em>modules</em></span> that can have different
+ life cycles, dependencies and still exist as a whole.</p>
+
+ <p>Eclipse Gemini Blueprint (formerly Spring Dynamic Modules) focuses on integrating Spring Framework's powerful, non-invasive programming model and
+ concepts with the dynamics and modularity of the OSGi platform. It allows transparent exporting and importing of OSGi
+ services, life cycle management and control. Moreover, the Spring DM model was standardized in OSGi r4.2, in the form
+ of the <a class="ulink" href="http://www.osgi.org/Specifications/Drafts" target="_top">Blueprint</a> Container for which Eclipse Gemini Blueprint
+ serves as the reference implementation (RI).
+ </p>
+ <p>
+ While every effort has been made to ensure that this documentation is comprehensive and there are no errors,
+ nevertheless some topics might require more explanation and some typos might have crept in. If you do spot any
+ mistakes or even more serious errors and you can spare a few cycles during lunch, please do bring the error
+ to the attention of the Eclipse Gemini Blueprint team by raising an
+ <a class="ulink" href="https://bugs.eclipse.org/bugs/buglist.cgi?product=Gemini.Blueprint" target="_top">issue</a>. Thank you.
+ </p>
+
+</div>
+
+ <div class="part"><div class="titlepage"><div><div><h1 class="title"><a name="introduction"></a>Part&nbsp;I.&nbsp;Introduction</h1></div></div></div>
+
+
+ <div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="eclipse-migration"></a>Chapter&nbsp;1.&nbsp;Spring Dynamic Modules becomes Eclipse Gemini Blueprint</h2></div></div></div>
+
+
+ <p>
+ In late 2009, as a member of the Gemini project <a class="ulink" href="https://www.eclipse.org/proposals/gemini/" target="_top">proposal</a>,
+ SpringSource <a class="ulink" href="http://spring.io/blog/2009/11/24/gemini-project-proposal-at-eclipse-org/" target="_top">contributed</a> the Spring Dynamic Modules
+ (also known as Spring OSGi) <a class="ulink" href="http://www.springframework.org/osgi" target="_top">project</a>
+ to the Eclipse Foundation. Spring DM v2 code base has been moved to Eclipse.org along with its issue tracker and forum. The project
+ became dual licensed under Apache License and EPL.
+ </p>
+ <p>
+ While the name has changed, the code and its functionality remain the same. Existing Spring DM applications can be easily migrated to Eclipse Gemini Blueprint
+ as mentioned in the migration <a class="ulink" href="https://www.eclipse.org/gemini/blueprint/documentation/migration/" target="_top">guide</a>.
+ </p>
+ <p>While the project name has changed (to Eclipse Gemini Blueprint) and significant efforts have been made to reflect this in the project documentation and resources,
+ there might be places that we have missed; if you find any, please <a class="ulink" href="https://bugs.eclipse.org/bugs/buglist.cgi?product=Gemini.Blueprint" target="_top">report</a> them to us.
+ </p>
+ </div>
+ <div class="partintro"><div></div>
+ <p>
+ </p><p>This document is the reference guide for Gemini Blueprint. It explains the relationship
+ between Gemini Blueprint and the OSGi 4.2 Blueprint specification, defines Gemini Blueprint
+ concepts and semantics, the syntax for the <a class="ulink" href="http://www.osgi.org" target="_top">
+ OSGi Service Platform</a> based namespaces, the Gemini Blueprint extender bundle
+ and the OSGi manifest header entries defined by Gemini Blueprint.</p><p>
+
+ </p><p>For an introduction to OSGi or Spring, or Gemini Blueprint examples, please refer to
+ <a class="xref" href="#get-started" title="Chapter&nbsp;4.&nbsp;Getting Started">Chapter&nbsp;4, <i>Getting Started</i></a> - this documentation refers only to Gemini Blueprint and assumes the user is familiar
+ with OSGi and Spring concepts.</p><p>
+
+ </p><p><span class="emphasis"><em>Note: OSGi is a trademark of the OSGi Alliance. Project
+ name is pending final approval from the Alliance.</em></span></p><p>
+
+ </p>
+
+ </div>
+ <div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="why-Spring DM"></a>Chapter&nbsp;2.&nbsp;Why Gemini Blueprint?</h2></div></div></div>
+
+
+ <p>The Spring Framework is the leading full-stack Java/JEE
+ application framework. It provides a lightweight container and a
+ non-invasive programming model enabled by the use of dependency
+ injection, AOP, and portable service abstractions. The OSGi Service
+ Platform offers a dynamic application execution environment in which
+ modules (bundles) can be installed, updated, or removed on the fly. It
+ also has excellent support for modularity and versioning.</p>
+
+ <p>Gemini Blueprint makes it easy to write Spring applications
+ that can be deployed in an OSGi execution environment, and that can take
+ advantage of the services offered by the OSGi framework. Gemini Blueprint
+ support also makes development of OSGi applications simpler and more
+ productive by building on the ease-of-use and power of the Spring
+ Framework. For enterprise applications, the combination of Eclipse Gemini Blueprint
+ and the OSGi platform provides:</p>
+
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <p>Better separation of application logic into modules, with
+ runtime enforcement of module boundaries</p>
+ </li><li class="listitem">
+ <p>The ability to deploy multiple versions of a module (or
+ library) concurrently</p>
+ </li><li class="listitem">
+ <p>The ability to dynamically discover and use services provided
+ by other modules in the system</p>
+ </li><li class="listitem">
+ <p>The ability to dynamically install, update and uninstall
+ modules in a running system</p>
+ </li><li class="listitem">
+ <p>Use of the Spring Framework to instantiate, configure,
+ assemble, and decorate components within and across modules.</p>
+ </li><li class="listitem">
+ <p>A simple and familiar programming model for enterprise
+ developers to exploit the features of the OSGi platform.</p>
+ </li></ul></div>
+
+ <p>We believe that the combination of OSGi and Spring offers a
+ comprehensive model for building enterprise applications.</p>
+
+ <p>The OSGi Alliance found valuable the programming model proposed by Gemini Blueprint (then Spring DM) and,
+ in OSGi 4.2, standardized it by introducing the Blueprint Container, as part of the Compendium
+ services.</p>
+</div>
+ <div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="requirements"></a>Chapter&nbsp;3.&nbsp;Requirements</h2></div></div></div>
+
+
+ <p>Gemini Blueprint 2.x binaries require JDK level 7.0 or above,
+ and <a class="ulink" href="http://www2.osgi.org/Specifications/HomePage?section=2" target="_top">OSGi
+ R5.x</a> (though R4.1 and even R4.0 might work) or above. For JDK &lt; 1.7, consider using Gemini Blueprint 1.x.
+ For JDK &lt; 1.5, consider using Spring Dynamic Modules 1.x.
+ </p>
+ <p>
+ Bundles deployed for use with Gemini Blueprint should specify
+ <code class="literal">"Bundle-ManifestVersion: 2"</code> in their manifest (require OSGi R4 behaviour).
+ Note that for OSGi 4.2 specific functionality (such as the Blueprint Container),
+ an appropriate container needs to be used.
+ </p>
+ <p>
+ We test against <a class="ulink" href="http://www.eclipse.org/equinox/" target="_top">Equinox</a> and <a class="ulink" href="http://felix.apache.org/" target="_top">Felix</a> as part of our
+ release process.
+ </p>
+ </div>
+ <div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="get-started"></a>Chapter&nbsp;4.&nbsp;Getting Started</h2></div></div></div>
+
+
+ <p>Learning a new framework is not always straightforward. In this section, we (the Spring DM/Gemini Blueprint team)
+ tried to provide, what we think is, an easy to follow guide for starting with Gemini Blueprint.
+ Of course, feel free to create your own learning 'path' as you see fit and, if possible, please report back
+ any improvements to the documentation that can help others.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="get-started:first-steps"></a>4.1.&nbsp;First Steps</h2></div></div></div>
+
+
+ <p>As explained in <a class="xref" href="#why-Spring DM" title="Chapter&nbsp;2.&nbsp;Why Gemini Blueprint?">Chapter&nbsp;2, <i>Why Gemini Blueprint?</i></a>, Gemini Blueprint provides integration between
+ Spring framework and OSGi. Thus, it is important to become acquainted with both of these frameworks (libraries or
+ environments depending on how you want to name them). Throughout the Gemini Blueprint documentation, each section provides
+ links to resources relevant however, it is best to become familiar with these topics beforehand.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="get-started:first-steps:spring"></a>4.1.1.&nbsp;Knowing Spring</h3></div></div></div>
+
+ <p>Gemini Blueprint uses heavily Spring framework's <a class="ulink" href="http://docs.spring.io/spring/docs/4.3.x/spring-framework-reference/html/overview.html#overview-core-container" target="_top">core</a> functionalty,
+ such as the <a class="ulink" href="http://docs.spring.io/spring/docs/4.3.x/spring-framework-reference/html/beans.html#beans-introduction" target="_top">IoC</a> container,
+ <a class="ulink" href="http://docs.spring.io/spring/docs/4.3.x/spring-framework-reference/html/resources.html" target="_top">resource</a> abstraction and
+ <a class="ulink" href="http://docs.spring.io/spring/docs/4.3.x/spring-framework-reference/html/aop.html" target="_top">AOP</a> infrastructure. While it is not important
+ to know the Spring framework APIs, understanding the concepts behind them is. At a minimum, the idea behind IoC should be familiar.
+ That being said, the more knowledge you have about Spring framework, the faster you will pick Gemini Blueprint.
+ Besides the comprehensive documentation that explains the Spring Framework in detail,
+ there are a lot of articles, blog entries and books on the topic - take a look at the Spring framework
+ <a class="ulink" href="http://projects.spring.io/spring-framework/" target="_top">home page</a> for more information. In general, this should be the starting point for
+ OSGi (or Eclipse plugin) developers wanting to try Gemini Blueprint.</p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="get-started:first-steps:osgi"></a>4.1.2.&nbsp;Knowing OSGi</h3></div></div></div>
+
+ <p>Java developers, new to OSGi, can start by reading the OSGi Alliance <a class="ulink" href="https://www.osgi.org/developer/where-to-start/" target="_top">introduction</a>,
+ the OSGi <a class="ulink" href="https://www.osgi.org/developer/specifications/" target="_top">specifications</a> or one of the articles/blogs
+ available on the internet.
+ </p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="get-started:first-steps:blueprint"></a>4.1.3.&nbsp;Quick start - OSGi 5.x Blueprint Container</h3></div></div></div>
+
+ <p>As an alternative to the recommended Spring documentation, if OSGi 5.x is an option, one can read the Blueprint Container specification
+ for a quick introduction to dependency injection and Gemini Blueprint functionality. Note that Blueprint is a subset of Spring and Gemini Blueprint and we recommend
+ the official documentation to get access to the whole set of features.
+ </p>
+ </div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="get-started:help"></a>4.2.&nbsp;Need Help?</h2></div></div></div>
+
+
+ <p>If you encounter issues or you are just looking for advice, feel free to use one of the links below:</p>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="get-started:help:community"></a>4.2.1.&nbsp;Community Support</h3></div></div></div>
+
+ <p>The Gemini Blueprint <a class="ulink" href="http://www.eclipse.org/forums/index.php/f/153/" target="_top">forum</a>.</p>
+ <p>The Gemini Blueprint GitHub <a class="ulink" href="https://github.com/eclipse/gemini.blueprint" target="_top">mirror</a>.</p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="get-started:help:professional"></a>4.2.2.&nbsp;Professional Support</h3></div></div></div>
+
+ <p>Professional, from-the-source support, with guaranteed response time, is available from <a class="ulink" href="http://spring.io/" target="_top">Pivotal</a>,
+ the company behind Gemini Blueprint and Spring.
+ </p>
+ </div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="get-started:up-to-date"></a>4.3.&nbsp;Following Development</h2></div></div></div>
+
+
+ <p>For information on the Gemini Blueprint source code repository, nightly builds and snapshot artifacts please see the Gemini Blueprint home
+ <a class="ulink" href="https://www.eclipse.org/gemini/blueprint/" target="_top">page</a>.
+ </p>
+ <p>You can help make Gemini Blueprint best serve the needs of the Spring community by interacting with developers through the Spring Community
+ <a class="ulink" href="http://spring.io/questions" target="_top">stack overflow</a>.</p>
+ <p>If you encounter a bug or want to suggest an improvement,
+ please create a ticket on the Gemini Blueprint issue <a class="ulink" href="https://jira.spring.io/" target="_top">tracker</a>.</p>
+ <p>To stay up to date with the latest news and announcements in the Spring eco system, subscribe to the
+ Spring Community <a class="ulink" href="http://www.spring.io/" target="_top">Portal</a>.</p>
+ <p>Lastly, you can follow the project team on Twitter
+ (<a class="ulink" href="https://twitter.com/adriancolyer" target="_top">Adrian</a>, <a class="ulink" href="https://twitter.com/costinl" target="_top">Costin</a>, <a class="ulink" href="https://twitter.com/deploynix" target="_top">Olaf</a>)</p>
+ </div>
+
+</div>
+ <div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="what-is-new"></a>Chapter&nbsp;5.&nbsp;What is new?</h2></div></div></div>
+
+
+ <p>While a relatively young project, each version of Gemini Blueprint (even minor ones) offers new functionality. This chapter is a guide to the new
+ and improved feature and intended as a high-level, short summary. Please follow the appropriate links for more in-depth information.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="gemini-blueprint-3.0.0.M01"></a>5.1.&nbsp;Gemini Blueprint 3.0.x</h2></div></div></div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-3.0.x:spring-5.x"></a>5.1.1.&nbsp;Spring 5.x</h3></div></div></div>
+
+ <p>Gemini Blueprint 3.0.x runs with Spring 5.x Upgrades to Spring 5.</p>
+ </div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="gemini-blueprint-2.1.0"></a>5.2.&nbsp;Gemini Blueprint 2.1.0+</h2></div></div></div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-2.1.0.x:jdk8"></a>5.2.1.&nbsp;Java 8</h3></div></div></div>
+
+ <p>Gemini Blueprint requires <a class="ulink" href="https://java.sun.com/j2se/1.8.0/" target="_top">JDK 7</a> to run (or compile). The framework code has been
+ revised to take advantage of the JDK 8 features.</p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-2.1.x:spring-4.3.x"></a>5.2.2.&nbsp;Spring 4.3.x</h3></div></div></div>
+
+ <p>Besides the Java 8 upgrade, Gemini Blueprint requires Spring 4.3.x to get access to the latest framework features and JDK optimizations.</p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-2.1.x:gemini-blueprint-extensions"></a>5.2.3.&nbsp;Gemini Blueprint Extensions</h3></div></div></div>
+
+ <p>With 2.1, gemini blueprint ships the gemini-blueprint-extensions bundle, supporting the @ServiceReference
+ annotation on fields and setter methods to inject service references without using a service import in the blueprint context's XML declaration.
+ See <a class="xref" href="#service-registry:annotations-vs-xml-declarations" title="9.2.1.&nbsp;Referencing services via the @ServiceReference annotation">Section&nbsp;9.2.1, &#8220;Referencing services via the @ServiceReference annotation&#8221;</a> for more information.</p>
+ </div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="gemini-blueprint-2.0.0"></a>5.3.&nbsp;Gemini Blueprint 2.0.0+</h2></div></div></div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-2.0.0.x:blueprint"></a>5.3.1.&nbsp;OSGi 5.x Blueprint Reference Implementation (RI)</h3></div></div></div>
+
+ <p>Gemini Blueprint served as the basis for the Blueprint Container specification, introduced by OSGi 5 Gemini Blueprint stands as the RI for the
+ aforementioned specification, providing the Blueprint API and implementation out of the box. Various aspect of Gemini Blueprint have been adjusted for
+ consistency to the Blueprint specification. For more information on the two models, see <a class="xref" href="#blueprint" title="Chapter&nbsp;6.&nbsp;OSGi 4.2 Blueprint Container">Chapter&nbsp;6, <i>OSGi 4.2 Blueprint Container</i></a> for more information.</p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-2.0.0.x:jdk5"></a>5.3.2.&nbsp;Java 7</h3></div></div></div>
+
+ <p>Gemini Blueprint requires <a class="ulink" href="https://java.sun.com/j2se/1.7.0/" target="_top">JDK 7</a> to run (or compile). The framework code has been
+ revised to take advantage of the JDK 7 features.</p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-2.0.x:spring-4.2.x"></a>5.3.3.&nbsp;Spring 4.2.x</h3></div></div></div>
+
+ <p>Besides the Java 7 upgrade, Gemini Blueprint requires Spring 4.2.x to get access to the latest framework features and JDK optimizations.</p>
+ </div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="gemini-blueprint-2.0.x"></a>5.4.&nbsp;Gemini Blueprint 1.x</h2></div></div></div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-2.0.x:blueprint"></a>5.4.1.&nbsp;OSGi 4.2 Blueprint Reference Implementation (RI)</h3></div></div></div>
+
+ <p>Gemini Blueprint served as the basis for the Blueprint Container specification, introduced by OSGi 4.2. Gemini Blueprint stands as the RI for the
+ aforementioned specification, providing the Blueprint API and implementation out of the box. Various aspect of Gemini Blueprint have been adjusted for
+ consistency to the Blueprint specification. For more information on the two models, see <a class="xref" href="#blueprint" title="Chapter&nbsp;6.&nbsp;OSGi 4.2 Blueprint Container">Chapter&nbsp;6, <i>OSGi 4.2 Blueprint Container</i></a> for more information.</p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-2.0.x:jdk5"></a>5.4.2.&nbsp;Java 5</h3></div></div></div>
+
+ <p>Gemini Blueprint requires <a class="ulink" href="http://java.sun.com/j2se/1.5.0/" target="_top">JDK 5</a> to run (or compile). The framework code has been
+ revised to take advantage of the JDK 5 features such as language improvements, concurrency and generics: for example, various enum-like classes
+ used by the exporter and importer API have been deprecated and replaced with proper Java 5<code class="classname">enum</code>s.
+ Considerable effort has been spent to keep the code backwards compatible however, it is recommended to compile the code against the Gemini Blueprint 2.x
+ code and perform sanity checks before upgrading.</p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-2.0.x:spring-3.x"></a>5.4.3.&nbsp;Spring 3.x</h3></div></div></div>
+
+ <p>Besides the Java 5 upgrade, Gemini Blueprint requires Spring 3.x to get access to the latest framework features and JDK optimizations.</p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-2.0.x:imports"></a>5.4.4.&nbsp;Service Importer Improvements</h3></div></div></div>
+
+ <p>Gemini Blueprint provides several improvements for service imports (whether single or collection based) in terms of speed, configuration and
+ service lifecycle. <a class="xref" href="#service-registry:refs" title="9.2.&nbsp;Defining References To OSGi Services">Section&nbsp;9.2, &#8220;Defining References To OSGi Services&#8221;</a> provides more details. </p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-2.0.x:security"></a>5.4.5.&nbsp;Java 2 Security Integration</h3></div></div></div>
+
+ <p>Continuing the work in Spring DM 1.2.x, Gemini Blueprint executes all user code using its credentials (the managed bundle permissions).
+ See <a class="xref" href="#appendix-security" title="Appendix&nbsp;A.&nbsp;Security Integration">Appendix&nbsp;A, <i>Security Integration</i></a> for more information.</p>
+ </div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="gemini-blueprint-1.2.x"></a>5.5.&nbsp;Spring DM 1.2.x</h2></div></div></div>
+
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">This section includes the updates from Spring Dynamic Modules (Spring DM) project and previous gemini blueprint versions.</td></tr></table></div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-1.2.x:security"></a>5.5.1.&nbsp;Java 2 Security Integration</h3></div></div></div>
+
+ <p>Since 1.2.x, Spring DM is aware of <a class="ulink" href="http://java.sun.com/javase/technologies/security/#overview" target="_top">secured</a>
+ environments by making use of dedicated <a class="ulink" href="http://java.sun.com/j2se/1.4.2/docs/guide/security/doprivileged.html" target="_top">privileged blocks</a>
+ for executing security sensitive code. Thus, Spring DM can run as a <span class="emphasis"><em>trusted</em></span> library without requiring escalated
+ permissions for its managed bundles. See <a class="xref" href="#appendix-security" title="Appendix&nbsp;A.&nbsp;Security Integration">Appendix&nbsp;A, <i>Security Integration</i></a> for more information.</p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-1.2.x:compendium"></a>5.5.2.&nbsp;Compendium Services Support</h3></div></div></div>
+
+ <p>1.2.x provides integration with the <a class="ulink" href="http://www.osgi.org/javadoc/r4v401/org/osgi/service/cm/package-summary.html" target="_top">Configuration Admin</a>,
+ part of the OSGi compendium services. <a class="xref" href="#compendium" title="Chapter&nbsp;11.&nbsp;Compendium Services">Chapter&nbsp;11, <i>Compendium Services</i></a> provides more details on the topic.</p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-1.2.x:sym-name-change"></a>5.5.3.&nbsp;Changed Spring DM Symbolic Names</h3></div></div></div>
+
+ <p>Since 1.2.0 M2, the Spring DM bundles symbolic names have been aligned with Spring's 2.5.6+. Thus the prefix
+ <code class="literal">org.springframework.bundle.osgi</code> has been changed to <code class="literal">org.eclipse.gemini.blueprint</code>; for example
+ Spring DM extender symbolic name was changed from <code class="literal">org.springframework.bundle.osgi.extender</code> to <code class="literal">org.eclipse.gemini.blueprint.extender</code>
+ (notice the missing <code class="literal">bundle</code> word). Additionally, the documentation has been updated to reflect Spring 2.5.6+ symbolic names.</p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-1.2.x:ebr-usage"></a>5.5.4.&nbsp;Usage of SpringSource Enterprise Bundle Repository (EBR)</h3></div></div></div>
+
+ <p>To minimize the number of repositories used and the confusion caused by OSGified vs non-OSGified artifacts especially to users using SpringSource dm Server,
+ after 1.2.0 RC1, Spring DM aligned as many of its dependencies as possible with SpringSource <a class="ulink" href="http://www.springsource.com/repository" target="_top">EBR</a>.
+ In practice this means that Spring framework artifacts, such as <code class="literal">spring-aop.jar</code> can be now found as <code class="literal">org.springframework.aop.jar</code>;
+ We apologize for any inconvenience created to users relying on these naming conventions.</p>
+ </div>
+ </div>
+ </div>
+
+
+ </div>
+ <div class="part"><div class="titlepage"><div><div><h1 class="title"><a name="reference"></a>Part&nbsp;II.&nbsp;Reference Documentation</h1></div></div></div>
+
+
+ <div class="partintro"><div><div><div><h1 class="title"><a name="d21e232"></a>Document structure</h1></div></div></div>
+
+
+ <p>This part of the reference documentation explains the core functionality
+ offered by Gemini Blueprint.</p>
+
+ <p><a class="xref" href="#blueprint" title="Chapter&nbsp;6.&nbsp;OSGi 4.2 Blueprint Container">Chapter&nbsp;6, <i>OSGi 4.2 Blueprint Container</i></a> describes the relationship between Spring DM and OSGi 4.2
+ Blueprint Container specification (part of the Compendium Services) and the similiarities and
+ differences between them.</p>
+
+ <p><a class="xref" href="#bnd-app-ctx" title="Chapter&nbsp;7.&nbsp;Bundles and Application Contexts">Chapter&nbsp;7, <i>Bundles and Application Contexts</i></a> describes the relationship between an OSGi Bundle and a
+ Spring Application Context,
+ and introduces the Spring Extender Bundle support for instantiating
+ application contexts automatically.</p>
+
+ <p><a class="xref" href="#app-deploy" title="Chapter&nbsp;8.&nbsp;Packaging and Deploying Spring-based OSGi applications">Chapter&nbsp;8, <i>Packaging and Deploying Spring-based OSGi applications</i></a> describes how to deploy the Spring Framework jar files in
+ an OSGi environment, and how to reference external APIs from your
+ application bundles should you need to do so. This chapter also explains
+ some of the issues to be aware of when using existing enterprise
+ libraries not designed for OSGi in an OSGi environment.</p>
+
+ <p><a class="xref" href="#service-registry" title="Chapter&nbsp;9.&nbsp;The Service Registry">Chapter&nbsp;9, <i>The Service Registry</i></a> describes how to export Spring
+ beans as services in the OSGi service registry, and how to inject
+ references to OSGi services into beans. This chapter also defines how
+ the dynamic life-cycle of OSGi services and bundles is supported.</p>
+
+ <p><a class="xref" href="#bundles" title="Chapter&nbsp;10.&nbsp;Working With Bundles">Chapter&nbsp;10, <i>Working With Bundles</i></a> describes how to declare a bean
+ that represents an OSGi bundle, including support for installing new
+ bundles into the OSGi platform.</p>
+
+ <p><a class="xref" href="#compendium" title="Chapter&nbsp;11.&nbsp;Compendium Services">Chapter&nbsp;11, <i>Compendium Services</i></a> describes the support provided
+ for the <a class="ulink" href="http://www2.osgi.org/Release4/Download" target="_top">OSGi
+ Compendium Services</a>, specifically the Configuration Admin
+ service.</p>
+
+ <p><a class="xref" href="#testing" title="Chapter&nbsp;12.&nbsp;Testing OSGi based Applications">Chapter&nbsp;12, <i>Testing OSGi based Applications</i></a> explains the
+ integration testing support provided by Gemini Blueprint. This
+ support enables you to write simple JUnit integration tests that can
+ start up an OSGi environment, install the bundles needed for the
+ integration test, execute the test case(s) inside of OSGi, and return
+ the results to the runner. This makes it easy to integrate OSGi
+ integration testing into any environment that can work with
+ JUnit.</p>
+
+ </div>
+ <div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="blueprint"></a>Chapter&nbsp;6.&nbsp;OSGi 4.2 Blueprint Container</h2></div></div></div>
+
+
+ <p>Based on the Gemini Blueprint programming model, the OSGi Alliance introduced in OSGi 4.2 Release
+ the Blueprint Container specification (part of the Compendium Service). Gemini Blueprint 1.0 serves as
+ the Blueprint Reference <a class="ulink" href="http://en.wikipedia.org/wiki/Reference_implementation" target="_top">Implementation</a>
+ - the official, complete implementation of the spec.
+ </p>
+ <p>Existing and new users have the freedom to mix and match the programming model they want, since Eclipse Gemini Blueprint supports
+ both the Spring DM 1.x declarations and the Blueprint one, inside the same application, provided the default namespace is Blueprint
+ and the Blueprint files are stored in the folder <code class="literal">META-INF/spring</code>.
+ </p>
+
+ <p>Please note that this documentation will focus on Gemini Blueprint specific configurations and options; for Blueprint specific
+ behaviour please refer to the OSGi 4.2 Compendium spec, section 121.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="blueprint:requirements"></a>6.1.&nbsp;Blueprint Requirements</h2></div></div></div>
+
+ <p>The Blueprint Container spec is part of the OSGi 4.2 release and relies on it, in its API. Thus,
+ in order to use Blueprint, one must use an OSGi 4.2 compatible platform as a runtime environment. Gemini Blueprint itself
+ requires only an OSGi 4.0 framework so if 4.2 is not an option, one can safely downgrade at the loss of the Blueprint
+ model which can be built on top of Spring/Gemini Blueprint.
+ </p>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">On environments prior to OSGi 4.2, Gemini Blueprint will disable the Blueprint functionality automatically - users will be notified
+ through a log message similar to the following:
+
+ <pre class="screen">Pre-4.2 OSGi platform detected; disabling Blueprint Container functionality</pre>
+
+ </td></tr></table></div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="blueprint:differences"></a>6.2.&nbsp;Blueprint/Gemini Blueprint Differences</h2></div></div></div>
+
+ <p>There are a lot of similarities in terms of functionality and configuration between Gemini Blueprint 1.x and Blueprint which should be
+ no surprise considering that Spring DM was the basis of the Blueprint spec. In addition to fully supporting the Blueprint configuration schema,
+ DM 2.x enhanced its declarations by providing option that allow for Blueprint specific behaviour. The table below aggregates the most
+ important user facing differences between Spring/Gemini Blueprint configurations and Blueprint. Additional comparison information is available
+ throughout the documentation (such as <a class="xref" href="#app-deploy:headers:blueprint" title="8.2.&nbsp;Blueprint Manifest Configuration Comparison">Section&nbsp;8.2, &#8220;Blueprint Manifest Configuration Comparison&#8221;</a> or <a class="xref" href="#service-registry:export:blueprint" title="9.1.10.2.&nbsp;Blueprint service Comparison">Section&nbsp;9.1.10.2, &#8220;Blueprint <code class="literal">service</code> Comparison&#8221;</a>).
+ Again, one can simply switch between the two definition styles, if need be.</p>
+
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="blueprint:differences:xml"></a>6.2.1.&nbsp;XML Declarations</h3></div></div></div>
+
+
+ <p>Most of the XML declarations are similar between Spring and Blueprint. Using the Spring
+ <a class="ulink" href="http://static.springsource.org/spring/docs/2.5.x/reference/new-in-2.html#new-in-2-ioc-configuration" target="_top">namespace</a> mechanism,
+ the same configuration can contain both Spring, Gemini Blueprint, Blueprint and other namespaces. Moreover, custom elements can be used for virtually
+ all elements of a Spring configuration (namespace, bean declaration, decoration, etc...). The table below focuses <span class="emphasis"><em>only</em></span>
+ on the usual, standard Spring namespaces and their Blueprint equivalent.</p>
+
+ <div class="table"><a name="spring-vs-blueprint-xml"></a><p class="title"><b>Table&nbsp;6.1.&nbsp;XML Configuration Differences</b></p><div class="table-contents">
+
+ <table class="table" summary="XML Configuration Differences" width="100%" border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Element/Attribute</th><th>Gemini Blueprint</th><th>Blueprint</th></tr></thead><tbody><tr><td>Namespace Declaration</td><td><p><code class="literal">http://www.springframework.org/schema/beans</code></p>
+ <p>or <code class="literal">http://www.springframework.org/schema/osgi</code></p></td><td><code class="literal">http://www.osgi.org/xmlns/blueprint/v1.0.0</code></td></tr><tr><td>Root Element</td><td><code class="literal">&lt;beans&gt;</code></td><td><code class="literal">&lt;blueprint&gt;</code></td></tr><tr><td>Default Lazy</td><td><code class="literal">default-lazy</code></td><td><code class="literal">default-activation</code></td></tr><tr><td>Default Init Method</td><td><code class="literal">default-init-method</code></td><td><code class="literal">-</code></td></tr><tr><td>Default Destroy Method</td><td><code class="literal">default-destroy-method</code></td><td><code class="literal">-</code></td></tr><tr><td>Default Autowire Strategy</td><td><code class="literal">default-autowire</code>, <code class="literal">default-autowire-candidates</code></td><td><code class="literal">-</code></td></tr><tr><td>Root Element</td><td><code class="literal">&lt;beans&gt;</code></td><td><code class="literal">&lt;blueprint&gt;</code></td></tr><tr><td>Bean ID</td><td><code class="literal">id</code></td><td><code class="literal">id</code></td></tr><tr><td>Bean Name/Alias</td><td><code class="literal">name</code>/<code class="literal">&lt;alias&gt;</code></td><td><code class="literal">-</code></td></tr><tr><td>Bean Class</td><td><code class="literal">class</code></td><td><code class="literal">class</code></td></tr><tr><td>Bean Scope Name</td><td><code class="literal">scope</code></td><td><code class="literal">scope</code></td></tr><tr><td>Built-in Scopes</td><td><code class="literal">singleton</code>, <code class="literal">prototype</code>, <code class="literal">request</code>, <code class="literal">session</code>, <code class="literal">bundle</code></td><td><code class="literal">singleton</code>, <code class="literal">prototype</code></td></tr><tr><td>Lazy Initialization Name/Values</td><td><code class="literal">lazy-init</code>=<code class="literal">true/false</code></td><td><code class="literal">activation</code>=<code class="literal">lazy/eager</code></td></tr><tr><td>Depends</td><td><code class="literal">depends-on</code></td><td><code class="literal">depends-on</code></td></tr><tr><td>Init Method</td><td><code class="literal">init-method</code></td><td><code class="literal">init-method</code></td></tr><tr><td>Destroy Method</td><td><code class="literal">destroy-method</code></td><td><code class="literal">destroy-method</code></td></tr><tr><td>Factory Method</td><td><code class="literal">factory-method</code></td><td><code class="literal">factory-method</code></td></tr><tr><td>Factory Bean</td><td><code class="literal">factory-bean</code></td><td><code class="literal">factory-ref</code></td></tr><tr><td>Bean Inheritance</td><td><code class="literal">parent</code></td><td><code class="literal">-</code></td></tr><tr><td>Autowire Strategy</td><td><code class="literal">autowire</code>, <code class="literal">autowire-candidate</code></td><td><code class="literal">-</code></td></tr><tr><td>Constructor</td><td><code class="literal">&lt;constructor-arg&gt;</code></td><td><code class="literal">&lt;argument&gt;</code></td></tr><tr><td>Property</td><td><code class="literal">&lt;property&gt;</code></td><td><code class="literal">&lt;property&gt;</code></td></tr><tr><td>Value</td><td><code class="literal">&lt;value&gt;</code></td><td><code class="literal">&lt;value&gt;</code></td></tr><tr><td>Service Exporter</td><td><code class="literal">&lt;service&gt;</code></td><td><code class="literal">&lt;service&gt;</code></td></tr><tr><td>Service Importer</td><td><code class="literal">&lt;reference&gt;/&lt;list&gt;/&lt;set&gt;</code></td><td><code class="literal">&lt;reference&gt;/&lt;list&gt;</code></td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>The configurations below are equivalent in terms of functionality:</p>
+
+ <pre class="programlisting"><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-directive">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;blueprint</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.osgi.org/xmlns/blueprint/v1.0.0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default-activation</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"lazy"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"object"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.Object"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"length"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.Integer"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;argument</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"4"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"buffer"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.StringBuffer"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">depends-on</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"simple"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"length"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"length"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"current-time"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.System"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">factory-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"currentTimeMillis"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">scope</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"prototype"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"list"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.util.ArrayList"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">destroy-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"clear"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">activation</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"eager"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;argument</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"length"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/blueprint&gt;</strong></pre>
+ <pre class="programlisting"><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-directive">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:xsi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xsi:schemaLocation</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default-lazy-init</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"true"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"object"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.Object"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"length"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.Integer"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;constructor-arg</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"4"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"buffer"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.StringBuffer"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">depends-on</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"simple"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"length"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"length"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"current-time"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.System"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">factory-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"currentTimeMillis"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">scope</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"prototype"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"list"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.util.ArrayList"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">destroy-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"clear"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">lazy-init</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"false"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;constructor-arg</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"length"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/beans&gt;</strong></pre>
+
+ <p>As mentioned before, in Gemini Blueprint one can mix and match the namespaces provided the default namespace is Blueprint
+ and the Blueprint files are stored in the folder <code class="literal">META-INF/spring</code>:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;blueprint</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.osgi.org/xmlns/blueprint/v1.0.0"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:beans</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:xsi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xsi:schemaLocation</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"
+ http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans:bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"anInteger"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.Integer"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans:constructor-arg</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"10"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/beans:bean&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"anInteger"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.Comparable"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/blueprint&gt;</strong></pre>
+
+ <p>The example above uses the Gemini Blueprint and Spring <code class="literal">beans</code> namespaces.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="blueprint:differences:container"></a>6.2.2.&nbsp;Container Capabilities</h3></div></div></div>
+
+
+ <p>From a container perspective, the Blueprint spec standardizes the a subset of the Spring container. A high-level view comparison, by no
+ means comprehensive, is summarized in the table below:</p>
+
+ <div class="table"><a name="spring-vs-blueprint-container"></a><p class="title"><b>Table&nbsp;6.2.&nbsp;Container Capabilities Differences</b></p><div class="table-contents">
+
+ <table class="table" summary="Container Capabilities Differences" width="100%" border="1"><colgroup><col class="c1"><col class="c2"><col class="c3"></colgroup><thead><tr><th>Feature</th><th>Gemini Blueprint</th><th>Blueprint</th></tr></thead><tbody><tr><td colspan="3" align="center"><span class="emphasis"><em>Object Instantiation</em></span></td></tr><tr><td>Constructor Instantiation</td><td>Y</td><td>Y</td></tr><tr><td>Static Factory Instantiation</td><td>Y</td><td>Y</td></tr><tr><td>Instance Factory Instantiation</td><td>Y</td><td>Y</td></tr><tr><td colspan="3" align="center"><span class="emphasis"><em>Dependency Injection</em></span></td></tr><tr><td>Constructor Injection</td><td>Y</td><td>Y</td></tr><tr><td>Setter Injection</td><td>Y</td><td>Y</td></tr><tr><td>Field Injection</td><td>Y</td><td>N</td></tr><tr><td>Method Injection</td><td>Y</td><td>N</td></tr><tr><td>Arbitrary Method Injection</td><td>Y</td><td>N</td></tr><tr><td>Autowiring</td><td>Y</td><td>N</td></tr><tr><td colspan="3" align="center"><span class="emphasis"><em>Component Lifecycle</em></span></td></tr><tr><td>Lazy Initialization</td><td>Y</td><td>Y</td></tr><tr><td>Bean Scopes</td><td>Y</td><td>Y</td></tr><tr><td>Custom Bean Scopes</td><td>Y</td><td>N</td></tr><tr><td>Built-in Callbacks</td><td>Y</td><td>N</td></tr><tr><td>Custom Callbacks</td><td>Y</td><td>Y</td></tr><tr><td>Initialization Processing</td><td>Y</td><td>N</td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>As with the XML configuration, since Gemini Blueprint translates the Blueprint configuration into Spring metadata, one can rely on Spring for features
+ beyond the Blueprint container. For example, one can configure a bean using Blueprint and use annotation on the same instance, for field injection.
+ The same object can implement Spring's <code class="literal">Aware</code> interfaces or rely on other post processors for certain behaviour.</p>
+ </div>
+
+ <p>Note that additional information on Blueprint is available through out the documentation. These being said, it is highly recommended to read
+ and use the Blueprint specification as guidance, if the Blueprint Container becomes the programming model of choice.</p>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="blueprint:using"></a>6.3.&nbsp;Using Blueprint</h2></div></div></div>
+
+ <p>There are no extra jars or steps that need to be executed to <span class="emphasis"><em>enable</em></span> the Blueprint functionality in Gemini Blueprint.
+ This is built directly into the core, in fact the Blueprint APIs are exported by the Gemini Blueprint core. Please see the next section for
+ information on how to install Gemini Blueprint and the OSGi compendium spec (section 121) for Blueprint related information such as bootstrapping
+ and configuration locations. For those in a hurry, simply install and start the Gemini Blueprint jars (io, core, extender) and their dependencies
+ (namely Spring and slf4j) and you should be all set: Gemini Blueprint will automatically detect the running environment and the types of bundles started.
+ </p>
+ </div>
+</div>
+ <div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="bnd-app-ctx"></a>Chapter&nbsp;7.&nbsp;Bundles and Application Contexts</h2></div></div></div>
+
+
+ <p>The unit of deployment (and modularity) in OSGi is the <span class="emphasis"><em>bundle</em></span> (see
+ section 3.2 of the OSGi Service Platform Core Specification). A bundle
+ known to the OSGi runtime is in one of three steady states: installed,
+ resolved, or active. Bundles may export services (objects) to the OSGi
+ service registry, and by so doing make these services available for other
+ bundles to discover and to use. Bundles may also export Java packages,
+ enabling other bundles to import the exported types.</p>
+
+ <p>In Spring the primary unit of modularity is an <span class="emphasis"><em>application context</em></span>,
+ which contains some number of beans (objects managed by the Spring
+ application context). Application contexts can be configured in a
+ hierarchy such that a child application context can see beans defined in a
+ parent, but not vice-versa. The Spring concepts of exporters and factory
+ beans are used to export references to beans to clients outside of the
+ application context, and to inject references to services that are defined
+ outside of the application context.</p>
+
+ <p>There is a natural affinity between an OSGi bundle and a Spring
+ application context. Using Gemini Blueprint, an active bundle may
+ contain a Spring application context, responsible for the instantiation,
+ configuration, assembly, and decoration of the objects (beans) within the
+ bundle. Some of these beans may optionally be exported as OSGi services
+ and thus made available to other bundles; beans within the bundle may also
+ be transparently injected with references to OSGi services.</p>
+
+ <p>This chapter describes the lifecycle relationship between bundles and their
+ application contexts, as imposed by Gemini Blueprint based on the events occurring at runtime,
+ inside an OSGi environment.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="bnd-app-ctx:extender"></a>7.1.&nbsp;The Gemini Blueprint Extender Bundle</h2></div></div></div>
+
+
+ <div class="sidebar"><a name="extender-pattern"></a><div class="titlepage"><div><div><p class="title"><b>Extender Pattern</b></p></div></div></div>
+
+ <p>A common pattern in OSGi applications is the <span class="emphasis"><em>extender</em></span>, that
+ (quoting <a class="ulink" href="http://www.aqute.biz/Blog/HomePage" target="_top">Peter Kriens</a>,
+ OSGi Technical Director), <span class="quote">&#8220;<span class="quote">allows other bundles to extend the functionality in a specific domain</span>&#8221;</span>.
+ See <a class="ulink" href="http://www.osgi.org/blog/2007/02/osgi-extender-model.html" target="_top">this</a> OSGi Alliance blog
+ entry for an in-depth explanation.
+ </p>
+ </div>
+
+ <p>The component responsible for detecting the <span class="emphasis"><em>Spring-powered bundles</em></span> and instantiating
+ their application context is the Gemini Blueprint <span class="emphasis"><em>extender</em></span>. It serves the same purpose as the <a class="ulink" href="http://static.springframework.org/spring/docs/2.5.x/reference/webintegration.html" target="_top">ContextLoaderListener</a>
+ does for Spring web applications. Once the extender bundle is installed
+ and started it looks for any existing Spring-powered bundles that are
+ already in the <span class="emphasis"><em>ACTIVE</em></span> state and creates application contexts on their
+ behalf. In addition, it listens for bundle starting events and
+ automatically creates an application context for any Spring-powered
+ bundle that is subsequently started. <a class="xref" href="#app-deploy:headers" title="8.1.&nbsp;Bundle Format And Manifest Headers">Section&nbsp;8.1, &#8220;Bundle Format And Manifest Headers&#8221;</a>
+ describes what the extender recognizes as a "Spring-powered bundle" while
+ <a class="xref" href="#app-deploy:extender-configuration" title="8.3.&nbsp;Extender Configuration Options">Section&nbsp;8.3, &#8220;Extender Configuration Options&#8221;</a> how the extender can be configured.
+ The extender monitors the lifecycle of the bundle it manages and will destroy automatically the contexts for bundles
+ that are stopped. When the extender bundle itself is stopped, it will automatically close all the contexts that it manages,
+ based on the service dependency between them.
+ The extender bundle symbolic name is <code class="literal">org.eclipse.gemini.blueprint.extender</code>. </p>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="bnd-app-ctx:app-creation"></a>7.2.&nbsp;Application Context Creation</h2></div></div></div>
+
+
+ <p>Once started, the extender analyses the existing started bundles and monitors any new bundle that will start. Once a
+ Blueprint or Gemini Blueprint configuration is detected, the extender will create an application context for it in an asynchronous manner,
+ on a different thread then the one starting the bundle (or delivering the STARTED event).
+ This behaviour follows the OSGi specification recommendation and ensures that starting an OSGi Service Platform is fast and that
+ bundles with service inter-dependencies do not cause deadlock (waiting for each other) on startup, as pictured below: </p>
+
+
+ <div class="mediaobject" align="center"><img src="images/start-diagram.png" align="middle" alt="Application Context Sequence Diagram"></div>
+
+ <p>The extender considers only bundles successfully started, that is, bundles in
+ <span class="emphasis"><em>ACTIVE</em></span> state; bundles in other states are ignored.
+ Therefore a Spring-powered/Blueprint bundle will have its application context created <span class="emphasis"><em>after</em></span>
+ it has been fully started. It is possible to force synchronous/serialized creation of application contexts
+ for started bundles, on a bundle-by-bundle basis. See <a class="xref" href="#app-deploy:headers" title="8.1.&nbsp;Bundle Format And Manifest Headers">Section&nbsp;8.1, &#8220;Bundle Format And Manifest Headers&#8221;</a> for information
+ on how to specify this behaviour.</p>
+
+ <p>If application context creation fails for any reason then the
+ failure cause is logged. The bundle remains in the ACTIVE state; the application context lifecycle will not influence
+ the bundle lifecycle in anyway. Naturally, since the context has failed, so will the functionality associated with it;
+ for example there will be no services exported to the registry from the application context in this scenario.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="bnd-app-ctx:app-creation:mandatory-deps"></a>7.2.1.&nbsp;Mandatory Service Dependencies</h3></div></div></div>
+
+
+ <p>If an application context declares mandatory availability for certain
+ imported OSGi services, the creation of the application context is blocked
+ until all the mandatory dependencies can be satisfied through matching services
+ available in the OSGi service registry. In practice, for most enterprise applications
+ built using Gemini Blueprint services, the set of available
+ services and bundles will reach a steady state once the platform and
+ its installed bundles are all started. In such a world, the behaviour of
+ waiting for mandatory dependencies simply ensures that bundles A and
+ B, where bundle A depends on services exported by bundle B, may be
+ started in any order.</p>
+
+ <p>A timeout applies to the wait for mandatory dependencies to be
+ satisfied. By default the timeout is set to 5 minutes, but this value
+ can be configured using the <code class="literal">timeout</code> directive. See
+ <a class="xref" href="#app-deploy:headers" title="8.1.&nbsp;Bundle Format And Manifest Headers">Section&nbsp;8.1, &#8220;Bundle Format And Manifest Headers&#8221;</a> for details.</p>
+
+ <p>Blueprint users could achieve the same result through the <code class="literal">blueprint.timeout</code>
+ attribute declared on the <code class="literal">Bundle-SymbolicName</code></p>
+
+ <p>It is possible to change the application context creation
+ semantics so that application context creation fails if all mandatory
+ services are not immediately available upon startup (see the aforementioned
+ section for more information).
+ Again, note that regardless of the configuration chosen, the failure of the
+ application context will not change the bundle state.</p>
+
+ <p>For more information on the <span class="emphasis"><em>availability</em></span> of imported services,
+ see <a class="xref" href="#service-registry:refs:availability" title="9.2.2.&nbsp;Imported Service Availability">Section&nbsp;9.2.2, &#8220;Imported Service Availability&#8221;</a></p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="bnd-app-ctx:app-creation:app-ctx-publication"></a>7.2.2.&nbsp;Application Context Service Publication</h3></div></div></div>
+
+
+ <p>Once the application context creation for a bundle has
+ completed, the application context object is automatically exported as
+ a service available through the OSGi Service Registry. The context is
+ published under the interface
+ <code class="interfacename">org.springframework.context.ApplicationContext</code> (and
+ also all of the visible super-interfaces and types implemented by the
+ context). The published service has a service property named
+ <code class="literal">org.springframework.context.service.name</code> whose
+ value is set to the bundle symbolic name of the bundle hosting the
+ application context. In case of a Blueprint bundle, the container will be published
+ under <code class="interfacename">org.osgi.service.blueprint.container.BlueprintContainer</code>
+ while the bundle symbolic name will be published under <code class="literal">osgi.blueprint.container.symbolicname</code>
+ property.
+ </p>
+ <p>It is possible to prevent publication of the
+ application context as a service using a directive in the bundle's
+ manifest. See <a class="xref" href="#app-deploy:headers" title="8.1.&nbsp;Bundle Format And Manifest Headers">Section&nbsp;8.1, &#8220;Bundle Format And Manifest Headers&#8221;</a> for details.</p>
+
+ <p>Note: the application context is published as a service
+ primarily to facilitate testing, administration, and management.
+ Accessing this context object at runtime and invoking
+ <code class="literal">getBean()</code> or similar operations is discouraged. The
+ preferred way to access a bean defined in another application context
+ is to export that bean as an OSGi service from the defining context,
+ and then to import a reference to that service in the context that
+ needs access to the service. Going via the service registry in this
+ way ensures that a bean only sees services with compatible versions of
+ service types, and that OSGi platform dynamics are respected.</p>
+ </div>
+ </div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="bnd-app-ctx:bnd-lifecycle"></a>7.3.&nbsp;Bundle Lifecycle</h2></div></div></div>
+
+
+ <p>OSGi is a dynamic platform: bundles may be installed, started,
+ updated, stopped, and uninstalled at any time during the running of the
+ framework.</p>
+
+ <p>When an active bundle is stopped, any services it exported during
+ its lifetime are automatically unregistered and the bundle returns to
+ the resolved state. A stopped bundle should release any resources it has
+ acquired and terminate any threads. Packages exported by a stopped
+ bundle continue to be available to other bundles.</p>
+
+ <p>A bundle in the resolved state may be uninstalled: packages that
+ were exported by an uninstalled bundle continue to be available to
+ bundles that imported them (but not to newly installed bundles).A bundle
+ in the resolved state may also be updated. The update
+ process migrates from one version of a bundle to another version of the
+ same bundle.</p>
+
+ <p>Finally of course, a resolved bundle can be started, which
+ transitions it to the active state.</p>
+
+ <p>The diagram below represents the bundle states and its transitions:</p>
+
+ <div class="mediaobject" align="center"><img src="images/bundle-states.png" align="middle" alt="Bundle States"></div>
+
+
+ <p>The OSGi <code class="literal">PackageAdmin</code>
+ <code class="literal">refreshPackages</code> operation refreshes packages across
+ the whole OSGi framework or a given subset of installed bundles. During
+ the refresh, an application context in an affected bundle will be
+ stopped and restarted. After a <code class="literal">refreshPackages</code>
+ operation, packages exported by older versions of updated bundles, or
+ packages exported by uninstalled bundles, are no longer available.
+ Consult the OSGi specifications for full details.</p>
+
+ <p>When a Spring-powered or Blueprint bundle is stopped, the application context
+ created for it is automatically destroyed. All services exported by the
+ bundle will be unregistered (removed from the service registry) and the
+ normal application context tear-down life-cycle is observed
+ (<code class="interfacename">org.springframework.beans.factory.DisposableBean</code> implementors
+ and <code class="literal">destroy-method</code>
+ callbacks are invoked on beans in the context).</p>
+
+ <p>If a Spring-powered bundle that has been stopped is subsequently
+ re-started, a new application context will be created for it.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="bnd-app-ctx:osgi-resource"></a>7.4.&nbsp;The Resource Abstraction</h2></div></div></div>
+
+
+ <p>The Spring Framework defines a resource abstraction for loading
+ resources within an application context (see <a class="ulink" href="http://static.springframework.org/spring/docs/2.5.x/reference/resources.html" target="_top">Spring's
+ resource abstraction</a>). All resource loading is done through the
+ <code class="interfacename">org.springframework.core.io.ResourceLoader</code> associated with the application
+ context. The <code class="interfacename">org.springframework.core.io.ResourceLoader</code> is also
+ available to beans wishing to load resources programmatically. Resource paths with
+ explicit prefixes - such as <code class="literal">classpath:</code> - are treated uniformly
+ across all application context types (for example, web application
+ contexts and classpath-based application contexts). Relative resource
+ paths are interpreted differently based on the type of application
+ context being created. This enables easy integration testing outside
+ the ultimate deployment environment.</p>
+
+ <p>OSGi 4.0.x specification defines three different spaces from which a
+ resource can be loaded. Gemini Blueprint supports all of them through its dedicated OSGi-specific
+ application context and dedicated prefixes:</p>
+
+ <div class="table"><a name="osgi-search-strategies"></a><p class="title"><b>Table&nbsp;7.1.&nbsp;OSGi resource search strategies</b></p><div class="table-contents">
+
+ <table class="table" summary="OSGi resource search strategies" width="100%" border="1"><colgroup><col><col><col></colgroup><thead><tr><th>OSGi Search Strategy</th><th>Prefix</th><th>Explanation</th></tr></thead><tbody><tr><td>Class Space</td><td><code class="literal">classpath:</code></td><td>Searches the bundle classloader (the bundle, all imported packages and required bundles). Forces the bundle to be resolved.
+ This method has similar semantics to
+ <a class="ulink" href="http://www2.osgi.org/javadoc/r4/org/osgi/framework/Bundle.html#getResource(java.lang.String)" target="_top"><code class="literal">Bundle#getResource(String)</code></a></td></tr><tr><td>Class Space</td><td><code class="literal">classpath*:</code></td><td>Searches the bundle classloader (the bundle and all imported packages and required bundles). Forces the bundle to be resolved.
+ This method has similar semantics to
+ <a class="ulink" href="http://www2.osgi.org/javadoc/r4/org/osgi/framework/Bundle.html#getResources(java.lang.String)" target="_top"><code class="literal">Bundle#getResources(String)</code></a>
+ </td></tr><tr><td>JAR File (or JarSpace)</td><td><code class="literal">osgibundlejar:</code></td><td>Searches only the bundle jar. Provides low-level access without requiring the bundle to be resolved.</td></tr><tr><td>Bundle Space</td><td><code class="literal">osgibundle:</code></td><td>Searches the bundle jar and its attached fragments (if there are any). Does not create a class loader or force the bundle to be resolved.</td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>Please consult section 4.3.12 of the OSGi specification for an in depth explanation of the differences between them.
+ </p>
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">If no prefix is specified, the bundle space (<code class="literal">osgibundle:</code>) will be used.</td></tr></table></div>
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">Due to the OSGi dynamic nature, a bundle classpath can change during its life time (for example when dynamic imports are used). This might cause different
+ classpath <code class="interfacename">Resource</code>s to be returned when doing pattern matching based on the running environment or target platform.</td></tr></table></div>
+
+ <p>All of the regular Spring resource prefixes such as <code class="literal">file:</code> and
+ <code class="literal">http:</code> are also supported, as are the pattern matching wildcards.
+ Resources loaded using such prefixes may come from any location, they
+ are not restricted to being defined within the resource-loading bundle
+ or its attached fragments.</p>
+
+ <p>OSGi platforms may define their own unique prefixes for accessing
+ bundle contents. For example, Equinox defines the <code class="literal">bundleresource:</code> and
+ <code class="literal">bundlentry:</code> prefixes. These platform specific prefixes may also be
+ used with Gemini Blueprint, at the cost, of course, of tying yourself to a
+ particular OSGi implementation.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="bnd-app-ctx:bundle-scope"></a>7.5.&nbsp;Bundle Scope</h2></div></div></div>
+
+
+ <p>Gemini Blueprint introduces a new bean scope named <code class="literal">bundle</code>. This scope is relevant for
+ beans exported as an OSGi service and can be described as <span class="emphasis"><em>one instance per bundle</em></span>.
+ Beans exported as OSGi service, that have <code class="literal">bundle</code> scope, will result in a different instance created for
+ each unique bundle that imports the service through the OSGi service registry. Consumers of the same bundle (whether defined
+ through Gemini Blueprint or not) will see the same bean instance. When a bundle has stopped importing the bundle (for whatever reason),
+ the bean instance is disposed.
+ To the declaring bundle, a <code class="literal">bundle</code>-scoped bean behaves just like a singleton (i.e. there is only
+ one instance per bundle, including the declaring one).This contract lifecycle is similar to that of the
+ <code class="interfacename">org.osgi.framework.ServiceFactory</code> interface.</p>
+ <p>For more information regarding service publication and consumption, see <a class="xref" href="#service-registry" title="Chapter&nbsp;9.&nbsp;The Service Registry">Chapter&nbsp;9, <i>The Service Registry</i></a>.</p>
+
+ <div class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Important"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="images/admons/important.png"></td><th align="left">Important</th></tr><tr><td align="left" valign="top">The bundle scope is relevant, only if the declaring bean is consumed through the OSGi service registry. That is,
+ instances are created and destroyed (tracked) only when the bean exported as a service, is requested or released as an OSGi service
+ by other bundles.</td></tr></table></div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="bnd-app-ctx:access-bnd-ctx"></a>7.6.&nbsp;Accessing the BundleContext</h2></div></div></div>
+
+
+ <p>In general there is no need to depend on any OSGi APIs when using
+ the Gemini Blueprint support. If you <span class="emphasis"><em>do</em></span> need
+ access to the OSGi <code class="interfacename">BundleContext</code> object for your
+ bundle, then Spring makes this easy to do.</p>
+
+ <p>The OSGi application context created by the Spring extender will
+ automatically contain a bean of type <code class="interfacename">BundleContext</code>
+ and with name <code class="literal">bundleContext</code>. You can inject a
+ reference to this bean into any bean in the application context either
+ by-name or by-type. In addition, Gemini Blueprint defines the
+ interface
+ <code class="interfacename">org.eclipse.gemini.blueprint.context.BundleContextAware</code>:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">interface</strong> BundleContextAware {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> setBundleContext(BundleContext context);
+}</pre>
+
+ <p>Any bean implementing this interface will be injected with a
+ reference to the bundle context when it is configured by Spring. If you
+ wish to use this facility within a bundle, remember to import the
+ package <code class="literal">org.eclipse.gemini.blueprint.context</code> in your
+ bundle manifest since otherwise the interface will not be visible to your bundle.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="bnd-app-ctx:app-destruction"></a>7.7.&nbsp;Application Context Destruction</h2></div></div></div>
+
+
+ <p>The application context is bound to the bundle in which it lives. Thus, if the declaring
+ bundle is being shutdown (for whatever reasons), the application context will be destroyed as well,
+ all exported services being unregistered and all service imported dispose of.
+ </p>
+
+ <p>As opposed to the application creation, the application context is destroyed in a synchronized manner,
+ on the same thread that stops the bundle. This is required since once stopped, a bundle can not longer be used
+ (even for class loading) preventing the application context shutdown from executing correctly.
+ </p>
+
+ <div class="mediaobject" align="center"><img src="images/stop-diagram.png" align="middle" alt="Application Context Sequence Diagram"></div>
+
+
+ <p>Note that a bundle can be closed individually or as part of a bigger
+ event such as shutting down the entire OSGi platform. In this case or when the extender
+ bundle is being closed down, the application contexts will be closed in a managed
+ manner, based on the service dependencies between them. Please see the next section for more
+ details.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="bnd-app-ctx:access-bnd-ctx:stop-extender"></a>7.8.&nbsp;Stopping the Extender Bundle</h2></div></div></div>
+
+
+ <div class="sidebar"><a name="shutdown-2.x"></a><div class="titlepage"><div><div><p class="title"><b>Shutdown algorithm change in 2.x</b></p></div></div></div>
+
+ <p>The shutdown algorithm implementation in Gemini Blueprint 1.0 has been revised to be better
+ aligned with the Blueprint Container spec. Namely, the previous implementation performed ordering
+ in only one pass while the latter performs multiple steps to accommodate the service changes in
+ the OSGi space. Users should not discover any differences at runtime however, if that's not the case,
+ please let us know.
+ </p>
+ </div>
+
+ <p>If the extender bundle is stopped, then all the application
+ contexts created by the extender will be destroyed. The algorithm described here is identical
+ to that used by the Blueprint specification (section 121.3.11). Application contexts
+ are shutdown in the following order:</p>
+
+ <div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
+ <p>Application contexts that do not export any services, or that
+ export services that are not currently referenced, are shutdown in
+ reverse order of bundle id. (Most recently installed bundles have
+ their application contexts shutdown first).</p>
+ </li><li class="listitem">
+ <p>Shutting down the application contexts in step 1 may have
+ released references these contexts were holding such that there are
+ now additional application contexts that can be shutdown. If so,
+ repeat <a class="link" href="#bnd-app-ctx:access-bnd-ctx:stop-extender:shutdown.step.1">step 1</a> again.</p>
+ </li><li class="listitem">
+ <p>If there are no more active application contexts, we have
+ finished. If there <span class="emphasis"><em>are</em></span> active application
+ contexts then there must be a cyclic dependency of references. The
+ circle is broken by determining the highest ranking service exported
+ by each context: the bundle with the lowest ranking service in this
+ set (or in the event of a tie, the highest service id), is shut
+ down. Repeat from <a class="link" href="#bnd-app-ctx:access-bnd-ctx:stop-extender:shutdown.step.1">step 1</a>.</p>
+ </li></ol></div>
+ </div>
+</div>
+ <div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="app-deploy"></a>Chapter&nbsp;8.&nbsp;Packaging and Deploying Spring-based OSGi applications</h2></div></div></div>
+
+
+ <p>A traditional Spring application uses either a single application
+ context, or a parent context containing service layer, data layer, and
+ domain objects with a child context containing web layer components. The
+ application context may well be formed by aggregating the contents of
+ multiple configuration files.</p>
+
+ <p>When deploying an application to OSGi the more natural structure is
+ to package the application as a set of peer bundles (application contexts)
+ interacting via the OSGi service registry. Independent subsystems should
+ be packaged as independent bundles or sets of bundles (vertical
+ partitioning). A subsystem may be package in a single bundle, or divided
+ into several bundles partitioned by layer (horizontal partitioning). A
+ straightforward web application may for example be divided into four
+ modules (bundles): a web bundle, service layer bundle, data layer bundle,
+ and domain model bundle. Such an application would look like this:</p>
+
+ <div class="mediaobject" align="center"><img src="images/spring-osgi-model.png" align="middle" alt="Bundles and Application Contexts"></div>
+
+ <p>In this example the data layer bundle yields a data layer
+ application context that contains a number of internal components (beans).
+ Two of those beans are made publicly available outside of the application
+ context by publishing them as services in the OSGi service
+ registry.</p>
+
+ <p>The service layer bundle yields a service layer application context
+ that contains a number of internal components (beans). Some of those
+ components depend on data layer services, and import those services from
+ the OSGi service registry. Two of the service layer components are made
+ externally available as services in the OSGi service registry.</p>
+
+ <p>The web component bundle yields a web application context that
+ contains a number of internal components (beans). Some of those components
+ depend on application services, and import those services from the OSGi
+ service registry. Since the domain model bundle contributes only domain
+ model types, but does not need to create any components of its own, it has
+ no associated application context.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="app-deploy:headers"></a>8.1.&nbsp;Bundle Format And Manifest Headers</h2></div></div></div>
+
+
+ <p>Each application module should be packaged as an OSGi bundle. A
+ bundle is essentially a jar file with a
+ <code class="literal">META-INF/MANIFEST.MF</code> file containing a series of
+ headers recognized by the OSGi Service Platform. See the OSGi Service
+ Platform Core Specification section 3.2 for details. Some OSGi
+ implementations may support exploded jar files, but the format remains
+ the same.</p>
+
+ <p>The Spring extender recognizes a bundle as "Spring-powered" and
+ will create an associated application context when the bundle is started
+ and one or both of the following conditions is true:</p>
+
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <p>The bundle path contains a folder
+ <code class="literal">META-INF/spring</code> with one or more files in that
+ folder with a '.xml' extension.</p>
+ </li><li class="listitem">
+ <p><code class="literal">META-INF/MANIFEST.MF</code> contains a manifest
+ header <code class="literal">Spring-Context</code>.</p>
+ </li></ul></div>
+
+ <p>In addition, if the optional
+ <code class="literal">SpringExtender-Version</code> header is declared in the
+ bundle manifest, then the extender will only recognize bundles where the
+ specified version constraints are satisfied by the version of the
+ extender bundle (<code class="literal">Bundle-Version</code>). The value of the
+ <code class="literal">SpringExtender-Version</code> header must follow the syntax
+ for a version range as specified in section 3.2.5 of the OSGi Service
+ Platform Core Specification.</p>
+
+ <p>In the absence of the <code class="literal">Spring-Context</code> header the
+ extender expects every ".xml" file in the
+ <code class="literal">META-INF/spring</code> folder to be a valid Spring
+ configuration file, and all directives (see below) take on their default
+ values.</p>
+
+ <div class="tip" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Tip"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="images/admons/tip.png"></td><th align="left"><a name="app-deploy:headers:xml:tip"></a>Tip</th></tr><tr><td align="left" valign="top"><p>An application context is constructed from this set of files. A
+ suggested practice is to split the application context configuration
+ into at least two files, named by convention
+ <span class="emphasis"><em>modulename</em></span>-context.xml and
+ <span class="emphasis"><em>modulename</em></span>-osgi-context.xml. The
+ <span class="emphasis"><em>modulename</em></span>-context.xml file contains regular bean
+ definitions independent of any knowledge of OSGi. The
+ <span class="emphasis"><em>modulename</em></span>-osgi-context.xml file contains the bean
+ definitions for importing and exporting OSGi services. It may (but is
+ not required to) use the Gemini Blueprint OSGi schema as the
+ top-level namespace instead of the Spring 'beans' namespace.</p>
+ </td></tr></table></div>
+
+ <p>The <code class="literal">Spring-Context</code> manifest header may be used
+ to specify an alternate set of configuration files. The resource paths
+ are treated as relative resource paths and resolve to entries defined in
+ the bundle and the set of attached <a class="link" href="#appendix-tips:fragments" title="C.1.&nbsp;OSGi Fragments">fragments</a>.
+ When the
+ <code class="literal">Spring-Context</code> header defines at least one
+ configuration file location, any files in
+ <code class="literal">META-INF/spring</code> are ignored unless directly
+ referenced from the <code class="literal">Spring-Context</code> header.</p>
+
+ <p>The syntax for the <code class="literal">Spring-Context</code> header value
+ is:</p>
+
+ <pre class="programlisting">Spring-Context-Value ::= context ( ',' context ) *
+context ::= path ( ';' path ) * (';' directive) *
+</pre>
+
+ <p>This syntax is consistent with the OSGi Service Platform common
+ header syntax defined in section 3.2.3 of the OSGi Service Platform Core
+ Specification.</p>
+
+ <p>For example, the manifest entry:</p>
+
+ <pre class="programlisting">Spring-Context: config/account-data-context.xml, config/account-security-context.xml
+</pre>
+
+ <p>will cause an application context to be instantiated using the
+ configuration found in the files
+ <code class="literal">account-data-context.xml</code> and
+ <code class="literal">account-security-context.xml</code> in the bundle jar
+ file.</p>
+
+ <p>A number of directives are available for use with the
+ <code class="literal">Spring-Context</code> header. These directives are:</p>
+
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <p><span class="emphasis"><em>create-asynchronously</em></span> (false|true):
+ controls whether the application context is created asynchronously
+ (the default), or synchronously.</p>
+
+ <p>For example:</p>
+
+ <pre class="programlisting">Spring-Context: *;create-asynchronously:=false
+</pre>
+
+ <p>Creates an application context synchronously, using all of the
+ "*.xml" files contained in the <code class="literal">META-INF/spring</code>
+ folder.</p>
+
+ <pre class="programlisting">Spring-Context: config/account-data-context.xml;create-asynchrously:=false
+</pre>
+
+ <p>Creates an application context synchronously using the
+ <code class="literal">config/account-data-context.xml</code> configuration file.
+ Care must be taken when specifying synchronous context creation as the
+ application context will be created on the OSGi event thread, blocking
+ further event delivery until the context is fully initialized. If an
+ error occurs during the synchronous creation of the application context
+ then a <code class="literal">FrameworkEvent.ERROR</code> event is raised. The bundle will still
+ proceed to the <code class="literal">ACTIVE</code> state.</p>
+ </li><li class="listitem">
+ <p><span class="emphasis"><em>wait-for-dependencies</em></span> (true|false):
+ controls whether or not application context creation should wait for
+ any mandatory service dependencies to be satisfied before proceeding
+ (the default), or proceed immediately without waiting if
+ dependencies are not satisfied upon startup.</p>
+
+ <p>For example:</p>
+
+ <pre class="programlisting">Spring-Context: config/osgi-*.xml;wait-for-dependencies:=false
+</pre>
+
+ <p>Creates an application context using all the files matching
+ "osgi-*.xml" in the config directory. Context creation will begin
+ immediately even if dependencies are not satisfied. This essentially
+ means that mandatory service references are treated as though they were
+ optional - clients will be injected with a service object that may not
+ be backed by an actual service in the registry initially. See
+ <a class="xref" href="#service-registry:refs:singular:dynamics" title="9.2.3.9.&nbsp;reference And OSGi Service Dynamics">Section&nbsp;9.2.3.9, &#8220;<code class="literal">reference</code> And OSGi Service Dynamics&#8221;</a> for more details.</p>
+ </li><li class="listitem">
+ <p><span class="emphasis"><em>timeout</em></span> (300): the time to wait (in
+ seconds) for mandatory dependencies to be satisfied before giving up
+ and failing application context creation. This setting is ignored if
+ <code class="literal">wait-for-dependencies:=false</code> is specified. The
+ default is 5 minutes (300 seconds).</p>
+
+ <p>For example:</p>
+
+ <pre class="programlisting">Spring-Context: *;timeout:=60
+</pre>
+ <p>Creates an application context that waits up to 1 minute (60 seconds)
+ for its mandatory dependencies to appear.
+ </p>
+ </li><li class="listitem">
+ <p><span class="emphasis"><em>publish-context</em></span> (true|false): controls
+ whether or not the application context object itself should be
+ published in the OSGi service registry. The default is to publish
+ the context.</p>
+
+ <p>For example:</p>
+
+ <pre class="programlisting">Spring-Context: *;publish-context:=false
+</pre>
+
+ <p>If there is no <code class="literal">Spring-Context</code> manifest entry, or no value is
+ specified for a given directive in that entry, then the directive takes
+ on its default value.</p>
+ </li></ul></div>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="app-deploy:headers:blueprint"></a>8.2.&nbsp;Blueprint Manifest Configuration Comparison</h2></div></div></div>
+
+
+ <p>The table below summarizes the differences between the manifest configuration options in Eclipse Gemini Blueprint/Spring DM and Blueprint Container:</p>
+
+ <div class="table"><a name="sdm-vs-blueprint-config-attr"></a><p class="title"><b>Table&nbsp;8.1.&nbsp;Configuration Setting Differences</b></p><div class="table-contents">
+
+ <table class="table" summary="Configuration Setting Differences" width="100%" border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Option</th><th>Gemini Blueprint/Spring DM</th><th>Blueprint</th></tr></thead><tbody><tr><td>Default Configuration Location</td><td><code class="literal">META-INF/spring</code></td><td><code class="literal">OSGI-INF/blueprint</code></td></tr><tr><td>Custom Locations Header</td><td><code class="literal">Spring-Context</code></td><td><code class="literal">Bundle-Blueprint</code></td></tr><tr><td>Attribute Header</td><td><code class="literal">Spring-Context</code></td><td><code class="literal">Bundle-SymbolicName</code></td></tr><tr><td>Asynchronous Creation Attribute</td><td><code class="literal">create-asynchronously</code></td><td><code class="literal">-</code></td></tr><tr><td>Startup Mandatory Dependencies Attribute</td><td><code class="literal">wait-for-dependencies</code></td><td><code class="literal">blueprint.graceperiod</code></td></tr><tr><td>Startup Mandatory Timeout Attribute</td><td><code class="literal">timeout</code> (in s)</td><td><code class="literal">blueprint.timeout</code> (in ms)</td></tr><tr><td>Container API Service Publication Attribute</td><td><code class="literal">publish-context</code></td><td><code class="literal">-</code></td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>The manifests below are equivalent in terms of settings:</p>
+
+ <div class="programlistingco"><pre class="programlisting">Bundle-SymbolicName: org.example.account.bundle
+Spring-Context: config/account-data-context.xml, config/osgi-*.xml; <span class="co" id="blueprint:vs:mf:attr:sdm"><img src="images/callouts/1.png" alt="(1)"></span>
+ wait-for-dependencies:=true;
+ timeout:=10 <span class="co" id="blueprint:vs:mf:timeout:s"><img src="images/callouts/2.png" alt="(2)"></span>
+</pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p>All Gemini Blueprint/Spring DM specific attributes are grouped under <code class="literal">Spring-Context</code> header.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>Timeout specified in <span class="emphasis"><em>seconds</em></span>.</p>
+ </td></tr></table></div></div>
+
+ <div class="programlistingco"><pre class="programlisting">Bundle-SymbolicName: org.example.account.bundle; <span class="co" id="blueprint:vs:mf:attr:bp.1"><img src="images/callouts/1.png" alt="(1)"></span>
+ blueprint.graceperiod:=true;
+ blueprint.timeout:=10000 <span class="co" id="blueprint:vs:mf:timeout:ms"><img src="images/callouts/2.png" alt="(2)"></span>
+Blueprint-Bundle: config/account-data-context.xml, config/osgi-*.xml <span class="co" id="blueprint:vs:mf:attr:bp.2"><img src="images/callouts/1.png" alt="(1)"></span>
+</pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p>Blueprint settings are spread between <code class="literal">Bundle-SymbolicName</code> and <code class="literal">Blueprint-Bundle</code>.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>Timeout specified in <span class="emphasis"><em>milliseconds</em></span>.</p>
+ </td></tr></table></div></div>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="app-deploy:extender-configuration"></a>8.3.&nbsp;Extender Configuration Options</h2></div></div></div>
+
+
+ <p>Aside from bundle-specific configurations, Gemini Blueprint/Spring DM allows the core extender generic behaviour be configured. This is useful when
+ embedding Spring DM inside a managed environment or when a bundles-wide functionality is desired. To allow for extensible configuration,
+ the extender relies on OSGi <a class="link" href="#appendix-tips:fragments" title="C.1.&nbsp;OSGi Fragments">fragments</a> to override its defaults. The extender looks for all XML files
+ under <code class="literal">META-INF/spring/extender</code> folder in its bundle space and assembled them into an application context
+ (of type <code class="classname">OsgiBundleXmlApplicationContext</code>)
+ that is used internally as its configuration. To override a default setting of the extender, look up the appropriate bean
+ name from the table below, define it in a suitable manner and then attach it as a <a class="link" href="#appendix-tips:fragments" title="C.1.&nbsp;OSGi Fragments">fragment</a> to the
+ <code class="literal">spring-osgi-extender.jar</code>, using:</p>
+ <pre class="programlisting">Fragment-Host: org.eclipse.gemini.blueprint.extender</pre>
+
+ <p>The following beans are currently recognized by the extender:</p>
+
+ <div class="table"><a name="extender-configuration-options"></a><p class="title"><b>Table&nbsp;8.2.&nbsp;Extender Configuration Options</b></p><div class="table-contents">
+
+ <table class="table" summary="Extender Configuration Options" width="100%" border="1"><colgroup><col><col><col><col></colgroup><thead><tr><th>Bean Name</th><th>Type</th><th>Role</th><th>Default Behaviour/Value</th></tr></thead><tbody><tr><td><code class="literal">taskExecutor</code></td><td><code class="interfacename">TaskExecutor</code>
+ <a href="#ftn.d21e935" class="footnote" name="d21e935"><sup class="footnote">[a]</sup></a></td><td>Creates and runs the Spring application contexts associated with each bundle. The task executor is responsible for managing its own pool
+ of threads used by the application contexts</td><td><code class="classname">ThreadPoolTaskExecutor</code> with a maximum number of threads equal to the number of available processors is used by default.</td></tr><tr><td><code class="literal">shutdownTaskExecutor</code></td><td><code class="interfacename">TaskExecutor</code>
+ <a href="#ftn.d21e945" class="footnote" name="d21e945"><sup class="footnote">[b]</sup></a></td><td>Destroys managed Spring application contexts associated with each bundle. The task executor is responsible for managing its own pool
+ of threads used by the application contexts</td><td><code class="classname">ThreadPoolTaskExecutor</code> with a single thread is used by default which means all application context will be destroyed in a serialized manner (which is
+ desired). Since the shutdown order normally matters, it is recommended to keep the default implementation or, for managed environments, to use a thread-pool
+ that executes only one task at a time (so that contexts are stopped in the given order).</td></tr><tr><td><code class="literal">extenderProperties</code></td><td><code class="classname">java.util.Properties</code></td><td>Defines simple properties such as the maximum time for contexts to gracefully close</td><td>See the <a class="link" href="#extender-configuration-options-properties" title="Table&nbsp;8.3.&nbsp;Available extenderProperties">defaults</a> below</td></tr><tr><td><code class="literal">osgiApplicationEventMulticaster</code></td><td><code class="interfacename">ApplicationEventMulticaster</code>
+ <a href="#ftn.d21e963" class="footnote" name="d21e963"><sup class="footnote">[c]</sup></a>
+ </td><td><code class="literal"><a class="ulink" href="https://docs.spring.io/spring/docs/4.2.x/javadoc-api/org/springframework/context/event/ApplicationEventMulticaster.html" target="_top">
+ ApplicationEventMultiCaster</a></code> used for propagating Gemini Blueprint/Spring DM <a class="link" href="#app-deploy:extender-configuration:events" title="8.3.1.&nbsp;Listening To Extender Events">events</a>
+ to third parties.
+ </td><td>An instance of <code class="classname"><a class="ulink" href="https://docs.spring.io/spring/docs/4.2.x/javadoc-api/org/springframework/context/event/SimpleApplicationEventMulticaster.html" target="_top">
+ SimpleApplicationEventMulticaster</a></code> is used.
+ See <code class="classname">AbstractApplicationContext</code>
+ <a class="ulink" href="https://docs.spring.io/spring/docs/4.2.x/javadoc-api/org/springframework/context/support/AbstractApplicationContext.html" target="_top">javadoc</a>
+ for more information regarding available beans in an application context.</td></tr><tr><td><a name="extender-configuration-options:acc"></a><code class="literal">applicationContextCreator</code></td><td><code class="interfacename">OsgiApplicationContextCreator</code>
+ <a href="#ftn.extender-configuration-options:extender.pkg" class="footnote" name="extender-configuration-options:extender.pkg"><sup class="footnote">[d]</sup></a>
+ </td><td>Allows customization of the application context created by the extender. This includes changing the application context class type or additional
+ processing (see <a class="link" href="#extender-configuration-options:obfpp">below</a>).</td><td>The Extender default behaviour applies.</td></tr><tr><td><a name="extender-configuration-options:obfpp"></a><span class="emphasis"><em>(irrelevant)</em></span></td><td><code class="interfacename">OsgiBeanFactoryPostProcessor</code>
+ <a href="#ftn.extender-configuration-options:extender.pkg" class="footnoteref"><sup class="footnoteref">[d]</sup></a>
+ </td><td>Similar to Spring's <code class="interfacename">BeanFactoryPostProcessor</code> interface, beans of type
+ <code class="interfacename">OsgiBeanFactoryPostProcessor</code> are automatically detected and applied to all contexts created by the
+ extender (whether <a class="link" href="#extender-configuration-options:acc">user-defined</a> or not). This type of post processor
+ is useful as it allows customization of the bean factory such as adding/removing/changing existing bean definitions or adding new bean
+ instances.</td><td>The Extender default behaviour applies.</td></tr><tr><td><a name="extender-configuration-options:contextListener"></a><code class="literal">osgiApplicationContextListener</code></td><td><code class="interfacename">OsgiBundleApplicationContextListener</code>
+ <a href="#ftn.extender-configuration-options:event.pkg" class="footnote" name="extender-configuration-options:event.pkg"><sup class="footnote">[e]</sup></a>
+ </td><td>Application context event listener registered automatically by the extender.</td><td>Default implementation provides logging of the managed application contexts lifecycle.</td></tr></tbody><tbody class="footnotes"><tr><td colspan="4"><div id="ftn.d21e935" class="footnote"><code class="literal"><a href="#d21e935" class="literal"><sup>[a] </sup></a>org.springframework.core.task</code></div><div id="ftn.d21e945" class="footnote"><code class="literal"><a href="#d21e945" class="literal"><sup>[b] </sup></a>org.springframework.core.task</code></div><div id="ftn.d21e963" class="footnote"><code class="literal"><a href="#d21e963" class="literal"><sup>[c] </sup></a>org.springframework.context.event</code></div><div id="ftn.extender-configuration-options:extender.pkg" class="footnote"><code class="literal"><a href="#extender-configuration-options:extender.pkg" class="literal"><sup>[d] </sup></a>org.eclipse.gemini.blueprint.extender package</code></div><div id="ftn.extender-configuration-options:event.pkg" class="footnote"><code class="literal"><a href="#extender-configuration-options:event.pkg" class="literal"><sup>[e] </sup></a>org.eclipse.gemini.blueprint.context.event package</code></div></td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>From the <code class="literal">extenderProperties</code> bean, the following properties are recognized:</p>
+
+ <p>In addition, in Eclipse Gemini Blueprint a new system property has been introduced to control whether bundles providing namespace extensions should be considered in RESOLVED (default)
+ or STARTED state. The former allows namespaces to be picked up as soon as a bundle installed into the OSGi framework has its dependencies resolved - the advantage is that the namespaces become
+ available as soon as possible but on the downside, one needs to remove the source bundle in order to remove the namespace.
+ The latter forces namespaces to be considered only when the source bundles are actually started - to remove a namespace simply stop the owning bundle. However the order in which the bundles
+ are started influences the available namespace - the bundles providing the namespaces need to start before the bundles that require them - depending on the app such a dependency graph can create
+ some subtle problems (at runtime).
+
+ Thus, if the system property <code class="literal">org.eclipse.gemini.blueprint.ns.bundles.started</code> is defined and set to <code class="literal">true</code> then only namespace bundles <span class="emphasis"><em>started</em></span>
+ will be considered, if not the ones <span class="emphasis"><em>resolved</em></span> will be used.
+ </p>
+
+ <div class="table"><a name="extender-configuration-options-properties"></a><p class="title"><b>Table&nbsp;8.3.&nbsp;Available <code class="literal">extenderProperties</code></b></p><div class="table-contents">
+
+ <table class="table" summary="Available extenderProperties" width="100%" border="1"><colgroup><col><col><col><col></colgroup><thead><tr><th>Name</th><th>Type</th><th>Description</th><th>Default Value</th></tr></thead><tbody><tr><td><code class="literal">shutdown.wait.time</code></td><td><code class="classname">java.lang.Long</code></td><td>The amount of time the extender will wait for each application context to shutdown gracefully. Expressed in milliseconds.</td><td>10000 ms (10 s)</td></tr><tr><td><code class="literal">shutdown.asynchronously</code></td><td><code class="classname">boolean</code></td><td>
+ Whether the extender shall shutdown each application context asynchronously. If <code class="literal">false</code>,
+ the <code class="literal">shutdown.wait.time</code> is ignored. Accordingly, application contexts blocking during close will block the bundle shutdown.
+ </td><td><code class="literal">true</code></td></tr><tr><td><code class="literal">dependencies.wait.time</code></td><td><code class="classname">java.lang.Long</code></td><td>The amount of time the newly created application contexts will wait for their mandatory service dependencies during startup. Expressed
+ in milliseconds. This settings is used only if the context owning bundle manifest does <span class="emphasis"><em>not</em></span> define a value. </td><td>300000 ms (300 s or 5 min)</td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">Since an application context is used, the full power of the Spring IoC container can be used for creating the extender configuration beans.</td></tr></table></div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="app-deploy:extender-configuration:events"></a>8.3.1.&nbsp;Listening To Extender Events</h3></div></div></div>
+
+
+ <p>There are cases when the failure or succesful startup of an application context needs to be acknowledged for logging purposes (for example).
+ For these cases, Gemini Blueprint/Spring DM offers a dedicated package <code class="literal">org.eclipse.gemini.blueprint.context.event</code> which defines the events that
+ OSGi application contexts can send during their lifecycle. At the moment, the following events are available:</p>
+
+ <div class="table"><a name="app-deploy:extender-configuration:events-table"></a><p class="title"><b>Table&nbsp;8.4.&nbsp;Gemini Blueprint/Spring DM build-in events</b></p><div class="table-contents">
+
+ <table class="table" summary="Gemini Blueprint/Spring DM build-in events" width="100%" border="1"><colgroup><col><col></colgroup><thead><tr><th>Event</th><th>Explanation</th></tr></thead><tbody><tr><td><code class="classname">OsgiBundleContextRefreshedEvent</code></td><td>Published when an OSGi application context has been succesfully initialized or refreshed (e.g. using the
+ <code class="methodname">refresh()</code> method on the <code class="interfacename">ConfigurableApplicationContext</code> interface).
+ There are no guarantees on how many times this event might be received during the lifecycle of an application context - this is
+ left up to the used implementation.</td></tr><tr><td><code class="classname">OsgiBundleContextFailedEvent</code></td><td>Published when an OSGi application context is closed due to a failure. This event can appear any time during the lifecycle
+ of an application context - before, during or after refresh. Usually the cause indicates an error in the configuration - syntax typo,
+ incorrect wiring, missing bean and so forth.</td></tr><tr><td><code class="classname">OsgiBundleContextClosedEvent</code></td><td>Published when an OSGi application context is closed after a successful refresh (normally issued a Spring bundle is being stopped).
+ </td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>Parties interested in receiving these events should implement <code class="interfacename">OsgiBundleApplicationContextListener</code> and
+ then publish it as an OSGi service. The Gemini Blueprint/Spring DM extender will automatically detect the listener and will send the events to it. By taking advantage
+ of the OSGi service registry, the extender decouples the received from the event publisher and moreover, makes the registration/unregistration process
+ easier. For example, there is nothing special a client should do to unregister the listener - simply stopping the bundle will automatically
+ unregister all its published services (including the listener), an event which will detected by the extender which will remove the listener.
+ Of course, it is also possible for the client to unregister the listener manually during a bundle lifecycle.
+
+ </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">The Gemini Blueprint/Spring DM events semantics are slightly different then
+ <a class="ulink" href="http://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/beans.html#context-functionality-events" target="_top">Spring's</a>. The OSGi events are
+ not sent to beans inside the <span class="emphasis"><em>causing</em></span> application context but to other parties (possible beans in other application contexts)
+ interested in monitoring its behaviour.</td></tr></table></div><p>
+ </p>
+ </div>
+ </div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="app-deploy:required-libraries"></a>8.4.&nbsp;Required Spring Framework And Gemini Blueprint
+ Bundles</h2></div></div></div>
+
+
+ <p>The Gemini Blueprint project provides a number of bundle
+ artifacts that must be installed in your OSGi platform in order for the
+ Spring extender to function correctly:</p>
+
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <p>The extender bundle itself,
+ <code class="literal">org.eclipse.gemini.blueprint.extender</code></p>
+ </li><li class="listitem">
+ <p>The core implementation bundle for the Gemini Blueprint
+ support, <code class="literal">org.eclipse.gemini.blueprint.core</code></p>
+ </li><li class="listitem">
+ <p>The Gemini Blueprint I/O support library bundle,
+ <code class="literal">org.eclipse.gemini.blueprint.io</code></p>
+ </li></ul></div>
+
+ <p>In addition, the Spring Framework provides a number of bundles that
+ are required to be installed as dependencies. As of release 4.2.4 of the
+ Spring Framework, OSGi bundle versions are maintained by the Apache ServiceMix team and published using their group id, see for example
+ <a class="ulink" href="http://search.maven.org/#search|ga|1|g%3Aorg.apache.servicemix.bundles%20spring-" target="_top">all Spring OSGi artifacts published in maven central</a>.
+ </p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="app-deploy:optional-libraries"></a>8.5.&nbsp;Optional Gemini Blueprint Bundles</h2></div></div></div>
+
+
+ <p>Optionally, the following bundles may be installed to augment the Gemini Blueprint core functionality:</p>
+
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <p>The Gemini Blueprint propriertary extensions bundle,
+ <code class="literal">org.eclipse.gemini.blueprint.extensions</code></p>
+ </li></ul></div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="app-deploy:spring-namespaces"></a>8.6.&nbsp;Spring XML Authoring Support</h2></div></div></div>
+
+
+ <p>Spring 2.0 introduced (among other things) <a class="ulink" href="https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/oxm.html#oxm-schema-based-config" target="_top">
+ easier</a> XML configuration and <a class="ulink" href="https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/xml-custom.html" target="_top">
+ extensible</a> XML authoring. The latter gives the ability of creating custom schemas that are discovered automatically (in non-OSGi environment)
+ by the Spring XML infrastructure by including them in the classpath. Gemini Blueprint/Spring DM is aware of this process and supports it in OSGi environments so
+ that custom schemas are available to bundles that use them without any extra code or manifest declaration.</p>
+ <p>All bundles deployed in the OSGi space (whether they are <code class="literal">Spring-powered</code> or not) are scanned by Gemini Blueprint/Spring DM for
+ custom Spring namespace declaration (by checking the bundle space for<code class="literal">META-INF/spring.handlers</code> and
+ <code class="literal">META-INF/spring.schemas</code>). If these are found, Gemini Blueprint/Spring DM will make the schemas and the namespaces available through an OSGi
+ service that will be automatically used by Spring-powered bundles. This mean that if you deploy a bundle that uses a custom schema, all you have to do
+ is deploy the library that provides the namespace parser and the schema.
+ Bundles that embedded inside their classpath libraries that provide custom schemas will use these over those available in the OSGi space. However,
+ the namespaces of the embedded libraries will not shared with other bundles, that is, they will not be seen by any other bundle.</p>
+ <p>
+ In short, when using Gemini Blueprint/Spring DM, custom Spring namespaces are supported transparently without any additional work. Embedded namespace providers will
+ have priority but will not be shared, as opposed to providers deployed as bundles which will be seen (and used) by others.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="app-deploy:imports-exports"></a>8.7.&nbsp;Importing and Exporting Packages</h2></div></div></div>
+
+
+ <p>Refer to the OSGi Service Platform for details of the
+ <code class="literal">Import-Package</code> and <code class="literal">Export-Package</code>
+ manifest headers. Your bundle will need an
+ <code class="literal">Import-Package</code> entry for every external package that
+ the bundle depends on. If your bundle provides types that other bundles
+ need access to, you will need <code class="literal">Export-Package</code> entries
+ for every package that should be available from outside of the
+ bundle.</p>
+
+ <div class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Important"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="images/admons/important.png"></td><th align="left">Important</th></tr><tr><td align="left" valign="top">Both <code class="literal">Export</code> and <code class="literal">Import-Package</code> have a crucial role in defining a bundle class space. If used incorrectly,
+ the bundle might not be able to load certain classes or resources, load incorrect versions or even load multiple versions at the same time which usually
+ result in <code class="literal">ClassCastException</code>, <code class="literal">NoClassDefFoundError</code> or <code class="literal">LinkageError</code>. We strongly
+ recommend that you get familiar with the basics and, at least for starters, use tools
+ (such as <a class="ulink" href="https://docs.spring.io/s2-bundlor/1.0.x/user-guide/html/" target="_top">Bundlor</a> or <a class="ulink" href="http://www.aqute.biz/Bnd/Bnd" target="_top">BND</a>) for creating proper
+ OSGi manifests.</td></tr></table></div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="app-deploy:ext-libs"></a>8.8.&nbsp;Considerations When Using External Libraries</h2></div></div></div>
+
+
+ <div class="sidebar"><div class="titlepage"><div><div><p class="title"><b>What is the context class loader?</b></p></div></div></div>
+
+
+ <p>
+ The thread context class loader was introduced in J2SE without much fanfare.
+ Below is a short definition for it, quoted from <a class="ulink" href="http://java.sun.com/products/jndi/tutorial/beyond/misc/classloader.html" target="_top">one
+ </a> of the tutorials available on <a class="ulink" href="http://java.sun.com/" target="_top">Java</a> site:
+ </p>
+ <p>
+ The Java 2 platform also introduced the notion of <span class="emphasis"><em>context class loader</em></span>. A thread's context class loader is, by default,
+ set to the context class loader of the thread's parent. The hierarchy of threads is rooted at the primordial thread (the one that runs the program).
+ The context class loader of the primordial thread is set to the class loader that loaded the application. So unless you explicitly change
+ the thread's context class loader, its context class loader will be the application's class loader. That is, the context class loader can
+ load the classes that the application can load. This loader is used by the Java runtime such as the RMI (Java Remote Method Invocation) to
+ load classes and resources on behalf of the user application. The context class loader, like any Java 2 platform class loader, has a parent
+ class loader and supports the same delegation model for class loading described previously.
+ </p>
+ </div>
+
+ <p>Many enterprise application libraries assume that all of the types
+ and resources that comprise the application are accessible through the
+ context class loader. While most developers do not use the context class
+ loader, the loader is used heavily by application servers, containers or
+ applications that are multi-threaded.</p>
+
+ <p>
+ In OSGi R4, the set of types and resources
+ available through the context class loader is undefined.
+ This means that the OSGi platform does not make a guarantee of the thread context
+ class loader value or in other words, it does not manage it.
+ </p>
+ <p>
+ Thus code (for example libraries) that performs manual class loading or that generates
+ new classes dynamically can cause problems when executed inside an OSGi environment.
+ </p>
+
+ <p>Gemini Blueprint guarantees that during the creation of an
+ application context on behalf of a given bundle, all of the types and
+ resources on the bundle's classpath are accessible via the context class
+ loader. Gemini Blueprint also allows you to control what is
+ accessible through the context class loader when invoking external
+ services and when servicing requests on exported services. See <a class="xref" href="#service-registry" title="Chapter&nbsp;9.&nbsp;The Service Registry">Chapter&nbsp;9, <i>The Service Registry</i></a>
+ for details on this.</p>
+
+ <p>Work is underway in the OSGi R5 timeframe to provide standardized
+ support for dealing with generated classes and implicit class path
+ dependencies introduced by third-party libraries. In the interim you may
+ need to rely on workarounds such as the
+ <code class="literal">DynamicImport-Package</code> manifest header, or the
+ facilities provided by specific OSGi implementations such as Equinox's
+ buddy mechanism. The Gemini Blueprint documentation contains more
+ details on known issues with common enterprise libraries and the
+ workarounds.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="app-deploy:troubleshooting"></a>8.9.&nbsp;Diagnosing Problems</h2></div></div></div>
+
+
+ <p>Your chosen OSGi platform implementation should be able to provide
+ you with a good deal of information about the current status of the OSGi
+ environment. For example, starting Equinox with the
+ <code class="literal">-console</code> argument provides a command-line console
+ through which you can determine which bundles are installed and their
+ states, the packages and services exported by bundles, find out why a
+ bundle has failed to resolve, and drive bundles through the
+ lifecycle. All the OSGi platform tested, provide their own logging, which
+ can be enabled and customized through dedicated settings. For more information,
+ please refer to OSGi platforms documentation.</p>
+
+ <p>In addition, Spring itself and the Gemini Blueprint bundles
+ contain extensive logging instrumentation that can help you diagnose
+ problems. The recommended approach is to deploy the Simple Logging
+ Facade for Java (<a class="ulink" href="http://www.slf4j.org/" target="_top">slf4j</a>)
+ slf4j-api.jar and slf4j-log4j13.jar bundles (the jar files distributed
+ by the project are valid OSGi bundles). Then you simply need to create a
+ <code class="literal">log4j.properties</code> file in the root of your bundle
+ classpath.</p>
+
+ <p>Managed, OSGi-aware runtime environments such as
+ <a class="ulink" href="http://docs.spring.io/s2-dmserver/2.0.x/user-guide/html/" target="_top">dmServer</a>
+ provide additional logging and insight not just for the bundle at hand, but also
+ regarding the application context and the VM among other things.</p>
+
+ <p>Note that Gemini Blueprint uses commons-logging API internally
+ which means that its logging implementation is fully pluggable. Please see
+ the FAQ and Resources pages for more information on other logging libraries
+ besides log4j.
+ </p>
+ </div>
+
+ </div>
+ <div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="service-registry"></a>Chapter&nbsp;9.&nbsp;The Service Registry</h2></div></div></div>
+
+
+ <p>The OSGi service registry enables a bundle to publish objects to a
+ shared registry, advertised via a given set of Java interfaces. Published
+ services also have service properties associated with them in the
+ registry. The registry is a crucial feature of OSGi, facilitating decoupling
+ between bundles by promoting a dynamic collaborative model based on
+ a service-oriented paradigm (publish/find/bind).</p>
+
+ <p>Gemini Blueprint integrates tightly with the service registry, allowing
+ clients to publish, find and bind services in a POJO-friendly manner, without coupling
+ themselves to the OSGi API.</p>
+ <p>By using the <code class="literal">osgi</code> namespace for Spring (see
+ <a class="xref" href="#appendix-schema" title="Appendix&nbsp;F.&nbsp;Gemini Blueprint Schema">Appendix&nbsp;F, <i>Gemini Blueprint Schema</i></a>) one can be indicate what Spring beans to export
+ as OSGi services (and how) and to define the criteria and the manner in which
+ services available in the OSGi registry are imported as beans.
+ </p>
+
+ <p>
+ Just like the rest of the namespaces, the <code class="literal">osgi</code> namespace can be embedded
+ or nested inside another top-level namespace (typically the Spring <code class="literal">beans</code>
+ namespace) or be made the default namespace.</p>
+
+ <p>The following example shows the use of the <code class="literal">osgi</code>
+ namespace within the familiar Spring beans element:</p>
+
+ <div class="programlistingco"><pre class="programlisting"><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-directive">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans"</span> <span class="co" id="service-registry.xml.ns.default.beans"><img src="images/callouts/1.png" alt="(1)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:xsi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:osgi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint"</span> <span class="co" id="service-registry.xml.ns.default.beans.osgi"><img src="images/callouts/2.png" alt="(2)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xsi:schemaLocation</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans.xsd</span> <span class="co" id="service-registry.xml.ns.default.beans.beans.25"><img src="images/callouts/3.png" alt="(3)"></span><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">
+ http://www.eclipse.org/gemini/blueprint/schema/blueprint
+ http://www.eclipse.org/gemini/blueprint/schema/blueprint/gemini-blueprint.xsd"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"simpleServiceOsgi"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"simpleService"</span> <span class="co" id="service-registry.xml.ns.default.beans.osgi.service"><img src="images/callouts/4.png" alt="(4)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.xyz.MyService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/beans&gt;</strong></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p>Use Spring Framework <code class="literal">beans</code> schema as the default namespace.
+ </p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>Import Gemini Blueprint schema and associate a prefix with its namespace (<code class="literal">osgi</code> in this example).
+ </p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/3.png" alt="3" border="0"></span></p></td><td valign="top" align="left">
+ <p>Make sure to import Spring beans schema version <span class="emphasis"><em>3.0</em></span> or higher.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/4.png" alt="4" border="0"></span></p></td><td valign="top" align="left">
+ <p>Use Gemini Blueprint elements using the declared namespace prefix (in this example <code class="literal">osgi</code>).</p>
+ </td></tr></table></div></div>
+
+ <p>Spring DM users can still use its namespace which is still supported by the Gemini Blueprint bundles. So the above configuration becomes:</p>
+
+ <div class="programlistingco"><pre class="programlisting"><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-directive">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans"</span> <span class="co" id="service-registry.xml.ns.default.old.beans"><img src="images/callouts/1.png" alt="(1)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:xsi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:osgi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/osgi"</span> <span class="co" id="service-registry.xml.ns.default.old.beans.osgi"><img src="images/callouts/2.png" alt="(2)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xsi:schemaLocation</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans.xsd</span> <span class="co" id="service-registry.xml.ns.default.old.beans.beans.25"><img src="images/callouts/3.png" alt="(3)"></span><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">
+ http://www.springframework.org/schema/osgi
+ http://www.springframework.org/schema/osgi/spring-osgi.xsd"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"simpleServiceOsgi"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"simpleService"</span> <span class="co" id="service-registry.xml.ns.default.old.beans.osgi.service"><img src="images/callouts/4.png" alt="(4)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.xyz.MyService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/beans&gt;</strong></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p>Use Spring Framework <code class="literal">beans</code> schema as the default namespace.
+ </p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>Import Gemini Blueprint schema and associate a prefix with its namespace (<code class="literal">osgi</code> in this example).
+ </p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/3.png" alt="3" border="0"></span></p></td><td valign="top" align="left">
+ <p>Make sure to import Spring beans schema version <span class="emphasis"><em>3.0</em></span>.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/4.png" alt="4" border="0"></span></p></td><td valign="top" align="left">
+ <p>Use Gemini Blueprint elements using the declared namespace prefix (in this example <code class="literal">osgi</code>).</p>
+ </td></tr></table></div></div>
+
+ <p>Through-out this documentation both the Gemini Blueprint and Spring DM namespaces will be used interchangeably - in fact, at a close look one will notice the two are identical (except for the
+ schema location declaration). As much as possible, new apps should use the Gemini Blueprint namespace as the Spring DM ones while supported, are being deprecated.</p>
+
+ <p>Using the OSGi namespace as a top-level namespace, the same service
+ would be declared as follows:</p>
+
+ <div class="programlistingco"><pre class="programlisting"><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-directive">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans:beans</strong> <span class="co" id="service-registry.xml.ns.default.osgi.beans.root.element.1"><img src="images/callouts/1.png" alt="(1)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint"</span> <span class="co" id="service-registry.xml.ns.default.osgi"><img src="images/callouts/2.png" alt="(2)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:xsi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:beans</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans"</span> <span class="co" id="service-registry.xml.ns.default.osgi.beans"><img src="images/callouts/3.png" alt="(3)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xsi:schemaLocation</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint
+ http://www.eclipse.org/gemini/blueprint/schema/blueprint/gemini-blueprint.xsd
+ http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans.xsd"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong> <span class="co" id="service-registry.xml.ns.default.osgi.beans.25"><img src="images/callouts/4.png" alt="(4)"></span>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"simpleServiceOsgi"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"simpleService"</span> <span class="co" id="service-registry.xml.ns.default.osgi.service"><img src="images/callouts/5.png" alt="(5)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.xyz.MyService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/beans:beans&gt;</strong> <span class="co" id="service-registry.xml.ns.default.osgi.beans.root.element.2"><img src="images/callouts/1.png" alt="(1)"></span>
+</pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p><code class="literal">beans</code> root element has to be prefixed with Spring Framework beans schema prefix (<code class="literal">beans</code> in this example).
+ </p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>Use Gemini Blueprint schema as the default namespace.
+ </p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/3.png" alt="3" border="0"></span></p></td><td valign="top" align="left">
+ <p>Import Spring Framework <code class="literal">beans</code> schema and associate a prefix with its namespace (<code class="literal">beans</code> in this example).
+ </p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/4.png" alt="4" border="0"></span></p></td><td valign="top" align="left">
+ <p>Make sure to import Spring beans schema version <span class="emphasis"><em>2.5</em></span>.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/5.png" alt="5" border="0"></span></p></td><td valign="top" align="left">
+ <p>Use Gemini Blueprint elements without any prefix.</p>
+ </td></tr></table></div></div>
+
+ <p>Using the OSGi namespace as a top-level namespace is particularly
+ convenient when following the configuration <a class="link" href="#app-deploy:headers:xml:tip" title="Tip">recommendation</a> from the previous section,
+ to use a dedicated configuration file for all OSGi-related declarations.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="service-registry:export"></a>9.1.&nbsp;Exporting A Spring Bean As An OSGi Service</h2></div></div></div>
+
+
+ <p>The <code class="literal">service</code> element is used to define a bean
+ representing an exported OSGi service. There are no requirements for
+ the class or object being exported - practically any bean can be exported.
+ At a minimum you must specify the bean to be exported, and the
+ <span class="emphasis"><em>service interface</em></span> that the service advertises.</p>
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">The publication <span class="emphasis"><em>interface</em></span> is used by service consumers, to identify the service. A service instance must implement the interface
+ - specifying a non-implemented interface results in an error. The term <span class="emphasis"><em>interface</em></span> is used in an abstract form; in practice any Java
+ interface or class, implemented or extended by the service instance can be specified.</td></tr></table></div>
+
+ <p>For example, the declaration</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beanToPublish"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MessageService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+
+ <p>exports the bean with name <code class="literal">beanToPublish</code> with
+ interface <code class="literal">com.xyz.MessageService</code>. The published
+ service will have a service property with the name
+ <code class="literal">org.eclipse.gemini.blueprint.bean.name</code> set to the name of
+ the target bean being registered (<code class="literal">beanToPublish</code> in
+ this case).</p>
+
+ <p>As an alternative to exporting a named bean, the bean to be
+ exported to the service registry may be defined as an anonymous inner
+ bean of the service element. Typically the top-level namespace would be
+ the <code class="literal">beans</code> namespace when using this style:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MessageService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"SomeClass"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ ...
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:service&gt;</strong></pre>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:registration"></a>9.1.1.&nbsp;Using The Service Registration</h3></div></div></div>
+
+ <p>Each <code class="literal">service</code> declaration, provides control access to the exported service.
+ The declaration returns an element of type <code class="interfacename">org.osgi.framework.ServiceRegistration</code> which can be
+ used to read or even modify the properties published for the OSGi service. Since DM 2.X, the definition
+ has been aligned with the Blueprint spec and unregistration of the service is not possible any more (an exception is thrown
+ if the <code class="methodname">unregister</code> is called). Additionally, the returned service registration will track
+ the service being registered (if multiple registration occur, these will be reflected in the returned registration object).
+ See <a class="xref" href="#service-registry:export-import-relationship" title="9.2.2.2.&nbsp;Relationship Between The Service Exporter And Service Importer">Section&nbsp;9.2.2.2, &#8220;Relationship Between The Service Exporter And Service Importer&#8221;</a> for more information on when registration/unregistration of
+ exported services can occur.</p>
+
+ <p>To use the service registration, simply inject the service bean definition into the relevant class; the example below
+ shows one way of updating the service properties from Java:
+ </p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"myServiceRegistration"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beanToPublish"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MessageService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"propUpdater"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.ServicePropertiesUpdater"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"serviceRegistration ref="</span><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">myServiceRegistration"/&gt;</span>
+<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">&lt;/bean&gt;</span></pre>
+
+ <p>Where <code class="classname">ServicePropertiesUpdater</code> can have the following definition:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">class</strong> ServicePropertiesUpdater <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">implements</strong> BeanNameAware {
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">private</strong> ServiceRegistration serviceRegistration;
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">private</strong> String beanName;
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> setServiceRegistration(ServiceRegistration serviceRegistration) {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">this</strong>.serviceRegistration = serviceRegistration;
+ }
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> setBeanName(String beanName) {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">this</strong>.beanName = beanName;
+ }
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> update() {
+ ServiceReference reference = serviceRegistration.getReference();
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">// get current properties</em>
+ Dictionary dictionary = OsgiServiceReferenceUtils.getServiceProperties(reference);
+ dictionary.put(<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"last-update"</em></strong>, <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">new</strong> Date());
+ dictionary.put(<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"updated-by"</em></strong>, beanName);
+ dictionary.put(<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"user.name"</em></strong>, System.getProperties().getProperty(<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"java.version"</em></strong>));
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">// update properties</em>
+ serviceRegistration.setProperties(dictionary);
+ }
+}</pre>
+
+ <p>Each time the update() method is called, the service properties are retrived, new ones are added and finally the service
+ registration updated.</p>
+ </div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:service-factory"></a>9.1.2.&nbsp;<code class="interfacename">org.osgi.framework.ServiceFactory</code> Support</h3></div></div></div>
+
+ <p>OSGi Service Platform Core Specification allows services not just to be registered directly,
+ but also to be created on demand, through the <code class="interfacename">org.osgi.framework.ServiceFactory</code>
+ interface (see section 5.6). Gemini Blueprint/Spring DM recognizes this OSGi interface and honours its contract,
+ by forwarding each new bundle request, to the backing bean implementing the aforementioned interface.</p>
+
+ <p> As an alternative to implementing the OSGi API, one can use the <code class="literal">bundle</code> scope, introduced
+ by Gemini Blueprint/Spring DM which offers a <span class="emphasis"><em>instance-per-bundle</em></span> contract (see <a class="xref" href="#bnd-app-ctx:bundle-scope" title="7.5.&nbsp;Bundle Scope">Section&nbsp;7.5, &#8220;Bundle Scope&#8221;</a>
+ for more information). To declare a bean with <code class="literal">bundle</code> scope
+ simply use the <code class="literal">scope</code> attribute of the
+ <code class="literal">bean</code> element:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beanToBeExported"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MessageService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beanToBeExported"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">scope</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"bundle"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MessageServiceImpl"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:intfs"></a>9.1.3.&nbsp;Controlling The Set Of Advertised Service Interfaces For
+ An Exported Service</h3></div></div></div>
+
+
+ <p>The OSGi Service Platform Core Specification defines the term
+ <span class="emphasis"><em>service interface</em></span> to represent the specification
+ of a service's public methods. Typically this will be a Java
+ interface, but the specification also supports registering service
+ objects under a class name, so the phrase <span class="emphasis"><em>service
+ interface</em></span> can be interpreted as referring to either an
+ interface or a class.</p>
+
+ <p>There are several options for specifying the service
+ interface(s) under which the exported service is registered. The
+ simplest mechanism, shown above, is to use the
+ <code class="literal">interface</code> attribute to specify a fully-qualified
+ interface name. To register a service under multiple interfaces the
+ nested <code class="literal">interfaces</code> element can be used in place of
+ the <code class="literal">interface</code> attribute.</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beanToBeExported"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:interfaces&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;value&gt;</strong>com.xyz.MessageService<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/value&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;value&gt;</strong>com.xyz.MarkerInterface<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/value&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:interfaces&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:service&gt;</strong></pre>
+
+ <p>It is illegal to use both <code class="literal">interface</code> attribute and
+ <code class="literal">interfaces</code> element at the same time - use only one of them.
+ </p>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:export:auto-export"></a>9.1.3.1.&nbsp;Detecting The Advertised Interfaces At Runtime</h4></div></div></div>
+
+ <div class="sidebar"><div class="titlepage"><div><div><p class="title"><b>Hierarchy visibility</b></p></div></div></div>
+
+
+ <p>Note that when using <code class="literal">auto-export</code>, only types visible to the
+ bundle exporting the service are registered. For example, a
+ super-interface <code class="literal">SI</code> would not be exported as a
+ supported service interface even when using
+ <code class="literal">auto-export="interfaces"</code> if <code class="literal">SI</code>
+ was not on the exporting bundle's classpath.</p>
+
+ <p>Even if exported service class does implement <code class="literal">SI</code> transitively based
+ on its parent, if the declaring bundle doesn't import the
+ interface, the class is unknown to the exported service. While this
+ might seem counter intuitive, it is actually one of the most powerful features of OSGi
+ which give the bundle authors control over the class visibility and path.
+ </p>
+
+ <p>Please see the FAQ for a more detailed explanation.</p>
+ </div>
+
+ <p>Using the <code class="literal">auto-export</code> attribute you can avoid
+ the need to explicitly declare the service interfaces at all by analyzing the
+ object class hierarchy and its interfaces.</p>
+ <p>
+ The <code class="literal">auto-export</code> attribute can have one of four
+ values:</p>
+
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <p><code class="literal">disabled</code> : the default value; no auto-detected of service
+ interfaces is undertaken and the <code class="literal">interface</code>
+ attribute or <code class="literal">interfaces</code> element must be used
+ instead.</p>
+ </li><li class="listitem">
+ <p><code class="literal">interfaces</code> : the service will be registered using all of the
+ Java interface types implemented by the bean to be exported</p>
+ </li><li class="listitem">
+ <p><code class="literal">class-hierarchy</code> : the service will be registered using the
+ exported bean's implementation type and super-types</p>
+ </li><li class="listitem">
+ <p><code class="literal">all-classes</code> : the service will be registered using the exported
+ bean's implementation type and super-types plus all interfaces
+ implemented by the bean.</p>
+ </li></ul></div>
+
+ <p>
+ <code class="literal">auto-export</code> and <code class="literal">interface(s)</code> option are not exclusive; both
+ can be used at the same time for fine grained control over the advertised interfaces if there is such
+ a need. However, the former option should be enough for most cases.
+ </p>
+ <p>For example, to automatically register a bean under all of the
+ interfaces that it supports you would declare:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beanToBeExported"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">auto-export</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"interfaces"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+
+ <p>Given the interface hierarchy:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">interface</strong> SuperInterface {}
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">interface</strong> SubInterface <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">extends</strong> SuperInterface {}</pre>
+
+ <p>then a service registered as supporting the
+ <code class="literal">SubInterface</code> interface is <span class="emphasis"><em>not</em></span>
+ considered a match in OSGi when a lookup is done for services
+ supporting the <code class="literal">SuperInterface</code> interface. For this
+ reason it is a best practice to export all interfaces supported by the
+ service being registered explicitly, using either the
+ <code class="literal">interfaces</code> element or
+ <code class="literal">auto-export="interfaces"</code>.</p>
+
+ </div>
+ </div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:props"></a>9.1.4.&nbsp;Controlling The Set Of Advertised Properties For An
+ Exported Service</h3></div></div></div>
+
+
+ <p>As previously described, an exported service is always
+ registered with the service property
+ <code class="literal">org.eclipse.gemini.blueprint.bean.name</code> set to the name
+ of the bean being exported. Since DM 2.x, the bean name is also published
+ under <code class="literal">osgi.service.blueprint.compname</code> (introduced by
+ the OSGi 4.2 Blueprint spec).
+ Additional service properties can be
+ specified using the nested <code class="literal">service-properties</code>
+ element. The <code class="literal">service-properties</code> element contains
+ key-value pairs to be included in the advertised properties of the
+ service. The key must be a string value, and the value must be a type
+ recognized by OSGi Filters. See section 5.5 of the OSGi Service
+ Platform Core Specification for details of how property values are
+ matched against filter expressions.</p>
+
+ <p>The <code class="literal">service-properties</code> element must contain
+ at least one nested <code class="literal">entry</code> element from the Spring
+ beans namespace. For example:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beanToBeExported"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MyServiceInterface"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;service-properties&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans:entry</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">key</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"myOtherKey"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"aStringValue"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans:entry</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">key</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"aThirdKey"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value-ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beanToExposeAsProperty"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/service-properties&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/service&gt;</strong></pre>
+
+ <p>Non-String values can be specified by enforcing the value type. Consider the publication
+ of an OSGi event consumer (<code class="interfacename">org.osgi.service.event.EventHandler</code>)
+ that needs to specify the topics it follows as an array under <code class="literal">event.topics</code>
+ property. Below are a list of configuration on how this can be achieved:</p>
+
+ <div class="programlistingco"><pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service</strong>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"eventMonitorService"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"someBean"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.osgi.service.event.EventHandler"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service-properties</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value-type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.String[]"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong> <span class="co" id="service-registry:export:props:array:top"><img src="images/callouts/1.png" alt="(1)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;entry</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">key</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"event.topics"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"eventQueue"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:service-properties&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:service&gt;</strong></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ Specify an array type for <span class="emphasis"><em>all</em></span> the values declared inside the <code class="literal">service-properties</code> element.
+ </td></tr></table></div></div>
+
+ <div class="programlistingco"><pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service</strong>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"eventMonitorService"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"someBean"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.osgi.service.event.EventHandler"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service-properties&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;entry</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">key</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"event.topics"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;value</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.String[]"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>eventQueue<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/value&gt;</strong> <span class="co" id="service-registry:export:props:array:nested"><img src="images/callouts/1.png" alt="(1)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/entry&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:service-properties&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:service&gt;</strong></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ Indicate the value type just for this particular value.
+ </td></tr></table></div></div>
+
+ <div class="programlistingco"><pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service</strong>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"eventMonitorService"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"someBean"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.osgi.service.event.EventHandler"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service-properties&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;entry</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">key</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"event.topics"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;array</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value-type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.String"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong> <span class="co" id="service-registry:export:props:array:array"><img src="images/callouts/1.png" alt="(1)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;value&gt;</strong>eventQueue<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/value&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/array&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/entry&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:service-properties&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:service&gt;</strong></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ Use Spring 3.x <code class="literal">&lt;array&gt;</code> element to create an nested array on the fly.
+ </td></tr></table></div></div>
+ <p>The Gemini Blueprint roadmap includes support for
+ exporting properties registered in the OSGi Configuration
+ Administration service as properties of the registered service. See
+ <a class="xref" href="#appendix-roadmap" title="Appendix&nbsp;D.&nbsp;Roadmap">Appendix&nbsp;D, <i>Roadmap</i></a> for more details.</p>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:depends-on"></a>9.1.5.&nbsp;The depends-on Attribute</h3></div></div></div>
+
+
+ <p>Spring will manage explicit dependencies of a service element,
+ ensuring for example that the bean to be exported as a service is
+ fully constructed and configured before exporting it. If a service has
+ implicit dependencies on other components (including other service
+ elements) that must be fully initialized before the service can be
+ exported, then the optional <code class="literal">depends-on</code> attribute
+ can be used to express these dependencies.</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beanToBeExported"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MyServiceInterface"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">depends-on</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"myOtherComponent"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:ccl"></a>9.1.6.&nbsp;The context-class-loader Attribute</h3></div></div></div>
+
+
+ <p>The OSGi Service Platform Core Specification (most current
+ version is 4.x at time of writing) does not specify what types and
+ resources are visible through the context class loader when an
+ operation is invoked on a service obtained via the service registry.
+ Since some services may use libraries that make certain assumptions
+ about the context class loader, Gemini Blueprint enables you to
+ explicitly control the context class loader during service execution.
+ This is achieved using the option
+ <code class="literal">context-class-loader</code> attribute of the service
+ element.</p>
+
+ <p>The permissible values for the
+ <code class="literal">context-class-loader</code> attribute are
+ <code class="literal">unmanaged</code> (the default) and
+ <code class="literal">service-provider</code>. When the
+ <code class="literal">service-provider</code> value is specified, Spring Dynamic
+ Modules ensures that the context class loader can see all of the
+ resources on the class path of the bundle exporting the service.</p>
+
+ <p class="remark"><em><span class="remark">When setting <code class="literal">context-class-loader</code> to <code class="literal">service-provider</code>, the service object will be proxied to
+ handle the class loader. If the service advertises any concrete class then CGLIB library is required .</span></em></p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:ranking"></a>9.1.7.&nbsp;The <code class="literal">ranking</code> Attribute</h3></div></div></div>
+
+
+ <p>When registering a service with the service registry, you may
+ optionally specify a service ranking (see section 5.2.5 of the OSGi
+ Service Platform Core Specification). When a bundle looks up a service
+ in the service registry, given two or more matching services the one
+ with the highest ranking will be returned. The default ranking value
+ is zero. To explicitly specify a ranking value for the registered
+ service, use the optional <code class="literal">ranking</code> attribute.</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beanToBeExported"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MyServiceInterface"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ranking</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"9"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:cache"></a>9.1.8.&nbsp;The <code class="literal">cache-target</code> Attribute</h3></div></div></div>
+
+
+ <p>By default, services exported are being retrieved from the container each time they are requested.
+ This allows <span class="emphasis"><em>scoped</em></span> beans to behave correctly depending on the context available
+ when the request is being performed. However, there are cases when the target bean (the entity being
+ exported) needs to be cached no matter its scope. The Blueprint spec for example requires this behaviour
+ for all exported services.</p>
+ <p>To accommodate both cases one, Gemini Blueprint 1.0/Spring DM 2.0 introduces a new attribute, <code class="literal">cache-target</code>
+ which, as the name suggests, enables the caching of the exported bean. The instance of the bean retrieved,
+ for the first service registration is cached internally by the exporter which will later reuse it.</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beanToBeExported"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MyServiceInterface"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">cache-target</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"true"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:service:attributes"></a>9.1.9.&nbsp;<code class="literal">service</code> Element Attributes</h3></div></div></div>
+
+ <p>
+ As a summary, the following table lists the attributes names, possible values and
+ a short description for each of them.
+ </p>
+ <div class="table"><a name="service-export-options"></a><p class="title"><b>Table&nbsp;9.1.&nbsp;OSGi &lt;service&gt; attributes</b></p><div class="table-contents">
+
+ <table class="table" summary="OSGi <service&gt; attributes" width="100%" border="1"><colgroup><col class="c1"><col class="c2"><col class="c3"><col class="c4"><col class="c5"><col align="center" class="c6"></colgroup><thead><tr><th align="center">Name</th><th colspan="4" align="center">Values</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">interface</td><td colspan="4" align="center">fully qualified class name (such as <code class="classname">java.lang.Thread</code>)</td><td align="center">the fully qualified name of the class under which the object will be exported</td></tr><tr><td align="center">ref</td><td colspan="4" align="center">any bean name</td><td align="center">Reference to the named bean to be exported as a service in the service registry.</td></tr><tr><td align="center">context-class-loader</td><td colspan="2" align="center">unmanaged</td><td colspan="2" align="center">service-provider</td><td align="center">Defines how the context class loader will be managed when an operation is invoked on the
+ exported service. The default value is <code class="literal">unmanaged</code> which means that no management of
+ the context class loader is attempted. A value of <code class="literal">service-provider</code> guarantees that
+ the context class loader will have visibility of all the resources on the class path of
+ bundle exporting the service.</td></tr><tr><td align="center">auto-export</td><td align="center">disabled</td><td align="center">interfaces</td><td align="center">class-hierarchy</td><td align="center">all-classes</td><td align="center">Enables Spring to automatically manage the set of service interfaces advertised for the
+ service. By default this facility is <code class="literal">disabled</code>. A value of <code class="literal">interfaces</code> advertises all
+ of the Java interfaces supported by the exported service. A value of <code class="literal">class-hierarchy</code>
+ advertises all the Java classes in the hierarchy of the exported service. A value of
+ <code class="literal">all-classes</code> advertises all Java interfaces and classes.</td></tr><tr><td align="center">ranking</td><td colspan="4" align="center">any integer value</td><td align="center">Specify the service ranking to be used when advertising the service. Default value is 0.</td></tr><tr><td align="center">cache-target</td><td colspan="2" align="center">true</td><td colspan="2" align="center">false</td><td align="center">Specify whether the bean exported as an OSGi service is cached (on first registration) or not. Default value is <code class="literal">false</code></td></tr></tbody></table>
+ </div></div><br class="table-break">
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:lifecycle"></a>9.1.10.&nbsp;Service Registration And Unregistration Lifecycle</h3></div></div></div>
+
+
+ <p>The service defined by a <code class="literal">service</code> element is
+ registered with the OSGi service registry when the application context
+ is first created. It will be unregistered automatically when the
+ bundle is stopped and the application context is disposed. Additionally,
+ based on the mandatory service import availability, the service can be
+ unregistered and registered at runtime
+ (see ???).</p>
+
+ <p>If you need to take some action when a service is unregistered
+ because its dependencies are not satisfied (or when it is registered),
+ then you can define a listener bean using the nested
+ <code class="literal">registration-listener</code> element.</p>
+
+ <p>The declaration of a registration listener must use either the
+ <code class="literal">ref</code> attribute to refer to a top-level bean
+ definition, or declare an anonymous listener bean inline. For
+ example:</p>
+
+ <div class="programlistingco"><pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beanToBeExported"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"SomeInterface"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;registration-listener</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"myListener"</span> <span class="co" id="service-registry.exporter.listener.ref"><img src="images/callouts/1.png" alt="(1)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">registration-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"serviceRegistered"</span> <span class="co" id="service-registry.exporter.listener.ref.custom.1"><img src="images/callouts/2.png" alt="(2)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">unregistration-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"serviceUnregistered"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong> <span class="co" id="service-registry.exporter.listener.ref.custom.2"><img src="images/callouts/2.png" alt="(2)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;registration-listener</strong>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">registration-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"register"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong> <span class="co" id="service-registry.exporter.listener.nested"><img src="images/callouts/3.png" alt="(3)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"SomeListenerClass"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong> <span class="co" id="service-registry.exporter.listener.nested.decl"><img src="images/callouts/4.png" alt="(4)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/registration-listener&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/service&gt;</strong></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p>Listener declaration referring to a top-level bean declaration.
+ </p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>Indicate the <code class="literal">registration</code> and <code class="literal">unregistration</code> methods.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/3.png" alt="3" border="0"></span></p></td><td valign="top" align="left">
+ <p>Declare only a <code class="literal">registration</code> custom method for this listener.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/4.png" alt="4" border="0"></span></p></td><td valign="top" align="left">
+ <p>Nested listener bean declaration.</p>
+ </td></tr></table></div></div>
+
+ <p>The optional <code class="literal">registration-method</code> and
+ <code class="literal">unregistration-method</code> attributes specify the names
+ of the methods defined on the listener bean that are to be invoked
+ during registration and unregistration. A registration and unregistration
+ callback methods must have a signature matching one of the following formats:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> anyMethodName(ServiceType serviceInstance, Map serviceProperties);</pre>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> anyMethodName(ServiceType serviceInstance, Dictionary serviceProperties);</pre>
+
+ <p>where <code class="literal">ServiceType</code> can be any type compatible
+ with the exported service interface of the service.</p>
+
+ <p>The register callback is invoked when the service is initially
+ registered at startup, and whenever it is subsequently re-registered.
+ The unregister callback is invoked during the service unregistration process,
+ no matter the cause (such as the owning bundle stopping).</p>
+
+ <p>Gemini Blueprint/Spring DM will use the declared <code class="literal">ServiceType</code> argument type
+ and invoke the registration/unregistration method only when a service of a compatible type
+ will be registered/unregistered.</p>
+
+ <p><code class="literal">serviceProperties</code> represents a map holding all the properties
+ of the registered/unregistered service. To preserve compatibility with the OSGi specification
+ this argument can be cast, if needed, to a <code class="literal">java.util.Dictionary</code>.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:export:lifecycle:interface"></a>9.1.10.1.&nbsp;Using <code class="interfacename">OsgiServiceRegistrationListener</code> Interface</h4></div></div></div>
+
+ <p>
+ While we discourage, it is possible to implement a Gemini Blueprint/Spring DM specific interface, namely
+ <code class="interfacename">org.eclipse.gemini.blueprint.service.exporter.OsgiServiceRegistrationListener</code> which avoids the need
+ to declare the <code class="literal">registration-method</code> and <code class="literal">unregistration-method</code>.
+ However, by implementing <code class="interfacename">OsgiServiceRegistrationListener</code>, your code
+ becomes Gemini Blueprint/Spring DM aware (which goes against the POJO philosophy).
+ </p>
+
+ <p>It is possible for a listener to implement <code class="interfacename">OsgiServiceRegistrationListener</code> interface and
+ declare custom methods. In this case, the Gemini Blueprint/Spring DM interface methods will be called first, followed by the custom methods.
+ </p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:export:blueprint"></a>9.1.10.2.&nbsp;Blueprint <code class="literal">service</code> Comparison</h4></div></div></div>
+
+
+ <p>The Blueprint Container offers a <code class="literal">service</code> element, identical in functionality with the one in Gemini Blueprint/Spring DM. In most cases,
+ the configuration should be identical. Below is a summary of the configuration options available in Gemini Blueprint/Spring DM and Blueprint:</p>
+
+ <div class="table"><a name="service-registry:export:blueprint:comparison"></a><p class="title"><b>Table&nbsp;9.2.&nbsp;Spring DM / Blueprint <code class="literal">&lt;service&gt;</code> Configuration Comparison</b></p><div class="table-contents">
+
+ <table class="table" summary="Spring DM / Blueprint <service&gt; Configuration Comparison" width="100%" border="1"><colgroup><col><col></colgroup><thead><tr><th align="center">Gemini Blueprint/Spring DM</th><th align="center">Blueprint</th></tr></thead><tbody><tr><td align="center">interface</td><td align="center">interface</td></tr><tr><td align="center">ref</td><td align="center">ref</td></tr><tr><td align="center">auto-export</td><td align="center">auto-export</td></tr><tr><td align="center">ranking</td><td align="center">ranking</td></tr><tr><td align="center">context-class-loader</td><td align="center">-</td></tr><tr><td align="center">cache-target</td><td align="center">- (caching is always enabled)</td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>Since the <code class="literal">registration-listener</code> declaration is identical in declaration and functionality between Blueprint
+ and Gemini Blueprint/Spring DM, this section does not mention it.</p>
+ </div>
+
+ </div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="service-registry:refs"></a>9.2.&nbsp;Defining References To OSGi Services</h2></div></div></div>
+
+
+ <p>To use services, clients need to look for them inside the OSGi service registry.
+ If found, the platform returns a reference which can be used to get the actual service instance.
+ Consumers should return the service instance as soon as possible and not hold on to it since
+ the service provider can unpublish the service at any point.
+ Since there is no mechanism in Java to force such cleanup, the OSGi specification uses the service
+ references and the aforementioned <span class="emphasis"><em>protocol</em></span> to decouple service providers from
+ service consumers. Please see chapter 5, the Service Layer inside the OSGi Core spec for an in-depth
+ discussion.
+ </p>
+
+ <p>Gemini Blueprint facilitates the consumption of OSGi services by taking care of not
+ just of the retrieval of service references and instances but also considering the service dynamics.
+ With Gemini Blueprint/Spring DM, imported OSGi services become Spring beans which can be injected, as usual,
+ into other application components. The service lookup is made using the service interface type
+ that the service is required to support, plus an optional filter
+ expression that matches against the service properties published in the
+ registry. The service instance retrieval is done on demand, on the first request. Once the service
+ becomes unavailable, Gemini Blueprint/Spring DM automatically unregisters the service to avoid using <span class="emphasis"><em>stale</em></span>
+ references.</p>
+
+ <p>As a consumer, one can find zero, one or multiple services matching the desired description.
+ In most scenarios, a single matching service is all that is needed; for those the
+ <code class="literal">reference</code> element defines a reference to a single
+ service that meets the required specification.
+ In other cases, especially when using the OSGi <a class="ulink" href="http://www.osgi.org/documents/osgi_technology/whiteboard.pdf" target="_top">whiteboard
+ pattern</a>, references to <span class="emphasis"><em>all available</em></span>
+ matching services are required. Gemini Blueprint supports the
+ management of this group of references as either a <code class="interfacename">List</code> or a
+ <code class="interfacename">Set</code> collection.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:annotations-vs-xml-declarations"></a>9.2.1.&nbsp;Referencing services via the @ServiceReference annotation</h3></div></div></div>
+
+ <p>
+ Since 2.1.0, gemini-blueprint allows using the @ServiceReference annotation provided by the proprietary gemini-blueprint-extensions bundle
+ in addition to the XML declarations given below. Both ways of declaring service references have the exact same semantics, i.e. a bean of the form
+
+</p><pre class="programlisting">
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">import</strong> org.eclipse.gemini.blueprint.extensions.annotation.ServiceReference;
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">class</strong> MyBean {
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan"><span class="hl-annotation">@ServiceReference</span></em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">private</strong> Service myService;
+}</pre><p>
+
+ Is equivalent to
+
+ </p><pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:reference</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"myService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"some.package.Service"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong></pre><p>
+
+ and subsequently injecting the service reference into the bean.
+ </p>
+
+ <p>It is, however, important to stress that @ServiceReference is a proprietary extension that is not covered by the OSGi specification.</p>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:refs:availability"></a>9.2.2.&nbsp;Imported Service Availability</h3></div></div></div>
+
+
+ <div class="sidebar"><div class="titlepage"><div><div><p class="title"><b>What happened to <code class="literal">cardinality</code>?</b></p></div></div></div>
+
+ <p>
+ Since Spring DM 2.x/Gemini Blueprint, the <code class="literal">cardinality</code> notion has been deprecated in favour
+ of <code class="literal">availability</code>. The main reasons behind it were aligning the terminology
+ with the Blueprint spec and eliminating the repetition of specifying the number of imported
+ services: as <code class="literal">osgi</code> elements already specify whether one or multiple services
+ are imported, the <code class="literal">cardinality</code> right side (<code class="literal">..N/..1</code>) was
+ redundant.
+ </p>
+ </div>
+
+ <p>Due to the dynamic nature of OSGi, services can come and go, be available or unavailable
+ at certain points in time. Depending on the type of service, this can have a negative impact
+ on the consumers. Gemini Blueprint/Spring DM alleviates this problem by introducing the
+ notion of <code class="literal">availability</code> (formerly known as <code class="literal">cardinality</code>)
+ which indicates whether an imported service is <code class="literal">mandatory</code> or
+ <code class="literal">optional</code>.</p>
+
+ <p>As the name implies, a <code class="literal">mandatory</code> service implies a crucial application dependency:
+ the service is <span class="emphasis"><em>required</em></span> and its presence can heavily impact the application, in
+ a negative way.
+ </p>
+ <p>An <code class="literal">optional</code> service means just the opposite. The service is tracked and bound
+ (if present), just like a <code class="literal">mandatory</code> reference, but its presence is not required. It is
+ fine, from an application perspective if the service is not available - its existence (or lack of) does
+ not impact the application functionality.</p>
+
+ <p>As an example, an application could have a <code class="literal">mandatory</code> dependency on a <code class="literal">
+ DataSource</code> and an <code class="literal">optional</code> one for a logging service: the application can run fine
+ if it cannot log (it does not impact the runtime) but it fails if the backing database is not available.</p>
+
+ <p>In Gemini Blueprint/Spring DM, a <code class="literal">mandatory</code> service import that is unsatisfied (there are no services
+ matching the description) can either prevent an application context from starting up or, if already started,
+ cause the unregistration of the exported services dependent on it.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:availability:startup"></a>9.2.2.1.&nbsp;Mandatory Services and Application Startup</h4></div></div></div>
+
+ <p>
+ The availability of a service impacts the startup of an Spring-powered application and
+ the publication of any exported services that depend on it.
+ As mentioned in <a class="xref" href="#bnd-app-ctx:app-creation:mandatory-deps" title="7.2.1.&nbsp;Mandatory Service Dependencies">Section&nbsp;7.2.1, &#8220;Mandatory Service Dependencies&#8221;</a>, a SpringDM application will not start
+ unless <span class="emphasis"><em>all</em></span> <code class="literal">mandatory</code> services are available, at the same time.
+
+ Before initializing the context, Gemini Blueprint/Spring DM discovers all the <code class="literal">mandatory</code> service
+ declarations and waits for a period of time (5 minutes by default unless otherwise specified by
+ each bundle - see the <code class="literal">timeout</code> directive in <a class="xref" href="#app-deploy:headers" title="8.1.&nbsp;Bundle Format And Manifest Headers">Section&nbsp;8.1, &#8220;Bundle Format And Manifest Headers&#8221;</a>) for all imports
+ to be satisfied, at the same time.
+ If the timeout occurs, the application initialization fails (since the required or mandatory services
+ are not available) or succeeds, meaning the application context is being initialized.
+ </p>
+
+ <p>This way, the framework prevents the application from starting up only to fail since its required
+ services are unavailable. This feature avoids the need for ordering the bundle startup sequence as the
+ configuration already acts as a service <span class="emphasis"><em>barrier</em></span> blueprint: no matter the order of the services
+ started, on whether they come and go, only when all of them are present, will the context initialization
+ commence.</p>
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">The fact that an application has mandatory service references, gives no guarantee
+ that a valid service object is available when the service reference is used, since services can
+ get unregistered at any time. Gemini Blueprint/Spring DM guarantees that all the mandatory services were present, at
+ the same time, before the application was started but it cannot prevent or guarantee that this services
+ will not be disappear during the application life span.</td></tr></table></div>
+
+ <div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="images/admons/warning.png"></td><th align="left">Warning</th></tr><tr><td align="left" valign="top">
+ It is an error to declare a mandatory reference to a
+ service that is also exported by the same bundle, this behaviour can
+ cause application context creation to fail through either deadlock
+ or timeout.
+ </td></tr></table></div>
+
+ </div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:export-import-relationship"></a>9.2.2.2.&nbsp;Relationship Between The Service Exporter And Service Importer</h4></div></div></div>
+
+
+ <p>An exported service may depend, either directly or indirectly,
+ on other (imported) services in order to perform its function. If one of these
+ services is marked as a <span class="emphasis"><em>mandatory</em></span> dependency and the
+ dependency can no longer be satisfied
+ (because the backing service has gone away and there is no suitable
+ replacement available), then the exported service that depends on it
+ will be automatically unregistered from the service registry - meaning
+ that it is no longer available to clients. If the mandatory dependency
+ becomes satisfied once more (by registration of a suitable service),
+ then the exported service will be re-registered in the service
+ registry.</p>
+
+ <p>This automatic publication management ensures that only when the exported service can work reliable,
+ it is made available for potential OSGi clients. This behaviour takes advantage of the OSGi dynamic nature
+ allowing an application to cope with the ongoing changing without being restarted.
+ </p>
+
+ <p>This automatic unregistering and re-registering of exported
+ services based on the availability of mandatory dependencies only
+ takes into account declarative dependencies. If exported service
+ <code class="literal">S</code> depends on bean <code class="literal">A</code>, which in
+ turn depends on mandatory imported service <code class="literal">M</code>, and
+ these dependencies are explicit in the Spring configuration file as
+ per the example below, then when <code class="literal">M</code> becomes
+ unsatisfied <code class="literal">S</code> will be unregistered. When
+ <code class="literal">M</code> becomes satisfied again, <code class="literal">S</code>
+ will be re-registered.</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"S"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"A"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"SomeInterface"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"A"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"SomeImplementation"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"helperService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"M"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong>
+
+<em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- the reference element is used to refer to a service
+ in the service registry --&gt;</em>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:reference</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"M"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"HelperService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">availability</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"mandatory"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+
+ <p>If however the dependency from <code class="literal">A</code> on
+ <code class="literal">M</code> is not established through configuration as shown
+ above, but instead at runtime through for example passing a reference
+ to <code class="literal">M</code> to <code class="literal">A</code> without any
+ involvement from the Spring container, then Gemini Blueprint
+ will <span class="emphasis"><em>not</em></span> track this dependency.</p>
+ </div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:refs:singular"></a>9.2.3.&nbsp;Referencing An Individual Service</h3></div></div></div>
+
+
+ <p>The <code class="literal">reference</code> element is used to define a
+ reference to a service in the service registry.</p>
+
+ <p>Since there can be multiple service matching a given description,
+ the service returned is the service that would be returned by a call to
+ <code class="literal">BundleContext.getServiceReference</code>. This means that
+ the service with the highest ranking will be returned, or if there is
+ a tie in ranking, the service with the lowest service id (the service
+ registered first with the framework) is returned (please see Section 5
+ from the OSGi spec for more information on the service selection algorithm).</p>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:interface"></a>9.2.3.1.&nbsp;Controlling The Set Of Advertised Interfaces For The Imported Service</h4></div></div></div>
+
+
+ <p>The <code class="literal">interface</code> attribute identifies the service
+ interface that a matching service must implement. For example, the
+ following declaration creates a bean
+ <code class="literal">messageService</code>, which is backed by the service
+ returned from the service registry when querying it for a service
+ offering the <code class="interfacename">MessageService</code> interface.</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;reference</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"messageService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MessageService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+
+ <p>Just like the <code class="literal">service</code> declaration, when specifying
+ multiple interfaces, use the nested <code class="literal">interfaces</code> element instead
+ of <code class="literal">interface</code> attribute:
+ </p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:reference</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"importedOsgiService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:interfaces&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;value&gt;</strong>com.xyz.MessageService<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/value&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;value&gt;</strong>com.xyz.MarkerInterface<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/value&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:interfaces&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:reference&gt;</strong></pre>
+
+ <p>It is illegal to use both <code class="literal">interface</code> attribute and
+ <code class="literal">interfaces</code> element at the same time - use only one of them.
+ </p>
+
+ <p>The bean defined by reference element implements all of the
+ advertised interfaces of the service that are visible to the bundle (called
+ <span class="emphasis"><em>greedy proxying</em></span>).
+ If the registered service interfaces include Java class types (as
+ opposed to interface types) then support for these types is subject to
+ the restrictions of Spring's AOP implementation (see the Spring
+ Reference Guide). In short, if the specified interfaces are classes
+ (rather then interfaces), then <code class="literal">cglib</code> library must be
+ available, and <code class="literal">final</code> methods are not
+ supported.</p>
+ </div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:filter"></a>9.2.3.2.&nbsp;The <code class="literal">filter</code> Attribute</h4></div></div></div>
+
+
+ <p>The optional <code class="literal">filter</code> attribute can be used
+ to specify an OSGi filter expression and constrains the service
+ registry lookup to only those services that match the given
+ filter.</p>
+
+ <p>For example:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;reference</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"asyncMessageService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MessageService"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">filter</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"(asynchronous-delivery=true)"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+
+ <p>will match only OSGi services that advertise <code class="interfacename">MessageService</code>
+ interface and have the property named <code class="literal">asynchronous-delivery</code> set to value <code class="literal">true</code>.
+ </p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:bean-name"></a>9.2.3.3.&nbsp;The <code class="literal">bean-name</code> Attribute</h4></div></div></div>
+
+
+ <p>The <code class="literal">bean-name</code> attribute is a convenient
+ short-cut for specifying a filter expression that matches on the
+ <code class="literal">bean-name</code> property automatically set when exporting a bean using the
+ <code class="literal">service</code> element (see <a class="xref" href="#service-registry:export" title="9.1.&nbsp;Exporting A Spring Bean As An OSGi Service">Section&nbsp;9.1, &#8220;Exporting A Spring Bean As An OSGi Service&#8221;</a>).</p>
+
+ <p>Consider the following exporter/importer declarations:</p>
+
+ <div class="programlistingco"><pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"</span><span class="co" id="service-registry:refs:bean-name.1"><img src="images/callouts/1.png" alt="(1)"></span><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">messageServiceBean"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">scope</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"bundle"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MessageServiceImpl"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+<em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- service exporter --&gt;</em>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"messageServiceExporter"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"</span><span class="co" id="service-registry:refs:bean-name.2"><img src="images/callouts/1.png" alt="(1)"></span><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">messageServiceBean"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MessageService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+</pre></div>
+ <div class="programlistingco"><pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:reference</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"messageService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MessageService"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">bean-name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"</span><span class="co" id="service-registry:refs:bean-name"><img src="images/callouts/1.png" alt="(1)"></span><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">messageServiceBean"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+</pre></div>
+ <div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p>the name used with <code class="literal">bean-name</code> attribute</p>
+ </td></tr></table></div>
+
+ <p>will match only OSGi services that advertise <code class="interfacename">MessageService</code>
+ interface and have the property named <code class="literal">org.eclipse.gemini.blueprint.bean.name</code> set
+ to value <code class="literal">messageServiceBean</code>. In short, this means finding all Gemini Blueprint/Spring DM exported
+ beans that implement interface <code class="interfacename">MessageService</code> and are named
+ <code class="literal">messageServiceBean</code>.</p>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:cardinality"></a>9.2.3.4.&nbsp;The <code class="literal">availability</code> Attribute</h4></div></div></div>
+
+
+ <div class="sidebar"><div class="titlepage"><div><div><p class="title"><b>Nested &lt;reference&gt; declarations</b></p></div></div></div>
+
+ <p>In order for Gemini Blueprint/Spring DM to detect mandatory dependencies, any
+ <a class="ulink" href="http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-inner-beans" target="_top">nested/inner</a>
+ reference declaration will be transformed into top-level
+ one with a generated name.</p>
+ </div>
+
+ <p>The <code class="literal">availability</code> attribute is used to
+ specify whether or not a matching service is required at all times.
+ An <code class="literal">mandatory</code> availability (the default)
+ indicates that a matching service must always be present. A
+ value of <code class="literal">optional</code> indicates that a
+ matching service is not required at all times (see
+ <a class="xref" href="#service-registry:refs:singular:dynamics" title="9.2.3.9.&nbsp;reference And OSGi Service Dynamics">Section&nbsp;9.2.3.9, &#8220;<code class="literal">reference</code> And OSGi Service Dynamics&#8221;</a>
+ for more details). The differences in behaviour between <code class="literal">mandatory</code>
+ and <code class="literal">optional</code> services are explained at length in
+ <a class="xref" href="#service-registry:refs:availability" title="9.2.2.&nbsp;Imported Service Availability">Section&nbsp;9.2.2, &#8220;Imported Service Availability&#8221;</a>.
+ </p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:depends-on"></a>9.2.3.5.&nbsp;The <code class="literal">depends-on</code> Attribute</h4></div></div></div>
+
+
+ <p>The <code class="literal">depends-on</code> attribute is used to specify
+ that the service reference should not be looked up in the service
+ registry until the named dependent bean has been
+ instantiated.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:tccl"></a>9.2.3.6.&nbsp;The <code class="literal">context-class-loader</code> Attribute</h4></div></div></div>
+
+
+ <p>The OSGi Service Platform Core Specification (latest
+ version is 4.1 at time of writing) does not specify what types and
+ resources are visible through the context class loader when an
+ operation is invoked on a service obtained via the service registry.
+ Since some services may use libraries that make certain assumptions
+ about the context class loader, Gemini Blueprint enables you
+ to explicitly control the context class loader during service
+ invocation. This is achieved using the option
+ <code class="literal">context-class-loader</code> attribute of the
+ <code class="literal">reference</code> element.</p>
+
+ <div class="sidebar"><div class="titlepage"><div><div><p class="title"><b>context class loader management on the importer and exporter</b></p></div></div></div>
+
+ <p>
+ Gemini Blueprint/Spring DM has the ability to do context class loader management on both
+ the importer and exporter side. Normally, if Gemini Blueprint/Spring DM works on both sides,
+ only one side should have this feature enabled. However, if both sides
+ (importer and exporter) take advantage of this capability, the last
+ entity in the call chain will win. This means that the exporter setting,
+ if enabled, will always override the importer setting (whatever that is).
+ </p>
+ </div>
+
+ <p>The permissible values for the
+ <code class="literal">context-class-loader</code> attribute are:</p>
+
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <p><code class="literal">client</code> - during the service invocation,
+ the context class loader is guaranteed to be
+ able to see types on the classpath of the invoking bundle.
+ This is the default option.</p>
+ </li><li class="listitem">
+ <p><code class="literal">service-provider</code> - during the service invocation,
+ the context class loader is guaranteed to be
+ able to see types on the classpath of the bundle exporting
+ the service.</p>
+ </li><li class="listitem">
+ <p><code class="literal">unmanaged</code> - no context class loader
+ management will occur during the service invocation</p>
+ </li></ul></div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:sticky"></a>9.2.3.7.&nbsp;The <code class="literal">sticky</code> Attribute</h4></div></div></div>
+
+
+ <p>Newly introduced in DM 2.x, the <code class="literal">sticky</code> attribute specifies whether an importer will use
+ a backing service until it becomes unavailable or whether it will consider other <span class="emphasis"><em>better</em></span> candidates
+ (defined as services matching the importer criteria but with a higher ranking or a lower service id) that might appear.
+ In Spring DM 1.x, the importer would always select the best service available at any point in time. Thus, if a service with
+ a higher ranking id becomes available, the proxy would automatically bind to it. In highly dynamic environments, this lack
+ of service affinity becomes problematic so in DM 2.x/Gemini Blueprint, the behaviour has changed (aligning itself with the Blueprint spec).
+ Thus, service importers become <code class="literal">sticky</code> by default meaning that a proxy will use the bound backing service
+ until it becomes unavailable, ignoring any other service updates. Only when the backing service goes down, the proxy will
+ look for a replacement selecting the best candidate at that point in time.
+ To revert to the Spring DM 1.x behaviour, mark the importers as being non-sticky.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:reference:attributes"></a>9.2.3.8.&nbsp;<code class="literal">reference</code> Element Attributes</h4></div></div></div>
+
+ <p>
+ As a summary, the following table lists the <code class="literal">reference</code> element
+ attributes names, possible values and a short description for each of them.
+ </p>
+ <div class="table"><a name="reference-import-options"></a><p class="title"><b>Table&nbsp;9.3.&nbsp;OSGi &lt;reference&gt; attributes</b></p><div class="table-contents">
+
+ <table class="table" summary="OSGi <reference&gt; attributes" width="100%" border="1"><colgroup><col class="c1"><col align="center" class="c2"><col align="center" class="c3"><col align="center" class="c4"><col align="center" class="c5"></colgroup><thead><tr><th>Name</th><th colspan="4" align="center">Values</th><th align="justify">Description</th></tr></thead><tbody><tr><td>interface</td><td colspan="4" align="center">fully qualified class name (such as <code class="classname">java.lang.Thread</code>)</td><td align="justify">The fully qualified name of the class under which the object will be exported.</td></tr><tr><td>filter</td><td colspan="4" align="center">OSGi filter expression (such as <code class="literal">((asynchronous-delivery=true)</code>)</td><td align="justify">OSGi filter expression that is used to constrain the set of matching services
+ in the service registry.</td></tr><tr><td>bean-name</td><td colspan="4" align="center">any string value</td><td align="justify">Convenient shortcut for specifying a filter expression that matches on the bean-name property
+ that is automatically advertised for beans published using the &lt;service&gt; element.</td></tr><tr><td>context-class-loader</td><td align="center">client</td><td colspan="2" align="center">service-provider</td><td align="center">unmanaged</td><td align="justify">Defines how the context class loader is managed when invoking operations on a service
+ backing this service reference. The default value is <code class="literal">client</code> which means that the context
+ class loader has visibility of the resources on this bundle's classpath. Alternate
+ options are <code class="literal">service-provider</code> which means that the context class loader has visibility of
+ resources on the bundle classpath of the bundle that exported the service, and <code class="literal">unmanaged</code>
+ which does not do any management of the context class loader.</td></tr><tr><td>availability</td><td colspan="2" align="center">optional</td><td colspan="2" align="center">mandatory</td><td align="justify">Defines the desired availability of the relationship to the backing service. If not specified,
+ the <code class="literal">default-availability</code> attribute will apply. 'mandatory' value (the default) means that a backing service
+ must exist at all times. The 'optional' value indicates that it is acceptable to be for an importer to have no
+ backing service.</td></tr><tr><td>timeout</td><td colspan="4" align="center">any positive long</td><td align="justify">The amount of time (in milliseconds) to wait for a backing service to be
+ available when an operation is invoked. If not specified, the <code class="literal">default-timeout</code> attribute will apply.
+ </td></tr><tr><td>sticky</td><td colspan="2" align="center">true</td><td colspan="2" align="center">false</td><td align="justify">Indicates the <span class="emphasis"><em>stickiness</em></span> of the service import. If 'true' (default), the proxy will rebind only if the
+ backing service is no longer available. If 'false' (Spring DM 1.x behaviour), the rebind will occur every time a 'better' candidate
+ appears. A better service is defined by having either a higher ranking or the same ranking and a lower service id.
+ </td></tr></tbody></table>
+ </div></div><br class="table-break">
+ </div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:dynamics"></a>9.2.3.9.&nbsp;<code class="literal">reference</code> And OSGi Service Dynamics</h4></div></div></div>
+
+ <p>
+ The bean defined by the <code class="literal">reference</code> element
+ is unchanged throughout the lifetime of the application context
+ (the object reference remains constant). However, the OSGi service
+ that backs the reference may come and go at any time. For a
+ mandatory service reference, the creation of the application context will block until a matching
+ service is available. <a class="xref" href="#service-registry:refs:availability" title="9.2.2.&nbsp;Imported Service Availability">Section&nbsp;9.2.2, &#8220;Imported Service Availability&#8221;</a> provides
+ more details.</p>
+
+ <p>When the service backing a <code class="literal">reference</code> bean
+ goes away, Gemini Blueprint tries to replace the backing
+ service with another service matching the reference criteria. An
+ application may be notified of a change in backing service by
+ registering a <code class="literal">reference-listener</code>. If no matching service is
+ available, then the <code class="literal">reference</code> is said to be
+ <span class="emphasis"><em>unsatisfied</em></span>. An unsatisfied mandatory service
+ causes any exported service (<code class="literal">service</code> bean) that
+ depends on it to be unregistered from the service registry until
+ such time as the reference is satisfied again. See
+ <a class="xref" href="#service-registry:export-import-relationship" title="9.2.2.2.&nbsp;Relationship Between The Service Exporter And Service Importer">Section&nbsp;9.2.2.2, &#8220;Relationship Between The Service Exporter And Service Importer&#8221;</a> for more information.</p>
+
+ <p>When an operation is invoked on an unsatisfied
+ <code class="literal">reference</code> bean (either optional or mandatory),
+ the invocation blocks until the reference becomes satisfied. The
+ optional <code class="literal">timeout</code> attribute of the
+ <code class="literal">reference</code> element enables a timeout value (in
+ milliseconds) to be specified. If no matching service becomes available
+ within the timeout period, an unchecked <code class="classname">ServiceUnavailableException</code> is
+ thrown.</p>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:property-editor"></a>9.2.3.10.&nbsp;Getting A Hold Of The Managed Service Reference</h4></div></div></div>
+
+
+ <p>Gemini Blueprint/Spring DM can automatically convert a managed OSGi service to
+ service reference. That is, if the property into which a reference bean
+ is to be injected, has type <code class="interfacename">ServiceReference</code> (instead of the service
+ interface supported by the reference), then the managed OSGi
+ <code class="interfacename">ServiceReference</code> for the service will be injected
+ in place of the service itself:</p>
+
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">class</strong> BeanWithServiceReference {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">private</strong> ServiceReference serviceReference;
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">private</strong> SomeService service;
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">// getters/setters ommitted</em>
+}</pre>
+
+ <div class="programlistingco"><pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;reference</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.SomeService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"someBean"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"BeanWithServiceReference"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"serviceReference"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong> <span class="co" id="service-registry.importer.single.ref.conversion"><img src="images/callouts/1.png" alt="(1)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong> <span class="co" id="service-registry.importer.single.ref.normal.injection"><img src="images/callouts/2.png" alt="(2)"></span>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p>Automatic managed service to <code class="interfacename">ServiceReference</code> conversion.
+ </p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>Managed service is injected without any conversion</p>
+ </td></tr></table></div></div>
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
+ The injected <code class="interfacename">ServiceReference</code> is managed by Gemini Blueprint/Spring DM and will change
+ at the same time as the referenced backing OSGi service instance.
+ </td></tr></table></div>
+
+ <p>There are cases when the managed <code class="interfacename">ServiceReference</code> is needed to get a hold of the OSGi service. Unfortunately,
+ most of the OSGi frameworks expect their own <code class="interfacename">ServiceReference</code> classes and will fail when the
+ Gemini Blueprint/Spring DM managed reference is used. For such cases, one can get a hold of the native <code class="interfacename">ServiceReference</code> bound
+ at that moment, by casting the reference object to <code class="interfacename">ServiceReferenceProxy</code> and then calling
+ <code class="methodname">getTargetServiceReference</code>. Using the example context above, one might use the following code:</p>
+
+ <pre class="programlisting">ServiceReference nativeReference = ((ServiceReferenceProxy)serviceReference).getTargetServiceReference()</pre>
+
+ <p>The returned <code class="literal">nativeReference</code> can be safely passed to the OSGi framework however, since it is not managed by Gemini Blueprint/Spring DM,
+ in time, it might refer to a service different then the one backing the imported OSGi service.</p>
+ <p>To avoid this desynchronization, consider using managed <code class="interfacename">ServiceReference</code> objects mainly for reading the
+ bound OSGi service properties rather then getting a hold of OSGi services (which can be simply injected by Gemini Blueprint/Spring DM).</p>
+ </div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:refs:collection"></a>9.2.4.&nbsp;Referencing A Collection Of Services</h3></div></div></div>
+
+
+ <div class="sidebar"><div class="titlepage"><div><div><p class="title"><b>Natural vs custom ordering</b></p></div></div></div>
+
+ <p>
+ Java collection API defines two interfaces for ordering objects -
+ <code class="interfacename">Comparable</code> and <span class="interface">Comparator</span>.
+ The first is meant to be implemented by objects for providing <span class="emphasis"><em>natural
+ ordering</em></span>. <code class="classname">String</code>, <code class="classname">Long</code>
+ or <code class="classname">Date</code> are good examples of objects that implement the
+ <code class="interfacename">Comparable</code> interface.</p>
+ <p>
+ However, there are cases where sorting is different then the natural ordering or,
+ the objects meant to be sort do not implement <span class="interface">Comparable</span>. To
+ address this cases, <code class="interfacename">Comparator</code> interface was designed.
+ </p>
+ <p>For more information on this subject, please consult the <a class="ulink" href="http://java.sun.com/docs/books/tutorial/collections/interfaces/order.html" target="_top">
+ Object ordering</a> chapter from Java
+ <a class="ulink" href="http://java.sun.com/docs/books/tutorial/collections/" target="_top">collection</a> tutorial,
+ </p>
+ </div>
+
+ <p>Sometimes an application needs access not simply to any service
+ meeting some criteria, but to <span class="emphasis"><em>all</em></span> services
+ meeting some criteria. Gemini Blueprint/Spring DM allows the matching services may be held in a
+ <code class="interfacename">List</code> or <code class="interfacename">Set</code>
+ (optionally sorted).</p>
+
+ <p>The difference between using a <code class="interfacename">List</code> and a
+ <code class="interfacename">Set</code> to manage the collection is one of equality.
+ Two or more services published in the registry (and with distinct
+ service ids) may be "equal" to each other, depending on the
+ implementation of equals used by the service implementations. Only one
+ such service will be present in a set, whereas all services returned
+ from the registry will be present in a list. For more details on collections,
+ see <a class="ulink" href="http://java.sun.com/docs/books/tutorial/collections/interfaces/index.html" target="_top">this</a>
+ tutorial.</p>
+
+ <p>The <code class="literal">set</code> and <code class="literal">list</code> schema elements
+ are used to define collections of services with set or list semantics
+ respectively.</p>
+
+ <p>These elements support the attributes
+ <code class="literal">interface</code>, <code class="literal">filter</code>,
+ <code class="literal">bean-name</code>, <code class="literal">availability</code>, and
+ <code class="literal">context-class-loader</code>, with the same semantics as for
+ the <code class="literal">reference</code> element. The allowable values for the
+ <code class="literal">availability</code> attribute are <code class="literal">mandatory</code>
+ and <code class="literal">optional</code>.</p>
+
+ <p>An availability value of
+ <code class="literal">optional</code> indicates that it is permissible to
+ be no matching services. An availability value of
+ <code class="literal">mandatory</code> indicates that at least one matching service
+ is required at all times. Such a reference is considered a
+ <span class="emphasis"><em>required</em></span> reference and any exported services
+ from the same bundle (<code class="literal">service</code> defined beans) that
+ depend on a mandatory reference will automatically be unregistered
+ when the reference becomes unsatisfied, and reregistered when the
+ reference becomes satisfied again. See <a class="xref" href="#service-registry:refs:availability" title="9.2.2.&nbsp;Imported Service Availability">Section&nbsp;9.2.2, &#8220;Imported Service Availability&#8221;</a>
+ for more details.</p>
+
+ <p>The bean defined by a <code class="literal">list</code> element is of type
+ <code class="interfacename">java.util.List</code>. The bean defined by a
+ <code class="literal">set</code> element is of type
+ <code class="interfacename">java.util.Set</code>.</p>
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">Make sure the Gemini Blueprint/Spring DM collections are injected into properties of compatible types (
+ for example <code class="literal">set</code> into <code class="interfacename">Set</code> or <code class="interfacename">
+ Collection</code>) since otherwise the container will automatically perform
+ <a class="ulink" href="http://static.springframework.org/spring/docs/2.5.x/reference/validation.html#beans-beans-conversion" target="_top">type conversion</a>,
+ transforming the Gemini Blueprint/Spring DM managed collection into a 'normal' one, unaware of the OSGi dynamics.
+ </td></tr></table></div>
+
+ <p>The following example defines a bean of type <code class="interfacename">List</code> that
+ will contain all registered services supporting the
+ <code class="literal">EventListener</code> interface:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;list</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"myEventListeners"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.EventListener"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+
+ <p>The members of the collection defined by the bean are managed
+ dynamically by Spring. As matching services are registered and
+ unregistered in the service registry, the collection membership will
+ be kept up to date. Each member of the collection supports the service
+ interfaces that the corresponding service was registered with and that
+ are visible to the bundle.</p>
+
+ <p>Gemini Blueprint/Spring DM supports sorted collections as well, both for set and list.</p>
+ <p>It is possible to specify a sorting order using either the
+ <code class="literal">comparator-ref</code> attribute, or the nested
+ <code class="literal">comparator</code> element. The
+ <code class="literal">comparator-ref</code> attribute is used to refer to a
+ named bean implementing <code class="interfacename">java.util.Comparator</code>. The
+ <code class="literal">comparator</code> element can be used to define an inline
+ bean. For example:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;set</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"myServices"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MyService"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">comparator-ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"someComparator"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;list</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"myOtherServices"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.OtherService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;comparator&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans:bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"MyOtherServiceComparator"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/comparator&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/list&gt;</strong></pre>
+
+
+ <p>To sort using a natural ordering instead of an explicit
+ comparator, you can use the <code class="literal">natural</code>
+ element inside of <code class="literal">comparator</code>. You need to specify
+ the basis for the natural ordering: based on the service references,
+ following the <code class="interfacename">ServiceReference</code> natural ordering
+ defined in the OSGi Core Specification release 4, version 4.1, section 6.1.23;
+ or based on the services themselves (in which case the services must be
+ <code class="interfacename">Comparable</code>).</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;list</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"myServices"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MyService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;comparator&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;natural</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">basis</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"services"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/comparator&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/list&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;set</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"myOtherServices"</span><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.OtherService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;comparator&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;natural</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">basis</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service-references"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/comparator&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/set&gt;</strong></pre>
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">For a sorted set, a <code class="interfacename">SortedSet</code> implementation will be created.
+ However, since the JDK API does not provide a dedicated <code class="interfacename">SortedList</code>interface,
+ the sorted list will implement only the <code class="interfacename">List</code> interface.</td></tr></table></div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:collection:greedy-proxying"></a>9.2.4.1.&nbsp;Greedy Proxying</h4></div></div></div>
+
+
+ <p>All OSGi services imported by a Gemini Blueprint/Spring DM service collection publish and are type-compatible with the classes
+ declared by the <code class="literal">interfaces</code> property. However, some services might expose additional (optional)
+ classes that could be relevant to your application.</p>
+
+ <p>For these cases, Gemini Blueprint/Spring DM collections offer a dedicated attribute called <code class="literal">greedy-proxying</code> which
+ will cause the creates proxies to use <span class="emphasis"><em>all</em></span> the classes advertised by the imported services, visible to the consuming
+ importing bundle. Thus, it is possible to cast the imported proxies to classes different then those specified in the
+ <code class="literal">interfaces</code>. For example, with the following list definition:
+ </p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;list</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"services"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.SomeService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">greedy-proxying</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"true"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+
+ <p>one can do the following iteration (assuming <code class="classname">MessageDispatcher</code> type is imported by the bundle):</p>
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">for</strong> (Iterator iterator = services.iterator(); iterator.hasNext();) {
+ SomeService service = (SomeService) iterator.next();
+ service.executeOperation();
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">// if the service implements an additional type</em>
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">// do something extra</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">if</strong> (service <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">instanceof</strong> MessageDispatcher) {
+ ((MessageDispatcher)service).sendAckMessage();
+ }
+}</pre>
+
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">Before using greedy proxies and <code class="literal">instanceof</code> statements, consider using a different
+ interface/class for your services which provides better
+ <a class="ulink" href="http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming" target="_top">polymorphism</a>
+ and is more
+ <a class="ulink" href="http://en.wikipedia.org/wiki/Object_oriented" target="_top">object-oriented</a>.</td></tr></table></div>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:collection:member-type"></a>9.2.4.2.&nbsp;Member Type</h4></div></div></div>
+
+
+ <p>Since Spring DM 2.x/Gemini Blueprint, service collections can contain either service instances (default) or service references. The latter is useful if
+ the services themselves are not relevant but rather their properties and availability. For example, to track the service references,
+ the following configuration can be used:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;list</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"services"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.SomeService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">member-type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service-reference"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+
+ <p>Note that the collection contains <span class="emphasis"><em>native</em></span> service references which can be used by client to retrieve the backing
+ service (if needed). However, when using Gemini Blueprint/Spring DM this use case is discouraged since one can let the framework track the services instead
+ and get the (native) associated service reference from the proxy directly (see <a class="xref" href="#service-registry:refs:singular:property-editor" title="9.2.3.10.&nbsp;Getting A Hold Of The Managed Service Reference">Section&nbsp;9.2.3.10, &#8220;Getting A Hold Of The Managed Service Reference&#8221;</a>
+ for more details).</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:collection:attributes"></a>9.2.4.3.&nbsp;Collection (<code class="literal">list</code> And <code class="literal">set</code>) Element Attributes</h4></div></div></div>
+
+ <p>
+ <code class="literal">list</code> and <code class="literal">set</code> elements support all the attributes available to
+ <code class="literal">reference</code> element except the <code class="literal">timeout</code> attribute.
+
+ See the following table as a summary of the <code class="literal">list</code> and <code class="literal">set</code> element
+ attribute names, possible values and a short description for each of them.
+ </p>
+ <div class="table"><a name="collection-import-options"></a><p class="title"><b>Table&nbsp;9.4.&nbsp;&lt;list&gt;/&lt;set&gt; attributes</b></p><div class="table-contents">
+
+ <table class="table" summary="<list&gt;/<set&gt; attributes" width="100%" border="1"><colgroup><col class="c1"><col align="center" class="c2"><col align="center" class="c3"><col align="center" class="c4"><col align="center" class="c5"><col align="justify" class="c6"></colgroup><thead><tr><th>Name</th><th colspan="4" align="justify">Values</th><th align="justify">Description</th></tr></thead><tbody><tr><td>interface</td><td colspan="4" align="justify">fully qualified class name (such as <code class="classname">java.lang.Thread</code>)</td><td align="justify">The fully qualified name of the class under which the object will be exported.</td></tr><tr><td>filter</td><td colspan="4" align="justify">OSGi filter expression (such as <code class="literal">((asynchronous-delivery=true)</code>)</td><td align="justify">OSGi filter expression that is used to constrain the set of matching services
+ in the service registry.</td></tr><tr><td>bean-name</td><td colspan="4" align="justify">any string value</td><td align="justify">Convenient shortcut for specifying a filter expression that matches on the bean-name property
+ that is automatically advertised for beans published using the &lt;service&gt; element.</td></tr><tr><td>context-class-loader</td><td align="center">client</td><td colspan="2" align="center">service-provider</td><td align="center">unmanaged</td><td align="justify">Defines how the context class loader is managed when invoking operations on a service
+ backing this service reference. The default value is <code class="literal">client</code> which means that the context
+ class loader has visibility of the resources on this bundle's classpath. Alternate
+ options are <code class="literal">service-provider</code> which means that the context class loader has visibility of
+ resources on the bundle classpath of the bundle that exported the service, and <code class="literal">unmanaged</code>
+ which does not do any management of the context class loader.</td></tr><tr><td>availability</td><td colspan="2" align="center">optional</td><td colspan="2" align="center">mandatory</td><td align="justify">Defines the desired availability of the relationship to the backing service. If not specified,
+ the <code class="literal">default-availability</code> attribute will apply. 'mandatory' value (the default) means that a backing service
+ must exist at all times. The 'optional' value indicates that it is acceptable to be for an importer to have no
+ backing service.</td></tr><tr><td>comparator-ref</td><td colspan="4" align="justify">any string value</td><td align="justify">Named reference to a bean acting as comparator for the declaring collection. Declaring a comparator automatically
+ makes the declaring collection sorted.</td></tr><tr><td>greedy-proxying</td><td colspan="2" align="center">true</td><td colspan="2" align="center">false</td><td align="justify">Indicates whether the proxies created for the imported OSGi services will be generated using
+ just the classes specified (<code class="literal">false</code>) or all the classes exported by the service and visible to
+ the importing bundle (<code class="literal">true</code>). The default value is <code class="literal">false</code>.</td></tr><tr><td>member-type</td><td colspan="2" align="center">service-object</td><td colspan="2" align="center">service-reference</td><td align="justify">Indicates the type of object that will be placed within the reference collection.
+ <code class="literal">service-object</code> (the default) indicates the collection contains service proxies for imported services.
+ <code class="literal">service-reference</code> indicates the collection contains <code class="literal">ServiceReference</code> objects matching the
+ target service type.</td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>The table below lists the attributes available for the <code class="literal">comparator/natural</code> sub element.</p>
+
+ <div class="table"><a name="collection-import-comparator-options"></a><p class="title"><b>Table&nbsp;9.5.&nbsp;collection &lt;comparator&gt; attributes</b></p><div class="table-contents">
+
+ <table class="table" summary="collection <comparator&gt; attributes" width="100%" border="1"><colgroup><col class="c1"><col class="c2"><col class="c3"></colgroup><thead><tr><th>Name</th><th colspan="2">Values</th><th>Description</th></tr></thead><tbody><tr><td>basis</td><td>service</td><td>service-reference</td><td>Indicate the element on which <span class="emphasis"><em>natural ordering</em></span> should apply - <code class="literal">service</code> for considering
+ the service instance and <code class="literal">service-reference</code> for considering the service reference instead of the service.</td></tr></tbody></table>
+ </div></div><br class="table-break">
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:collection:dynamics"></a>9.2.4.4.&nbsp;<code class="literal">list</code> / <code class="literal">set</code> And OSGi Service Dynamics</h4></div></div></div>
+
+ <p>
+ A collection of OSGi services will change its content during the lifetime
+ of the application context since it needs to reflect the state of the OSGi
+ space. As service are registered and unregistered, they will be added or
+ removed from the collection.</p>
+
+ <p>While a <code class="literal">reference</code> declaration will try to
+ find a replacement if the backing service is unregistered, the collection
+ will simply remove the service from the collection.
+ Like <code class="literal">reference</code>, a collection of services can have a specified <code class="literal">availability</code>.
+ As opposed to <code class="literal">reference</code>s though, since Spring DM 2.x/Gemini Blueprint, a collection content can be queried, no matter
+ its availability and the number of services held.</p>
+ <p>Just like <code class="literal">reference</code>, mandatory collections
+ will trigger the unregistration of any exported service that depends
+ upon it. See
+ <a class="xref" href="#service-registry:export-import-relationship" title="9.2.2.2.&nbsp;Relationship Between The Service Exporter And Service Importer">Section&nbsp;9.2.2.2, &#8220;Relationship Between The Service Exporter And Service Importer&#8221;</a> for more information.
+ </p>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:collection:iterator"></a>9.2.4.5.&nbsp;<code class="interfacename">Iterator</code> Contract And Service Collections</h4></div></div></div>
+
+
+ <p>The recommend way of traversing a collection is by using an <code class="interfacename">Iterator</code>.
+ However, since OSGi services can come and go, the content of the managed service collection will be adjusted
+ accordingly. Gemini Blueprint/Spring DM will transparently update all <code class="interfacename">Iterator</code>s held by
+ the user so it is possible to safely traverse the collection while it is being modified. Moreover, the
+ <code class="interfacename">Iterator</code>s will reflect all the changes made to the collection, even if
+ they occurred after the <code class="interfacename">Iterator</code>s were created (that is during the iteration).
+ Consider a case where a collection shrinks significantly (for example a big number of OSGi
+ services are shutdown) right after an iteration started.
+ To avoid dealing with the resulting 'dead' service references,
+ Gemini Blueprint/Spring DM iterators do not take collection snapshots (that can be inaccurate)
+ but rather are updated on each service event so they reflect the latest collection state,
+ no matter how fast or slow the iteration is.</p>
+
+ <p>It is important to note that a service update will only influence <code class="interfacename">Iterator</code>
+ operations that are executed after the event occurred. Services already returned by the iterator will not be
+ updated even if the backing service has been unregistered. As a side note, if an operation is invoked on
+ such a service that has been unregistered, a <code class="literal">ServiceUnavailableException</code> will be thrown.
+ </p>
+
+ <p>To conclude, while a <code class="literal">reference</code> declaration will search for candidates in case the
+ backing service has been unregistered, a service collections will not replace unregistered services returned
+ to the user. However, it will remove the unregistered services from the collection so future iterations will not
+ encounter them.
+ </p>
+
+
+ <p>Please note that the <code class="interfacename">Iterator</code> contract is guaranteed meaning that
+ <code class="literal">next()</code> method <span class="emphasis"><em>always</em></span> obey the result of the previous
+ <code class="literal">hasNext()</code> invocation.</p>
+
+ <div class="table"><a name="collection-iterator-contract"></a><p class="title"><b>Table&nbsp;9.6.&nbsp;Dynamic service collection <code class="interfacename">Iterator</code> contract</b></p><div class="table-contents">
+
+ <table class="table" summary="Dynamic service collection Iterator contract" width="100%" border="1"><colgroup><col><col></colgroup><thead><tr><th>hasNext() returned value</th><th>next() behaviour</th></tr></thead><tbody><tr><td>true</td><td><span class="emphasis"><em>Always</em></span> return a non-null value, even when the collection has shrunk as services when away.
+ </td></tr><tr><td>false</td><td>per <code class="interfacename">Iterator</code> contract, <code class="classname">NoSuchElementException</code> is thrown.
+ This applies even if other services are added to the collection</td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>
+ The behaviour described above, offers a consistent view over the collection even if its structure changes during iteration.
+ To simply <span class="emphasis"><em>refresh</em></span> the iterator, call <code class="literal">hasNext()</code> again. This will force the
+ <code class="literal">Iterator</code> to check again the collection status for its particular entry in the iteration.</p>
+
+
+
+ <p>
+ In addition, any elements added to the collection during iteration over a <span class="emphasis"><em>sorted</em></span>
+ collection will only be visible if the iterator has not already passed
+ their sort point.</p>
+ </div>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:refs:dynamics"></a>9.2.5.&nbsp;Dealing With The Dynamics Of OSGi Imported Services</h3></div></div></div>
+
+
+ <div class="sidebar"><div class="titlepage"><div><div><p class="title"><b>Where is the <code class="literal">listener</code> element ?</b></p></div></div></div>
+
+ <p>Since Spring DM 2.x/Gemini Blueprint, the <code class="literal">reference-listener</code> replaced
+ the <code class="literal">listener</code> element which has been deprecated. The main reasons
+ behind the decisions were to align the configuration format closer with the Blueprint
+ spec and to avoid some of the confusion regarding the type of listener declared (service or reference
+ based). Note that <code class="literal">listener</code> element is still supported.</p>
+ </div>
+
+ <p>Whether you are using <code class="literal">reference</code>
+ or <code class="literal">set</code> or <code class="literal">list</code>, Spring Dynamic
+ Modules will manage the backing service. However there are cases
+ where the application needs to be aware when the backing service
+ is updated.</p>
+
+ <p>Such applications, that need to be aware of when the service
+ backing a <code class="literal">reference</code> bean is bound and unbound, can
+ register one or more listeners using the nested
+ <code class="literal">reference-listener</code> (or <code class="literal">listener</code>) element.
+ This element is available on both <code class="literal">reference</code> and
+ <code class="literal">set</code>, <code class="literal">list</code> declarations.
+ In many respects, the service importer listener declaration
+ is similar to the service exporter listener declaration
+ (<a class="xref" href="#service-registry:export:lifecycle" title="9.1.10.&nbsp;Service Registration And Unregistration Lifecycle">Section&nbsp;9.1.10, &#8220;Service Registration And Unregistration Lifecycle&#8221;</a>).
+
+ The <code class="literal">reference-listener</code> element refers to a bean (either by name,
+ or by defining one inline)
+ that will receive bind and unbind notifications. If this bean
+ implements Gemini Blueprint/Spring DM's
+ <code class="interfacename">org.eclipse.gemini.blueprint.service.importer.OsgiServiceLifecycleListener</code>
+ interface, then the <code class="literal">bind</code> and
+ <code class="literal">unbind</code> operations in this interface will be
+ invoked. Instead of implementing this interface (or in addition),
+ custom bind and unbind callback methods may be named.</p>
+
+ <p>An example of declaring a listener that implements
+ <code class="interfacename">OsgiServiceLifecycleListener</code>:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;reference</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"someService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MessageService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;reference-listener</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"aListenerBean"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/reference&gt;</strong></pre>
+
+ <p>An example of declaring an inline listener bean with custom
+ bind and unbind methods:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;reference</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"someService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MessageService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;reference-listener</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">bind-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"onBind"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">unbind-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"onUnbind"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans:bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"MyCustomListener"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/reference-listener&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/reference&gt;</strong></pre>
+
+ <p>If the listener bean implements the
+ <code class="interfacename">OsgiServiceLifecycleListener</code> interface
+ <span class="emphasis"><em>and</em></span> the listener definition specifies custom
+ bind and unbind operations then both the
+ <code class="literal">OsgiServiceLifecycleListener</code> operation and the
+ custom operation will be invoked, in that order.</p>
+
+ <p>The signature of a custom bind or unbind method must be one
+ of:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> anyMethodName(ServiceType service, Dictionary properties);
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> anyMethodName(ServiceType service, Map properties);
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> anyMethodName(ServiceReference ref);</pre>
+
+ <p>where <code class="literal">ServiceType</code> can be any type. Please note that
+ bind and unbind callbacks are invoked <span class="emphasis"><em>only</em></span>
+ if the backing service matches the type declared in the method signature(
+ <code class="classname">ServiceType</code>). If you want the callbacks to be called
+ no matter the type, use <code class="classname">java.lang.Object</code> as a
+ <code class="literal">ServiceType</code>.</p>
+
+ <p>
+ The <code class="literal">properties</code> parameter contains the set of properties
+ that the service was registered with.</p>
+
+ <p>If the method signature has a single argument of type
+ <code class="interfacename">ServiceReference</code> then the
+ <code class="interfacename">ServiceReference</code> of the service will be passed to
+ the callback in place of the service object itself.</p>
+
+
+ <p>When the listener is used with a <code class="literal">reference</code> declaration:</p>
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">A <span class="emphasis"><em>bind</em></span> callback is invoked
+ when the reference is initially bound to a backing service,
+ and whenever the backing service is replaced by a new backing service.
+ </li><li class="listitem">An <span class="emphasis"><em>unbind</em></span> callback is only
+ invoked when the current backing service is unregistered, and no
+ replacement service is immediately available
+ (i.e., the <code class="literal">reference</code> becomes unsatisfied).</li></ul></div>
+
+
+ <p>When the listener is used with a collection declaration (<code class="literal">set</code> or
+ <code class="literal">list</code>):</p>
+
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">A <span class="emphasis"><em>bind</em></span> callback is invoked
+ when a new service is added to the collection.
+ </li><li class="listitem">An <span class="emphasis"><em>unbind</em></span> callback is
+ invoked when a service is unregistered and is removed
+ from the collection.</li></ul></div>
+
+ <p>Again note that service collections there is <span class="emphasis"><em>no</em></span>
+ notion of <span class="emphasis"><em>service rebind</em></span>:
+ services are added or removed from the collection.</p>
+
+
+ <p>Bind and unbind callbacks are made synchronously as part of
+ processing an OSGi <code class="literal">serviceChanged</code> event for the
+ backing OSGi service, and are invoked on the OSGi thread that
+ delivers the corresponding OSGi
+ <code class="classname">ServiceEvent</code>.</p>
+
+ <p>The table below lists the attributes available for the <code class="literal">reference</code> <code class="literal">listener</code> sub element.</p>
+
+ <div class="table"><a name="reference-import-listener-options"></a><p class="title"><b>Table&nbsp;9.7.&nbsp;OSGi &lt;reference-listener&gt; attributes</b></p><div class="table-contents">
+
+ <table class="table" summary="OSGi <reference-listener&gt; attributes" width="100%" border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Name</th><th>Values</th><th>Description</th></tr></thead><tbody><tr><td>ref</td><td>bean name reference</td><td>Name based reference to another bean acting as listener.</td></tr><tr><td>bind-method</td><td>string representing a valid method name</td><td>The name of the method to be invoked when a backing service is bound.</td></tr><tr><td>unbind-method</td><td>string representing a valid method name</td><td>The name of the method to be invoked when a backing service is bound.</td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ </div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:refs:blueprint"></a>9.2.6.&nbsp;Blueprint <code class="literal">reference</code> Comparison</h3></div></div></div>
+
+
+ <p>Similar to Gemini Blueprint/Spring DM, the Blueprint Container offers a <code class="literal">reference</code> and <code class="literal">list</code> elements,
+ identical in functionality with the those in Gemini Blueprint/Spring DM. Below is a summary of the configuration options available in Gemini Blueprint/Spring DM and Blueprint:</p>
+
+ <div class="table"><a name="service-registry:refs:blueprint:comparison"></a><p class="title"><b>Table&nbsp;9.8.&nbsp;Spring DM / Blueprint Service Importer Configuration Comparison</b></p><div class="table-contents">
+
+ <table class="table" summary="Spring DM / Blueprint Service Importer Configuration Comparison" width="100%" border="1"><colgroup><col><col></colgroup><thead><tr><th align="center">Gemini Blueprint/Spring DM</th><th align="center">Blueprint</th></tr></thead><tbody><tr><td align="center">Common Elements/Attributes</td><td class="auto-generated">&nbsp;</td></tr><tr><td align="center">interface</td><td align="center">interface</td></tr><tr><td align="center">interfaces</td><td align="center">- (multiple interfaces not supported)</td></tr><tr><td align="center">ref</td><td align="center">ref</td></tr><tr><td align="center">filter</td><td align="center">filter</td></tr><tr><td align="center">bean-name</td><td align="center">component-name</td></tr><tr><td align="center">availability</td><td align="center">availability</td></tr><tr><td align="center">context-class-loader</td><td align="center">-</td></tr><tr><td align="center"><code class="literal">&lt;reference&gt;</code></td><td class="auto-generated">&nbsp;</td></tr><tr><td align="center">timeout</td><td align="center">timeout</td></tr><tr><td align="center">sticky</td><td align="center">- (the importer is always sticky)</td></tr><tr><td align="center"><code class="literal">&lt;list&gt;</code></td><td class="auto-generated">&nbsp;</td></tr><tr><td align="center">member-type</td><td align="center">member-type</td></tr><tr><td align="center">comparator-ref</td><td align="center">-</td></tr><tr><td align="center">greedy-proxying</td><td align="center">-</td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>Since the <code class="literal">registration-listener</code> declaration is identical in declaration and functionality between Blueprint
+ and Gemini Blueprint/Spring DM, this section does not mention it.</p>
+ </div>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="service-registry:refs:listener-and-proxies"></a>9.3.&nbsp;Listener And Service Proxies</h2></div></div></div>
+
+ <p>While the importer listener provides access to the OSGi service bound at a certain point, it is important to note that the given argument is <span class="emphasis"><em>not</em></span>
+ the actual service but a <span class="emphasis"><em>proxy</em></span>. This can have subtle side effects especially with regards to service class name
+ and identity. The reason behind using a proxy is to prevent the listener from holding strong reference to the service (which can disappear
+ at any point). Listeners interested in tracking certain services should not rely on instance equality (<code class="literal">==</code>). Object equality
+ (<code class="methodname">equals</code>/<code class="methodname">hashcode</code>) can be used but only if the backing service has exposed the aforementioned methods
+ as part of its contract (normally by declaring them on a certain published interface/class). If these methods are not published, the proxy will invoke its own method, not the targets. This is on purpose since,
+ while the proxy tries to be as transparent as possible, it is up to the developer to define the desired semantics.
+ </p>
+ <p>Thus, it is recommended (especially for <code class="literal">reference</code> importers) to do tracking based on just the service interface/contract
+ (not identity), service properties (see <code class="constant">org.osgi.framework.Constants#SERVICE_ID</code>) or service notification (bind/unbind).</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="service-registry:refs:invoker-bundle-context"></a>9.4.&nbsp;Accessing The Caller <code class="interfacename">BundleContext</code></h2></div></div></div>
+
+
+ <p>It is sometimes useful for an imported service to know which bundle is using it
+ at a certain time. To help with this scenario, in Gemini Blueprint/Spring DM imported services publish
+ the importing bundle <code class="interfacename">BundleContext</code> through
+ <code class="classname">LocalBundleContext</code> class. Each time a method on the importer is invoked,
+ the caller <code class="interfacename">BundleContext</code> will be made available, using
+ a <code class="classname">ThreadLocal</code>, through <code class="methodname">getInvokerBundleContext()</code>.
+ </p>
+ <p>Please be careful when using this class since it ties your code to Gemini Blueprint/Spring DM API.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="service-registry:refs:listener-best-practices"></a>9.5.&nbsp;Exporter/Importer Listener Best Practices</h2></div></div></div>
+
+
+ <p>As mentioned above, Gemini Blueprint/Spring DM exporter and importer allow listeners to be
+ used for receiving notifications on when services are bound, unbound, registered or
+ unregistered. Below you can find some guidance advices when working with listeners:
+ </p>
+
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ Do <span class="emphasis"><em>not</em></span> execute long activity tasks inside the listener. If you really
+ have to, use a separate thread for executing the work. The listener are called synchronously
+ and so try to be as fast as possible. Doing work inside the listener prevents other the event
+ to be sent to other listeners and the OSGi service to resume activity.
+ </li><li class="listitem">Use listener custom declaration as much as possible - it doesn't tie your code
+ to Gemini Blueprint/Spring DM API and it doesn't enforce certain signature names.</li><li class="listitem">If find yourself repeating bind/unbind method declarations for your listener definitions,
+ consider using Spring <a class="ulink" href="http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-child-bean-definitions" target="_top">
+ bean definition inheritance</a> to define a common definition that can be reused and customized
+ accordingly.
+ </li><li class="listitem">Prefer <code class="interfacename">java.util.Map</code> instead of <code class="classname">java.util.Dictionary</code>
+ class. The first is an interface while the latter is a deprecated, abstract class. To preserve compatibility, Gemini Blueprint/Spring DM
+ will pass to the listeners a <code class="interfacename">Map</code> implementation that can be casted, if needed, to a
+ <code class="classname">Dictionary</code>.</li><li class="listitem">Be careful when using overloaded methods: all methods matching a certain service type will be called which is not
+ always expected. Consider the following listener:
+ <div class="programlistingco"><pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">class</strong> MyListener {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> register(<span class="co" id="service-registry:refs:listener:type.1"><img src="images/callouts/1.png" alt="(1)"></span>Object service, Map properties);
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> register(<span class="co" id="service-registry:refs:listener:type.2"><img src="images/callouts/2.png" alt="(2)"></span>Collection dataService, Map properties);
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> register(<span class="co" id="service-registry:refs:listener:type.3"><img src="images/callouts/3.png" alt="(3)"></span>SortedSet orderedDataService , Map properties);
+}</pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <a name="service-registry:refs:listener:type.1"></a>
+ <p><code class="classname">Object</code> type - will match all services for which the listener is triggered. This method will be always called.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <a name="service-registry:refs:listener:type.2"></a>
+ <p><code class="classname">Collection</code> type - if this method is called, the <a class="link" href="#service-registry:refs:listener:type.1">
+ <code class="classname">Object</code> method</a> is also called.
+ </p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/3.png" alt="3" border="0"></span></p></td><td valign="top" align="left">
+ <a name="service-registry:refs:listener:type.3"></a>
+ <p><code class="classname">SortedSet</code> type - if this method is called, then both the <a class="link" href="#service-registry:refs:listener:type.1">
+ <code class="classname">Object</code></a> and <a class="link" href="#service-registry:refs:listener:type.2"><code class="classname">Collection</code></a>
+ methods are called.</p>
+ </td></tr></table></div></div>
+
+ </li></ul></div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:refs:listener-best-practices:cycles"></a>9.5.1.&nbsp;Listener And Cyclic Dependencies</h3></div></div></div>
+
+
+ <p>There are cases where an exporter/importer listener needs a reference back to the bean it is defined on:</p>
+
+ <div class="programlistingco"><pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"listener"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"cycle.Listener"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong> <span class="co" id="service-registry.listener.cycles.listener"><img src="images/callouts/1.png" alt="(1)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"target"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"importer"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong> <span class="co" id="service-registry.listener.cycles.listener.cycle"><img src="images/callouts/2.png" alt="(2)"></span>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:reference</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"importer"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"SomeService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong> <span class="co" id="service-registry.listener.cycles.bean"><img src="images/callouts/3.png" alt="(3)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:listener</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">bind-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"bind"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"listener"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong> <span class="co" id="service-registry.listener.cycles.bean.cycle"><img src="images/callouts/4.png" alt="(4)"></span>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:reference&gt;</strong></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p>Listener bean</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>Dependency listener -&gt; importer</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/3.png" alt="3" border="0"></span></p></td><td valign="top" align="left">
+ <p>Importer declaration</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/4.png" alt="4" border="0"></span></p></td><td valign="top" align="left">
+ <p>Dependency importer -&gt; listener</p>
+ </td></tr></table></div></div>
+
+ <p>
+ The declaration above while valid, creates a dependecy between the <code class="literal">listener</code> and the importer it is defined upon.
+ In order to create the importer, the <code class="literal">listener</code> has to be resolved and created but in order to do that,
+ the importer called <code class="literal">service</code> needs to be retrieved (instantiated and configured). This cycle needs to be broken
+ down so that at least one bean can be fully created and configured. This scenario is supported by Gemini Blueprint/Spring DM
+ for both exporter and importers however, if the listener is defined as a nested bean, the cycle cannot be resolved:</p>
+
+ <div class="programlistingco"><pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:reference</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"importer"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"SomeService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong> <span class="co" id="service-registry.listener.bad.cycles.bean"><img src="images/callouts/1.png" alt="(1)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:listener</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">bind-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"bind"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong> <span class="co" id="service-registry.listener.bad.cycles.bean.cycle"><img src="images/callouts/2.png" alt="(2)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"cycle.Listener"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong> <span class="co" id="service-registry.listener.bad.cycles.listener"><img src="images/callouts/3.png" alt="(3)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"target"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"importer"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong> <span class="co" id="service-registry.listener.bad.cycles.listener.cycle"><img src="images/callouts/4.png" alt="(4)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:listener&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:reference&gt;</strong></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p>OSGi service importer</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>Dependency between importer -&gt; listener</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/3.png" alt="3" border="0"></span></p></td><td valign="top" align="left">
+ <p>Nested listener declaration</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/4.png" alt="4" border="0"></span></p></td><td valign="top" align="left">
+ <p>Dependency nested listener -&gt; importer</p>
+ </td></tr></table></div></div>
+
+ <div class="sidebar"><div class="titlepage"><div><div><p class="title"><b>Beans and Cycles</b></p></div></div></div>
+
+ <p>
+ Cyclic dependencies (A depends on B which depends back on A) increase the complexity of your configuration
+ and in most cases indicate a design issue. What beans should be created and destroyed first for example?
+ While they are a bad practice, the Spring container makes a best attempt to solve the cyclic configurations
+ when singletons are involved (since the instances can be cached). However this does not work all the time and
+ depends heavily on your specific configuration (Can the bean class be partially initialized ? Does it rely on
+ special <code class="interfacename">Aware</code> interfaces? Are <code class="interfacename">BeanPostProcessor</code>s involved?)
+ </p>
+ </div>
+
+ <p>The example above will fail since <code class="literal">service</code> bean cannot be initialized as it depends on the
+ listener. The same cycle was seen before but in this case there is subtle yet big different from
+ the container perspective - the listener is declared as a nested/inner-bean (hence the missing bean <code class="literal">id</code>).
+ Inner beans have the same life cycle as their declaring parents and do not have any name. By definition, they are not tracked
+ by the container and are simply created on demand. Since the importer cannot be partially created and the nested listener cannot
+ be cached, the container cannot break the cycle and create the beans. While the two configurations shown above seem similar, one works
+ while the other does not. Another reason to not use cycles unless you really, really have to.</p>
+
+ <p>To conclude, if you need inside the listener to hold a reference to the exporter/importer on which the listener is declared,
+ either declare the listener as a <span class="emphasis"><em>top-level</em></span> bean (as shown before) or consider doing <span class="emphasis"><em>dependency lookup</em></span>.
+ However, the latter approach requires extra contextual information such as the <code class="interfacename">BeanFactory</code> to use and the bean
+ name and is more fragile then <span class="emphasis"><em>dependency injection</em></span>.</p>
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
+ <p>For those interested in the technical details, neither the exporter and importer cannot be partially initialized since
+ they require the application context <code class="classname">ClassLoader</code> which is requested through the
+ <code class="interfacename">BeanClassLoaderAware</code> which relies on a buit-in <code class="interfacename">BeanPostProcessor</code>
+ which is applied only after the bean has been configured and is ready for initialization. If the <code class="classname">ClassLoader</code>
+ was not required then the exporter/importer could have been partially initialized and the case above supported.</p>
+ </td></tr></table></div>
+
+ </div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="service-registry:refs:global-defaults"></a>9.6.&nbsp;Service Importer Global Defaults</h2></div></div></div>
+
+
+ <p>The <code class="literal">osgi</code> namespace offers two
+ global attributes for specifying default behaviours for all
+ importers declared in that file.</p>
+
+ <p>Thus, when using the <code class="literal">osgi</code> namespace to enclose
+ <code class="literal">set</code>, <code class="literal">list</code> or
+ <code class="literal">reference</code> elements, one can use:</p>
+
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <p><code class="literal">default-timeout</code> -
+ can be used to specify the default timeout (in milliseconds) for all
+ importer elements that do not explicitly specify one. For
+ example:</p>
+
+ <div class="programlistingco"><pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:xsi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:osgi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/osgi"</span> <span class="co" id="service-registry.global.ns.defaults.osgi.ns"><img src="images/callouts/1.png" alt="(1)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">osgi:default-timeout</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"5000"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong> <span class="co" id="service-registry.global.ns.defaults.timeout"><img src="images/callouts/2.png" alt="(2)"></span>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;reference</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"someService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.AService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong> <span class="co" id="service-registry.global.ns.default.serv.wo.timeout"><img src="images/callouts/3.png" alt="(3)"></span>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;reference</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"someOtherService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.BService"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">timeout</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1000"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong> <span class="co" id="service-registry.global.ns.default.serv.w.timeout"><img src="images/callouts/4.png" alt="(4)"></span>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/beans:beans&gt;</strong></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p>Declare <code class="literal">osgi</code> namespace prefix.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>Declare <code class="literal">default-timeout</code>(in miliseconds) on the root element.
+ If the default is not set, it will have a value of 5 minutes. In this example, the
+ default value is 5 seconds.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/3.png" alt="3" border="0"></span></p></td><td valign="top" align="left">
+ <p>This <code class="literal">reference</code> will inherit the default timeout value since
+ it does not specify one.
+ This service reference will have a timeout of 5 seconds.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/4.png" alt="4" border="0"></span></p></td><td valign="top" align="left">
+ <p>This <code class="literal">reference</code> declares a timeout, overriding the default value.
+ This service reference will have a timeout of 1 second.</p>
+ </td></tr></table></div></div>
+
+ </li><li class="listitem">
+ <p><code class="literal">default-availability</code> -
+ can be used to specify the default availability for all
+ importer elements that do not explicitly specify one.
+ Possible values are <code class="literal">optional</code> and <code class="literal">mandatory</code>.
+ The <code class="literal">default-cardinality</code> attribute, used by Spring DM 1.x, is still
+ available but it has been deprecated.
+ </p>
+
+ <p>Consider the following example:</p>
+
+ <div class="programlistingco"><pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans:beans</strong>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/osgi"</span> <span class="co" id="service-registry.global.ns.defaults.osgi"><img src="images/callouts/1.png" alt="(1)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:xsi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:beans</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans"</span> <span class="co" id="service-registry.global.ns.defaults.osgi.beans.ns"><img src="images/callouts/2.png" alt="(2)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:osgi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/osgi"</span> <span class="co" id="service-registry.global.ns.defaults.osgi.ns.again"><img src="images/callouts/3.png" alt="(3)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">osgi:default-availability</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span> <span class="co" id="service-registry.global.ns.defaults.osgi.cardinality"><img src="images/callouts/4.png" alt="(4)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default-lazy-init</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"false"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong> <span class="co" id="service-registry.global.ns.defaults.osgi.beans.defaults"><img src="images/callouts/5.png" alt="(5)"></span>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;reference</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"someService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.AService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong> <span class="co" id="service-registry.global.ns.defaults.osgi.ref.wo.cardinality"><img src="images/callouts/6.png" alt="(6)"></span>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;set</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"someSetOfService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.BService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong> <span class="co" id="service-registry.global.ns.defaults.osgi.collection.wo.cardinality"><img src="images/callouts/7.png" alt="(7)"></span>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;list</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"anotherListOfServices"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.CService"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">availability</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"mandatory"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong> <span class="co" id="service-registry.global.ns.defaults.osgi.collection.w.cardinality"><img src="images/callouts/8.png" alt="(8)"></span>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/beans:beans&gt;</strong></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p>Declare Gemini Blueprint schema as the default namespace.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>Import Spring Framework beans schema and associate a prefix with its namespace
+ (<code class="literal">beans</code> in this example).</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/3.png" alt="3" border="0"></span></p></td><td valign="top" align="left">
+ <p>Import Gemini Blueprint schema and associate a prefix with its namespace
+ (<code class="literal">osgi</code> in this example). This is required since the global attributes
+ have to be declared to an element (<code class="literal">beans</code>) belonging to another schema.
+ To avoid ambiguity, the Gemini Blueprint/Spring DM schema is imported under a specified prefix as well.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/4.png" alt="4" border="0"></span></p></td><td valign="top" align="left">
+ <p>Declare <code class="literal">default-availability</code> on the root element.
+ If the default is not set, it will have a value of <code class="literal">mandatory</code>. In this example, the
+ default value is <code class="literal">optional</code>. Note the <code class="literal">osgi</code> prefix added to
+ the global attribute.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/5.png" alt="5" border="0"></span></p></td><td valign="top" align="left">
+ <p><code class="literal">beans</code> element attributes (such as <code class="literal">default-lazy-init</code>)
+ do not need a prefix since they are declared as being local and unqualified
+ (see the beans schema for more information).</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/6.png" alt="6" border="0"></span></p></td><td valign="top" align="left">
+ <p>
+ The <code class="literal">reference</code> declaration will inherit the default availability value since it does not specify one.
+ </p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/7.png" alt="7" border="0"></span></p></td><td valign="top" align="left">
+ <p>
+ The <code class="literal">set</code> declaration will inherit the default availability value since it does not specify one.
+ </p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/8.png" alt="8" border="0"></span></p></td><td valign="top" align="left">
+ <p>The <code class="literal">list</code> declaration specifies its availability (<code class="literal">mandatory</code>),
+ overriding the default value.</p>
+ </td></tr></table></div></div>
+
+ </li></ul></div>
+
+ <p>The <code class="literal">default-*</code> attributes allow for concise and shorter declarations as well
+ as easy propagation of changes (such as increasing or decreasing the timeout).</p>
+ </div>
+ </div>
+ <div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="bundles"></a>Chapter&nbsp;10.&nbsp;Working With Bundles</h2></div></div></div>
+
+
+ <p>Gemini Blueprint offers a dedicated schema element for interacting with existing
+ bundles or for installing new ones. While it is not intended to be used as a replacement
+ for proper OSGi services, the <code class="literal">bundle</code> element offers a very
+ easy way of executing actions on bundles based on the lifecycle of the application
+ context.
+ </p>
+
+ <p>The <code class="literal">bundle</code> element defines a bean of type
+ <code class="interfacename">org.osgi.framework.Bundle</code>. It provides a simple way to
+ work directly with bundles, including driving their lifecycle. In the
+ simplest case all you need to do is specify the
+ <code class="literal">symbolic-name</code> of the bundle you are interested
+ in:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bundle</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"aBundle"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">symbolic-name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.xyz.abundle"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+
+ <p>The bean <code class="literal">aBundle</code> can now be injected into any property of
+ type <code class="interfacename">Bundle</code>.</p>
+
+ <p>If the needed bundle is not installed, one can use <code class="literal">location</code> attribute
+ to indicate install or/and the <code class="literal">action</code>/<code class="literal">destroy-action</code> attributes
+ provide declarative control over the bundle's lifecycle. The <code class="literal">location</code> attribute is
+ used to specify a URL where the bundle jar file artifact can be found. The
+ <code class="literal">action</code> attribute specifies the lifecycle operation to
+ be invoked on the bundle object. The supported action values are
+ <code class="literal">install</code>, <code class="literal">start</code>,
+ <code class="literal">update</code>, <code class="literal">stop</code>, and
+ <code class="literal">uninstall</code>. These actions have the same semantics as the
+ operations of the corresponding names defined on the
+ <code class="literal">Bundle</code> interface (see the OSGi Service Platform Core
+ Specification), with the exception that pre-conditions are weakened to
+ allow for example a <span class="emphasis"><em>start</em></span> action to be specified against a bundle that
+ is not currently installed (it will be installed first).</p>
+
+ <p>The following table shows how actions are interpreted for the given
+ Bundle states:</p>
+
+ <div class="table"><a name="bundle-factory-actions"></a><p class="title"><b>Table&nbsp;10.1.&nbsp;&lt;bundle&gt; <code class="literal">action</code> values</b></p><div class="table-contents">
+
+ <table class="table" summary="<bundle&gt; action values" width="100%" border="1"><colgroup><col><col><col><col></colgroup><thead><tr><th>Action</th><th><code class="literal">UNINSTALLED</code></th><th><code class="literal">INSTALLED/RESOLVED</code></th><th><code class="literal">ACTIVE</code></th></tr></thead><tbody><tr><td><code class="literal">START</code></td><td>installs and starts the bundle</td><td>starts the bundle</td><td>no action taken, bundle already started</td></tr><tr><td><code class="literal">UPDATE</code></td><td>installs the bundle and then updates it (`Bundle.update()`)</td><td>updates the bundle</td><td>updates the bundle</td></tr><tr><td><code class="literal">STOP</code></td><td>no action taken</td><td>no action taken</td><td>bundle is stopped</td></tr><tr><td><code class="literal">UNINSTALL</code></td><td>no action taken</td><td>bundle is uninstalled</td><td>bundle is stopped and then uninstalled</td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>For example:</p>
+
+ <pre class="programlisting"><em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- ensure this bundle is installed and started --&gt;</em>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bundle</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"aBundle"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">symbolic-name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.xyz.abundle"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">location</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.xyz.com/bundles/org.xyz.abundle.jar"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">action</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"start"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+
+
+
+ <p>The following table lists the <code class="literal">bundle</code> element attributes names,
+ possible values and a short description for each of them:
+ </p>
+
+ <div class="table"><a name="bundle-options"></a><p class="title"><b>Table&nbsp;10.2.&nbsp;&lt;bundle&gt; attributes</b></p><div class="table-contents">
+
+ <table class="table" summary="<bundle&gt; attributes" width="100%" border="1"><colgroup><col class="c1"><col align="center" class="c2"><col align="center" class="c3"><col align="center" class="c4"><col align="center" class="c5"><col align="center" class="c6"><col align="justify" class="c7"></colgroup><thead><tr><th>Name</th><th colspan="5" align="justify">Values</th><th align="justify">Description</th></tr></thead><tbody><tr><td>symbolic-name</td><td colspan="5" align="justify">any valid symbolic-name String</td><td align="justify">The symbolic name of the bundle object. Normally used when interacting with an already
+ installed bundle.</td></tr><tr><td>location</td><td colspan="5" align="justify">String that can be converted into an <code class="literal">URL</code></td><td align="justify">Location used to install, update or/and identify a bundle.</td></tr><tr><td>action</td><td align="center">start</td><td align="center">stop</td><td align="center">install</td><td align="center">uninstall</td><td align="center">update</td><td align="justify">Lifecyle action to drive on the bundle. The action is executed at startup.</td></tr><tr><td>destroy-action</td><td colspan="5" align="justify">(same as action)</td><td align="justify">Lifecyle action to drive on the bundle. The action is executed at shutdown.</td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>The samples that ship with the Gemini Blueprint project
+ include further support for a <code class="literal">virtual-bundle</code> element
+ that can be used to create and install OSGi bundles on the fly from
+ existing artifacts.</p>
+ </div>
+ <div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="compendium"></a>Chapter&nbsp;11.&nbsp;Compendium Services</h2></div></div></div>
+
+
+ <p>The OSGi Service Platform Service Compendium specification defines a
+ number of additional services that may be supported by OSGi
+ implementations. Gemini Blueprint supports an additional
+ "compendium" namespace that provides integration with some of these services.
+ By convention, the prefix <code class="literal">osgix</code> is used for this
+ namespace:</p>
+
+ <div class="programlistingco"><pre class="programlisting"><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-directive">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:xsi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns</span><span class="co" id="compendium:ns:xml:uri.prefix.2"><img src="images/callouts/1.png" alt="(1)"></span><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">:bp</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.osgi.org/xmlns/blueprint/v1.0.0"</span> <span class="co" id="compendium:ns:xml:uri.prefix.1"><img src="images/callouts/1.png" alt="(1)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:context</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/context"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:util</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/util"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:task</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/task"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:compendium</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium"</span> <span class="co" id="compendium:ns:xml:uri"><img src="images/callouts/2.png" alt="(2)"></span>
+ <span class="co" id="compendium:ns:xml:uri.loc"><img src="images/callouts/3.png" alt="(3)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xsi:schemaLocation</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
+ http://www.springframework.org/schema/util
+ http://www.springframework.org/schema/util/spring-util-3.2.xsd
+ http://www.springframework.org/schema/task
+ http://www.springframework.org/schema/task/spring-task-3.2.xsd
+ http://www.osgi.org/xmlns/blueprint/v1.0.0
+ http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
+ http://www.springframework.org/schema/context
+ http://www.springframework.org/schema/context/spring-context-3.2.xsd
+ http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium
+ http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium/gemini-blueprint-compendium.xsd"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- use the OSGi namespace elements directly --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"simpleServiceOsgi"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"simpleService"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.xyz.MyService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong>
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- qualify compendium namespace elements --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;compendium:cm-properties</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"cm"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">persistent-id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.myapp"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/beans:beans&gt;</strong></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p>Compendium namespace declaration (bound to <code class="literal">osgix</code> prefix)</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>Schema location (namespace URI)</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/3.png" alt="3" border="0"></span></p></td><td valign="top" align="left">
+ <p>XML schema to use for the compendium namespace</p>
+ </td></tr></table></div></div>
+
+ <p>At present this namespace provides support for the Configuration
+ Admin service. Support for other compendium services may be added in
+ future releases.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="compendium:cm"></a>11.1.&nbsp;Configuration Admin</h2></div></div></div>
+
+
+ <p>One of the most important compendium services, is the <a class="ulink" href="http://www.osgi.org/javadoc/r4v401/org/osgi/service/cm/package-summary.html" target="_top">Configuration Admin</a>
+ which, as a name implies, provides configuration to interested bundles through the OSGi service registry. Gemini Blueprint provides dedicated support
+ for Configuration Admin (CM), allowing consumption and injection of the configuration data in a declarative way.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="compendium:cm:props"></a>11.1.1.&nbsp;Exposing Configuration Admin Entries As <code class="classname">Properties</code></h3></div></div></div>
+
+
+ <p>In its simplest form, the CM can be seen as a configuration source, namely a <code class="classname">Dictionary</code> whose
+ keys are always <code class="classname">String</code>s. Gemini Blueprint can expose entries in the CM as a <code class="classname">Properties</code> object,
+ through the <code class="literal">cm-properties</code> element. A minimal declaration looks as follows:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgix:cm-properties</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"ds.cfg"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">persistent-id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"data.source.office.1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+
+ <p>The configuration above, exposes the properties available in the CM under <span class="emphasis"><em>data.source.office.1</em></span> entry as a bean named
+ <span class="emphasis"><em>ds.cfg</em></span>.</p>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top"><p>The <code class="literal">persistent-id</code> attribute must refer to the
+ persistent-id of an OSGi <code class="interfacename">ManagedService</code>, it is a
+ configuration error to specify a factory persistent id referring to a
+ <code class="interfacename">ManagedServiceFactory</code>.</p></td></tr></table></div>
+
+ <p>Those familiar with Spring's
+ <a class="ulink" href="http://docs.spring.io/spring/docs/4.3.x/spring-framework-reference/html/xsd-configuration.html#xsd-config-body-schemas-util" target="_top">util schema</a> will
+ find <code class="literal">&lt;osgi:cm-properties/&gt;</code> element similar to <code class="literal">&lt;util:properties/&gt;</code>.</p>
+
+ <p>It is possible to specify a default set of property values to be used in the event that the configuration dictionary does not contain
+ an entry for a given key. The declaration is similar to the <code class="literal">props</code> element inside the Spring beans namespace:</p>
+ <pre class="programlisting"><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-directive">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:xsi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:bp</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.osgi.org/xmlns/blueprint/v1.0.0"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:context</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/context"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:util</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/util"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:task</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/task"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:compendium</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium"</span>
+
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xsi:schemaLocation</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
+ http://www.springframework.org/schema/util
+ http://www.springframework.org/schema/util/spring-util-3.2.xsd
+ http://www.springframework.org/schema/task
+ http://www.springframework.org/schema/task/spring-task-3.2.xsd
+ http://www.osgi.org/xmlns/blueprint/v1.0.0
+ http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
+ http://www.springframework.org/schema/context
+ http://www.springframework.org/schema/context/spring-context-3.2.xsd
+ http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium
+ http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium/gemini-blueprint-compendium.xsd"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;compendium:cm-properties</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"cfg.with.defaults"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">persistent-id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"data.source.office.2"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans:prop</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">key</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"host"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>localhost<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/beans:prop&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans:prop</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">key</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"port"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>3306<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/beans:prop&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/compendium:cm-properties&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/beans:beans&gt;</strong></pre>
+
+ <p>By default, the properties found in the Configuration Admin entry will override the local properties. Thus, for the previous example, if the
+ <code class="literal">data.source.office.2</code> configuration contains a <span class="emphasis"><em>host</em></span> entry, its value will override the locally defined
+ <code class="literal">localhost</code>. For cases where this behaviour is undesired, the attribute <code class="literal">local-override</code>
+ (default <code class="literal">false</code>) allows one to revert the merging algorithm, forcing the local properties to override the entries in the CM.</p>
+
+ <p>Since <code class="literal">cm-properties</code> exposes the CM entries as <code class="classname">Properties</code>, it can be used with Spring's <code class="classname">
+ <a class="ulink" href="http://docs.spring.io/spring/docs/4.3.x/spring-framework-reference/html/beans.html#beans-factory-placeholderconfigurer" target="_top">PropertyPlaceholderConfigurer</a></code>
+ and <code class="classname"><a class="ulink" href="http://docs.spring.io/spring/docs/4.3.x/spring-framework-reference/html/beans.html#beans-factory-overrideconfigurer" target="_top">PropertyOverrideConfigurer</a></code>
+ to externalize and customize environment-specific properties:</p>
+
+ <pre class="programlisting"><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-directive">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:xsi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:context</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/context"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:mvc</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/mvc"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:bp</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.osgi.org/xmlns/blueprint/v1.0.0"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:compendium</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xsi:schemaLocation</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
+ http://www.osgi.org/xmlns/blueprint/v1.0.0
+ http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
+ http://www.springframework.org/schema/context
+ http://www.springframework.org/schema/context/spring-context-4.2.xsd
+ http://www.springframework.org/schema/mvc
+ http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
+ http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium
+ http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium/gemini-blueprint-compendium.xsd"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- Configuration Admin entry --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;compendium:cm-properties</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"cmProps"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">persistent-id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.myapp"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;prop</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">key</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"host"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>localhost<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/prop&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/compendium:cm-properties&gt;</strong>
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- placeholder configurer --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;context:property-placeholder</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">properties-ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"cmProps"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"dataSource"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">...&gt;</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">&lt;property</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"host"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"${host}"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"timeout"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"${timeout}"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/beans&gt;</strong></pre>
+
+ <p>An important aspect of <code class="literal">cm-properties</code> is does <span class="emphasis"><em>not</em></span> reflect
+ any that any subsequent changes made to the entry it represents, made through the Configuration Admin API.
+ That is, once resolved, the <code class="literal">cm-properties</code> content remains the same, regardless of any updates
+ made the to CM entry it represents.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="compendium:cm:managed-properties"></a>11.1.2.&nbsp;Managed Properties</h3></div></div></div>
+
+
+ <p>Based on a configuration admin entry, Gemini Blueprint can autowire by name, the properties of a given bean. To use this feature, define
+ a nested <code class="literal">managed-properties</code> inside the bean definition:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"managedComponent"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"MessageTank"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgix:managed-properties</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">persistent-id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.messageservice"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong></pre>
+
+ <p>For each key in the dictionary stored by Configuration Admin under the given persistent id,
+ if the bean type has a property with a matching name (following JavaBeans conventions),
+ then that component property will be dependency injected with the value stored in Configuration Admin under the key.
+ If the definition of <code class="classname">SomeClass</code> from the example above is as follows:</p>
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">class</strong> MessageTank {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">private</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">int</strong> amount;
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">int</strong> getAmount() { <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">return</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">this</strong>.amount; }
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> setAmount(<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">int</strong> amount) { <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">this</strong>.amount = amount; }
+}</pre>
+ <p>and the configuration dictionary stored under the pid <code class="literal">com.xyz.messageservice</code> contains an entry
+ <code class="literal">amount=200</code>, then the <code class="literal">setAmount</code> method will be invoked on the bean
+ instance during configuration, passing in the value <code class="literal">200</code>.</p>
+ <p>If a property value is defined both in the configuration dictionary stored in the Configuration Admin service and in a
+ property element declaration nested in the component element, then the value from Configuration Admin takes precedence:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"managedComponent"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"MessageTank"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgix:managed-properties</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">persistent-id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.messageservice"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"amount"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"100"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"threshold"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"500"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong></pre>
+
+ <p>Property values specified via property elements can therefore be treated as default values to be used if none is available through
+ Configuration Admin.</p>
+
+ <div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="images/admons/warning.png"></td><th align="left">Warning</th></tr><tr><td align="left" valign="top">Do not share the same <span class="emphasis"><em>persistent-id</em></span> (PID) between multiple bundles or definitions, as <span class="emphasis"><em>only one</em></span>
+ of them will receive notifications. <code class="literal">managed-properties</code> relies on <code class="literal">org.osgi.service.cm.ManagedService</code>
+ contract which mandates that each <code class="literal">ManagedService</code> instance must be identified with its own unique PID.
+ Please see the Configuration Admin spec, specifically section 104.3 and 104.5</td></tr></table></div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="compendium:cm:managed-properties:update"></a>11.1.2.1.&nbsp;Configuration Admin Runtime Updates</h4></div></div></div>
+
+ <p>A powerful feature of Configuration Admin is the ability to update (or delete) entries at runtime. That is, the configuration data
+ stored in Configuration Admin may be updated after the bean has been created. By default, any post-creation updates will be ignored. However,
+ one can configure <code class="literal">managed-properties</code> element to receive configuration updates through the <code class="literal">autowire-on-update</code>
+ and <code class="literal">update-method</code> attributes.</p>
+
+ <p><code class="literal">update-method</code> specifies the bean method to invoke whenever an update occurs in the configuration data.
+ The update method must have one of the following signatures:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> anyMethodName(Map properties)
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> anyMethodName(Map&lt;String,?&gt; properties); <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">// for Java 5</em></pre>
+
+ <p>If <code class="literal">autowire-on-update</code> is set to <code class="literal">true</code> (default is <code class="literal">false</code>) then the container will autowire the target bean everytime an update occurs.
+ If both <code class="literal">autowire-on-update</code> and <code class="literal">update-method</code> are specified then the autowiring process will take precedence.
+ For autowiring, the component class must provide setter methods for the component properties that it wishes to have updated. Consider the following class definitions:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">class</strong> ContainerManagedBean {
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">// will be reinjected (since it has a setter)</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">private</strong> Integer integer;
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">// will not be reinjected (no setter present)</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">private</strong> Long waitTime;
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> setInteger(Integer integer) { <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">this</strong>.integer = integer; }
+}
+
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">class</strong> SelfManagedBean {
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">// update callback</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> updateCallback(Map properties) {
+ System.out.println(<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"Received properties "</em></strong> + properties);
+ System.out.println(<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"Props can be used as a Dictionary "</em></strong> + (Dictionary) properties);
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">// do more work ... </em>
+ }
+}</pre>
+
+ <p>and configuraton:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"containerManaged"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"ContainerManagedBean"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgix:managed-properties</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">persistent-id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"labX"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">autowire-on-update</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"true"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"integer"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"23"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beanManaged"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"SelfManagedBean"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgix:managed-properties</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">persistent-id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"labY"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">update-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"updateCallback"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong></pre>
+
+ <p>Any updates made to the CM entry <code class="literal">labX</code> will be automatically reinjected on existing instances of
+ <code class="literal">containerManaged</code> bean while the <code class="literal">labY</code> updates will be passed to <code class="methodname">updateCallback</code>
+ method.</p>
+
+ <p>The update options are summarized in the table below:</p>
+ <div class="table"><a name="compendium-cm-managed-properties-options"></a><p class="title"><b>Table&nbsp;11.1.&nbsp;Managed Properties Update Options</b></p><div class="table-contents">
+
+ <table class="table" summary="Managed Properties Update Options" width="100%" border="1"><colgroup><col class="c1"><col class="c2"><col class="c3"></colgroup><thead><tr><th><code class="literal">autowire-on-update</code></th><th><code class="literal">update-method</code></th><th>Behaviour</th></tr></thead><tbody><tr><td><code class="literal">true</code></td><td><span class="emphasis"><em>optional</em></span>, called after autowiring</td><td>Reinjects the bean properties, using the properties present in the update. The re-injection will be applied while locking (through
+ a <code class="literal">synchronized</code> instruction) the bean instance. If the locking or re-injection strategy is not suitable, consider using
+ the <code class="literal">update-method</code> only approach.</td></tr><tr><td><code class="literal">false</code> (default)</td><td><span class="emphasis"><em>optional</em></span></td><td>Invokes the <code class="literal">update-method</code> callback on the bean instance, passing the updated configuration (as a
+ <code class="interfacename">Map</code> object that can be safely cast to a <code class="classname">Dictionary</code> if needed). No locking is
+ performed.</td></tr></tbody></table>
+ </div></div><br class="table-break">
+ </div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="compendium:cm:managed-service-factories"></a>11.1.3.&nbsp;Managed Service Factories</h3></div></div></div>
+
+
+ <p>The Configuration Admin service supports a notion of a <span class="emphasis"><em>managed service factory</em></span>(see section 104.6 in the Compendium Specification).
+ A managed service factory is identified by a factory pid which allows <span class="emphasis"><em>multiple</em></span> <code class="interfacename">Configuration</code> objects
+ to be associated with the factory. <code class="interfacename">Configuration</code> objects associated with the factory can be added or removed at any point.
+ The main intent of a factory is to create an OSGi service for each configuration: adding a new <code class="interfacename">Configuration</code> entry results
+ in a new OSGi service being registered, removing a <code class="interfacename">Configuration</code>, unregisters the service.
+ Gemini Blueprint provides support for the <span class="emphasis"><em>managed service factory</em></span> concept through the <code class="literal">managed-service-factory</code> element. Once
+ defined, the configuration associated with the factory pid will automatically create (or remove) bean instances which will be registered (or unregistered)
+ in the OSGi space based on a <span class="emphasis"><em>template</em></span> bean definition and the CM configuration.</p>
+
+ <p>This might sound more complicated then it actually is, so let's look at a simplistic example:</p>
+ <div class="programlistingco"><pre class="programlisting">&lt;osgix:managed-service-factory id=<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"simple-msf"</em></strong>
+ factory-pid=<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"com.xyz.messageservice"</em></strong> <span class="co" id="compendium:msf:def.1:fpid"><img src="images/callouts/1.png" alt="(1)"></span>
+ auto-export=<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"all-classes"</em></strong>&gt; <span class="co" id="compendium:msf:def.1:ae"><img src="images/callouts/2.png" alt="(2)"></span>
+
+ &lt;bean <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">class</strong>=<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"com.xyz.MessageTank"</em></strong>/&gt; <span class="co" id="compendium:msf:def.1:bean.template"><img src="images/callouts/3.png" alt="(3)"></span>
+&lt;/osgix:managed-service-factory&gt;</pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p>factory persistent id (pid)</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>Shortcut flag used to determine under what interfaces the OSGi service is published (more info below)</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/3.png" alt="3" border="0"></span></p></td><td valign="top" align="left">
+ <p>bean definition <span class="emphasis"><em>template</em></span>. For each detected configuration, a new service will be created using
+ the bean definition template.</p>
+ </td></tr></table></div></div>
+
+ <p>In its simplest form, the <code class="literal">managed-service-factory</code> requires the <span class="emphasis"><em>factory pid</em></span>, a <span class="emphasis"><em>bean definition</em></span>
+ used as a template and some information on how possible bean instances are published as services. Basically, the definition above instructs
+ Gemini Blueprint to monitor the given factory pid (through a dedicated <code class="interfacename">ManagedServiceFactory</code> implementation (see the Compendium Spec for
+ more info)) and for every <code class="interfacename">Configuration</code> object associated with the factory pid, to create a new, anonymous instance of
+ the nested bean declared and export that instance as an OSGi service. The lifecycle of these beans instances is tied to the lifecycle of the
+ associated <code class="interfacename">Configuration</code> objects. If a new configuration is added, a new bean is created and exported.
+ If a configuration object is deleted or disassociated from the factory pid then the corresponding bean instance is destroyed.</p>
+
+ <p>In many regards, <code class="literal">managed-service-factory</code> acts as a specialized service exporter, similar to the
+ <a class="link" href="#service-registry:export" title="9.1.&nbsp;Exporting A Spring Bean As An OSGi Service"><code class="literal">service</code></a> element but supporting the concept of
+ <a class="link" href="#compendium:cm:managed-properties" title="11.1.2.&nbsp;Managed Properties">managed properties</a>. In fact, many of
+ <code class="literal">service</code>'s attributes that indicate how a bean is exported, are found in <code class="literal">managed-service-factory</code> (as you saw in the
+ previous example with <code class="literal">auto-export</code>) as are the <code class="literal">managed-properties</code> attributes.</p>
+
+ <p>The list of attributes can be found below:</p>
+
+ <div class="table"><a name="compendium-cm-msf-options"></a><p class="title"><b>Table&nbsp;11.2.&nbsp;Managed Service Factory Options</b></p><div class="table-contents">
+
+ <table class="table" summary="Managed Service Factory Options" width="100%" border="1"><colgroup><col class="c1"><col class="c2"><col class="c3"><col class="c4"><col class="c5"><col class="c6"></colgroup><thead><tr><th align="center">Name</th><th colspan="4" align="center">Values</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">interface</td><td colspan="4" align="center">fully qualified class name (such as <code class="classname">java.lang.Thread</code>)</td><td align="center">the fully qualified name of the class under which the object will be exported</td></tr><tr><td align="center">context-class-loader</td><td colspan="2" align="center">unmanaged</td><td colspan="2" align="center">service-provider</td><td align="center">Defines how the context class loader will be managed when an operation is invoked on the
+ exported service. The default value is <code class="literal">unmanaged</code> which means that no management of
+ the context class loader is attempted. A value of <code class="literal">service-provider</code> guarantees that
+ the context class loader will have visibility of all the resources on the class path of
+ bundle exporting the service.</td></tr><tr><td align="center">auto-export</td><td align="center">disabled <code class="literal">(default)</code></td><td align="center">interfaces</td><td align="center">class-hierarchy</td><td align="center">all-classes</td><td align="center">Enables Spring to automatically manage the set of service interfaces advertised for the
+ service. By default this facility is <code class="literal">disabled</code>. A value of <code class="literal">interfaces</code> advertises all
+ of the Java interfaces supported by the exported service. A value of <code class="literal">class-hierarchy</code>
+ advertises all the Java classes in the hierarchy of the exported service. A value of
+ <code class="literal">all-classes</code> advertises all Java interfaces and classes.</td></tr><tr><td align="center">autowire-on-update</td><td colspan="2" align="center">false <code class="literal">(default)</code></td><td colspan="2" align="center">true</td><td align="center">Whether or not the container should autowire the target bean everytime an update occurs.
+ When <code class="literal">true</code> is specified, the container will perform autowire (by name) the bean instance with the
+ newly set properties. In case <code class="literal">update-method</code> attribute is used as well, the autowiring process will
+ take precedence.</td></tr><tr><td align="center">update-method</td><td colspan="2" align="center">none <code class="literal">(default)</code></td><td colspan="2" align="center">someMethod</td><td align="center">The update method to invoke whenever an update occurs in the configuration data. Allows the target
+ bean to process the update information itself. In case <code class="literal">autowire-on-update</code> is also used, the <code class="literal">update-method</code>
+ will be invoked after the autowiring takes place.</td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>Similar to the <code class="literal">service</code> element, a list of interfaces or/and registration listeners can be declared to be notified when a
+ service is being registered/unregistered. For more information on the semantics, please see <a class="xref" href="#service-registry:export:intfs" title="9.1.3.&nbsp;Controlling The Set Of Advertised Service Interfaces For An Exported Service">Section&nbsp;9.1.3, &#8220;Controlling The Set Of Advertised Service Interfaces For
+ An Exported Service&#8221;</a> and
+ <a class="xref" href="#service-registry:export:lifecycle" title="9.1.10.&nbsp;Service Registration And Unregistration Lifecycle">Section&nbsp;9.1.10, &#8220;Service Registration And Unregistration Lifecycle&#8221;</a> chapters.</p>
+
+ <p>Now that the <code class="literal">managed-service-factory</code> options have been explained, let's look at a more complex configuration:</p>
+
+ <div class="programlistingco"><pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"queueTracker"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.xyz.queue.QueueTracker"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgix:managed-service-factory</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"data-msf"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">factory-pid</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.xyz.labX"</span> <span class="co" id="compendium:msf:def.2:fpid"><img src="images/callouts/1.png" alt="(1)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">autowire-on-update</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"true"</span> <span class="co" id="compendium:msf:def.2:us"><img src="images/callouts/2.png" alt="(2)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">update-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"refresh"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong> <span class="co" id="compendium:msf:def.2:um"><img src="images/callouts/3.png" alt="(3)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgix:interfaces&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;value&gt;</strong>java.util.Collection<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/value&gt;</strong> <span class="co" id="compendium:msf:def.2:intfs.1"><img src="images/callouts/4.png" alt="(4)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;value&gt;</strong>java.util.Queue<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/value&gt;</strong> <span class="co" id="compendium:msf:def.2:intfs.2"><img src="images/callouts/4.png" alt="(4)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgix:interfaces&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgix:registration-listener</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"queueTracker"</span> <span class="co" id="compendium:msf:def.2:list.def"><img src="images/callouts/5.png" alt="(5)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">registration-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"track"</span> <span class="co" id="compendium:msf:def.2:list.cm.1"><img src="images/callouts/6.png" alt="(6)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">unregistration-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"untrack"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong> <span class="co" id="compendium:msf:def.2:list.cm.2"><img src="images/callouts/7.png" alt="(7)"></span>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.ResizableQueue"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong> <span class="co" id="compendium:msf:def.2:tmpl"><img src="images/callouts/8.png" alt="(8)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"size"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"100"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"concurrency"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"10"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"fair"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"false"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgix:managed-service-factory&gt;</strong></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p><code class="interfacename">ManagedServiceFactory</code> factory persistent id</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>whether Gemini Blueprint should autowire the bean when a <code class="interfacename">Configuration</code> is updated</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/3.png" alt="3" border="0"></span></p></td><td valign="top" align="left">
+ <p>the method to invoke after autowiring</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/4.png" alt="4" border="0"></span></p></td><td valign="top" align="left">
+ <p>the interfaces under which the nested beans are published as OSGi services</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/5.png" alt="5" border="0"></span></p></td><td valign="top" align="left">
+ <p>listener notified when a service (based on the CM <code class="interfacename">Configuration</code>) is registered/unregistered</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/6.png" alt="6" border="0"></span></p></td><td valign="top" align="left">
+ <p>custom (optional) service registration method</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/7.png" alt="7" border="0"></span></p></td><td valign="top" align="left">
+ <p>custom (optional) service unregistration method</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/8.png" alt="8" border="0"></span></p></td><td valign="top" align="left">
+ <p>bean definition template</p>
+ </td></tr></table></div></div>
+
+ <p>The example above, creates a imaginary <code class="classname">ResizeableQueue</code> instance for each <code class="interfacename">Configuration</code> entry
+ present under the <code class="literal">org.xyz.labX</code> factory pid. Each instance has default values assigned to <code class="literal">size</code>, <code class="literal">concurrency</code>
+ and <code class="literal">fair</code> parameters. However, just like <code class="literal">managed-properties</code>, during the bean creation, the values received from the
+ Configuration Admin will be injected by name, possibly overriding existing settings. Once created and configured, each nested, anonymous bean instance
+ is registered as an OSGi service under the <code class="interfacename">java.util.Collection</code> and <code class="interfacename">java.util.Queue</code>
+ interfaces. The OSGi service lifecycle is monitored by a registration listener, namely the bean <code class="literal">queueTracker</code>.
+ Finally, due to the specified <code class="literal">autowire-on-update</code> and <code class="literal">update-method</code> attributes, any updates executed to each CM configuration
+ will cause the container to autowire the associated bean instance with the newly set properties and after that a
+ <code class="methodname">refresh</code> callback will be invoked on it.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="compendium:cm:dict"></a>11.1.4.&nbsp;Direct Access To Configuration Data</h3></div></div></div>
+
+
+ <p>The simplest way to work directly with the configuration data stored under a given persistent id or factory persistent id,
+ is to register a service that implements either the <code class="interfacename">ManagedService</code> or <code class="interfacename">ManagedServiceFactory</code>
+ interface and specify the pid that you are interested in as a service property (for more information, see the Configuration Admin chapter
+ in the OSGi compendium spec). For example:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.osgi.service.cm.ManagedService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"myManagedService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service-properties&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;entry</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">key</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service.pid"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"my.managed.service.pid"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:service-properties&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:service&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"myManagedService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MyManagedService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+ </div>
+
+ </div>
+ </div>
+ <div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="testing"></a>Chapter&nbsp;12.&nbsp;Testing OSGi based Applications</h2></div></div></div>
+
+
+ <p>By following best practices and using the Gemini Blueprint
+ support, your bean classes should be easy to unit test as they will have
+ no hard dependencies on OSGi, and the few OSGi APIs that you may interact
+ with (such as <code class="interfacename">BundleContext</code>) are interface-based
+ and easy to mock. Whether you want to do unit testing or <a class="ulink" href="http://en.wikipedia.org/wiki/Integration_testing" target="_top">
+ integration</a> testing, Spring DM can ease your task.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="testing:mocks"></a>12.1.&nbsp;OSGi Mocks</h2></div></div></div>
+
+
+
+ <div class="sidebar"><div class="titlepage"><div><div><p class="title"><b>Mocks vs Stubs</b></p></div></div></div>
+
+ <p>There are various strategies to unit test code
+ that requires collaborators. The two most popular strategies
+ are <span class="emphasis"><em>stubs</em></span> and <span class="emphasis"><em>mocks</em></span>.
+ </p><p>
+ See <a class="ulink" href="http://martinfowler.com/articles/mocksArentStubs.html" target="_top">
+ this</a> article by Martin Fowler which describes in detail the difference
+ between them.</p>
+ </div>
+
+ <p>
+ Even though most OSGi API are interfaces and creating mocks using a specialized
+ library like <a class="ulink" href="http://www.easymock.org/" target="_top">EasyMock</a> is fairly
+ simple, in practice the amount of code of setting the code (especially on JDK 1.4)
+ becomes cumbersome. To keep the tests short and concise, Gemini Blueprint/Spring DM provides OSGi
+ mocks under <code class="literal">org.eclipse.gemini.blueprint.mock</code> package.</p>
+
+ <p>It's up to you to decide whether they are useful or not however, we make extensive
+ use of them inside Gemini Blueprint/Spring DM test suite. Below you can find a code snippet that you
+ are likely to encounter in our code base:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">private</strong> ServiceReference reference;
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">private</strong> BundleContext bundleContext;
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">private</strong> Object service;
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">protected</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> setUp() <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">throws</strong> Exception {
+ reference = <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">new</strong> MockServiceReference();
+ bundleContext = <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">new</strong> MockBundleContext() {
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> ServiceReference getServiceReference(String clazz) {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">return</strong> reference;
+ }
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> ServiceReference[] getServiceReferences(String clazz, String filter)
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">throws</strong> InvalidSyntaxException {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">return</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">new</strong> ServiceReference[] { reference };
+ }
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> Object getService(ServiceReference ref) {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">if</strong> (reference == ref)
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">return</strong> service;
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">super</strong>.getService(ref);
+ }
+ };
+
+ ...
+}
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> testComponent() <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">throws</strong> Exception {
+ OsgiComponent comp = <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">new</strong> OsgiComponent(bundleContext);
+
+ assertSame(reference, comp.getReference());
+ assertSame(object, comp.getTarget());
+}</pre>
+
+ <p>As ending words, experiment with them and choose whatever style or library you feel most confortable with.
+ In our test suite we use the aforementioned mocks, EasyMock library and plenty of integration testing (see below).</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="testing:integration"></a>12.2.&nbsp;Integration Testing</h2></div></div></div>
+
+
+ <div class="sidebar"><div class="titlepage"><div><div><p class="title"><b>What about JUnit4/TestNG?</b></p></div></div></div>
+
+
+ <p>While JUnit4/TestNG overcome the class inheritance
+ problem that appears when building base JUnit classes, by decoupling
+ the runner from the test through annotations, Gemini Blueprint/Spring DM cannot use
+ them since it has to support Java 1.4.</p>
+ <p>However, it is planned for the future to provide an optional,
+ JVM 5-based testing extension to integrate the existing testing framework
+ with the aforementioned libraries.
+ </p>
+ </div>
+
+ <p>In a restricted environment such as OSGi, it's important to test the visibility and versioning of your classes,
+ the manifests or how your bundles interact with each other (just to name a few).</p>
+
+ <p> To ease integration testing, the Gemini Blueprint project provides a test class hierarchy
+ (based on <code class="classname">org.eclipse.gemini.blueprint.test.AbstractOsgiTests</code>) that
+ provides support for writing regular <code class="literal">JUnit</code> test cases that are then
+ automatically executed in an OSGi environment.</p>
+
+ <p>In general, the scenario supported by Gemini Blueprint/Spring DM testing framework is:</p>
+
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <p>start the OSGi framework (Equinox, Knopflerfish, Felix)</p>
+ </li><li class="listitem">
+ <p>install and start any specified bundles required for the
+ test</p>
+ </li><li class="listitem">
+ <p>package the test case itself into a <code class="literal">on the fly</code> bundle,
+ generate the manifest (if none is provided) and install it in the OSGi
+ framework</p>
+ </li><li class="listitem">
+ <p>execute the test case inside the OSGi framework</p>
+ </li><li class="listitem">
+ <p>shut down the framework</p>
+ </li><li class="listitem">
+ <p>passes the test results back to the originating test case
+ instance that is running outside of OSGi</p>
+ </li></ul></div>
+ <div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="images/admons/warning.png"></td><th align="left">Warning</th></tr><tr><td align="left" valign="top">The testing framework is aimed at running OSGi integration tests from a non-OSGi environment (like Ant/Maven/IDE). The testing framework
+ is NOT meant to be used as an OSGi bundle (nor will it work for that matter). In practice this means that the testing bundle should be separate from the bundle(s) it
+ tests (similar to unit testing, where tests are separate from the classes they test).</td></tr></table></div>
+
+ <p>By following this sequence it is trivial to write JUnit-based
+ integration tests for OSGi and have them integration into any environment
+ (IDE, build (ant, maven), etc.) that can work with JUnit.</p>
+
+ <p>The rest of this chapter details (with examples) the features
+ offered by Gemini Blueprint/Spring DM testing suite.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="testing:integration:simple-test"></a>12.2.1.&nbsp;Creating A Simple OSGi Integration Test</h3></div></div></div>
+
+
+ <p>
+ While the testing framework contains several classes that offer specific
+ features, it is most likely that your test cases will extend
+ <code class="classname">org.eclipse.gemini.blueprint.test.AbstractConfigurableBundleCreatorTests</code> (at least
+ this is what we use in practice).
+ </p>
+ <p>Let's extend this class and interact with the OSGi platform through
+ the <code class="literal">bundleContext</code> field:</p>
+
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">class</strong> SimpleOsgiTest <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">extends</strong> AbstractConfigurableBundleCreatorTests {
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> testOsgiPlatformStarts() <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">throws</strong> Exception {
+ System.out.println(bundleContext.getProperty(Constants.FRAMEWORK_VENDOR));
+ System.out.println(bundleContext.getProperty(Constants.FRAMEWORK_VERSION));
+ System.out.println(bundleContext.getProperty(Constants.FRAMEWORK_EXECUTIONENVIRONMENT));
+ }
+}</pre>
+
+ <p>Simply execute the test as you normally do with any JUnit test. On Equinox 3.2.x,
+ the output is similar to:</p>
+
+ <pre class="programlisting">Eclipse
+1.3.0
+OSGi/Minimum-1.0,OSGi/Minimum-1.1,JRE-1.1,J2SE-1.2,J2SE-1.3,J2SE-1.4}</pre>
+
+ <p class="remark"><em><span class="remark">It is likely that you will see different log statements made by the testing
+ framework during your own test execution, but these can be disabled as they only have an informative
+ value and do not affect the actual execution.</span></em></p>
+
+ <p>Note that you did not have to create any bundle, write any MANIFEST or
+ bother with imports or exports, let alone starting and shutting down the OSGi
+ platform. The testing framework takes care of these automatically
+ when the test is executed.</p>
+
+ <p>Let's do some quering and figure out what the environment in which the tests run is.
+ A simple way to do that is to query the <code class="interfacename">BundleContext</code>
+ for the installed bundles:</p>
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> testOsgiEnvironment() <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">throws</strong> Exception {
+ Bundle[] bundles = bundleContext.getBundles();
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">for</strong> (<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">int</strong> i = <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-number">0</span>; i &lt; bundles.length; i++) {
+ System.out.print(OsgiStringUtils.nullSafeName(bundles[i]));
+ System.out.print(<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>", "</em></strong>);
+ }
+ System.out.println();
+}</pre>
+ <p>The output should be similar to:</p>
+ <pre class="programlisting">OSGi System Bundle, ObjectWeb ASM, log4j.osgi, spring-test, spring-osgi-test, spring-osgi-core,
+ spring-aop, spring-osgi-io, slf4j-api,
+spring-osgi-extender, etc... TestBundle-testOsgiPlatformStarts-com.your.package.SimpleOsgiTest,
+</pre>
+
+ <p>As you can see, the testing framework installs the mandatory requirements required for running the
+ test such as the Spring, Gemini Blueprint/Spring DM, slf4j jars among others.</p>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="testing:integration:provisioning"></a>12.2.2.&nbsp;Installing Test Prerequisites</h3></div></div></div>
+
+
+ <div class="sidebar"><div class="titlepage"><div><div><p class="title"><b>OSGi-friendly libraries</b></p></div></div></div>
+
+ <p>To work in OSGi environments, jars need to declare in their
+ <code class="literal">MANIFEST.MF</code>, Export or Import packages; that is
+ declare what classes they need or offer to other bundles.
+ Most libraries are OSGi unaware and do not provide the proper manifest
+ entries which means they are unusable in an OSGi environment.</p>
+ <p>At the moment, there are several initiatives in the open source space
+ to provide the proper manifest - please see the FAQ for more information.
+ </p>
+ </div>
+
+ <p>Besides the Gemini Blueprint/Spring DM jars and the test itself is highly likely that you depend on
+ several libraries or your own code for the integration test.</p>
+
+ <p>Consider the following test that relies on Apache Commons
+ <a class="ulink" href="http://commons.apache.org/lang/" target="_top">Lang</a>:</p>
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">import</strong> org.apache.commons.lang.time.DateFormatUtils;
+ ...
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> testCommonsLangDateFormat() <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">throws</strong> Exception {
+ System.out.println(DateFormatUtils.format(<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">new</strong> Date(), <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"HH:mm:ssZZ"</em></strong>));
+ }
+}</pre>
+
+ <p>Running the test however yields an exception:</p>
+ <pre class="programlisting">java.lang.IllegalStateException: Unable to dynamically start generated unit test bundle
+ ...
+Caused by: org.osgi.framework.BundleException: The bundle could not be resolved.
+Reason: Missing Constraint: Import-Package: org.apache.commons.lang.time; version="0.0.0"
+ ...
+ ... 15 more
+ </pre>
+
+ <p>The test requires <code class="literal">org.apache.commons.lang.time</code> package but there is no bundle
+ that exports it. Let's fix this by installing a commons-lang bundle (make sure you use at least version 2.4
+ which adds the proper OSGi entries to the jar manifest).</p>
+
+ <p>One can specify the bundles that she wants
+ to be installed using <code class="literal">getTestBundlesNames</code> or <code class="literal">getTestBundles
+ </code> method. The first one returns an array of String that indicate the bundle
+ name, package and versioning through as a String while the latter returns an array of
+ <code class="literal">Resource</code>s that can be used directly for installing the bundles.
+ That is, use <code class="literal">getTestBundlesNames</code> when you rely on somebody else to locate
+ (the most common case) the bundles and <code class="literal">getTestBundles</code> when you want to
+ locate the bundles yourself.
+ </p>
+
+ <p>By default, the test suite performs a lookup for artifacts, similar to the one used by
+ <a class="ulink" href="http://maven.apache.org" target="_top">Maven2</a>, searching first the items as being relative to the
+ current project and then falling back to the local repository.
+ The locator expects the bundle String to be a comma separated values containing the artifact group, name, version and (optionally) type.
+
+ It's likely that in the future, various other locators will be available. One can plug in their own
+ locator through the <code class="interfacename">org.eclipse.gemini.blueprint.test.provisioning.ArtifactLocator</code> interface.
+ </p>
+
+ <p>Let's fix our integration test by installing the required bundle (and some extra osgi libraries):</p>
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">protected</strong> String[] getTestBundlesNames() {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">return</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">new</strong> String[] {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"javax.transaction, com.springsource.javax.transaction, 1.1.0"</em></strong>,
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"commons-lang, commons-lang, 2.4"</em></strong> };
+ };
+}</pre>
+
+ <p>Rerunning the test should show that these bundles are now installed in the OSGi platform.</p>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">The artifacts mentioned above have to exist in your local maven repository.</td></tr></table></div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="testing:integration:advanced-topics"></a>12.2.3.&nbsp;Advanced Testing Framework Topics</h3></div></div></div>
+
+
+ <p>The testing framework allows a lot of customization to be made. This chapter
+ details some of the existing hooks that you might want to know about. However, these
+ are advanced topics as they increase the complexity of your test infrastructure.
+ </p>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="testing:integration:customize-manifest"></a>12.2.3.1.&nbsp;Customizing The Test Manifest</h4></div></div></div>
+
+ <p>There are cases where the auto-generated test manifest does not suit the needs of the test.
+ For example the manifest requires some different headers or a certain package needs to be an optional import.</p>
+ <p>
+ For simple cases, one can work directly with the generated manifest - in the example below, the bundle class path
+ is being specified:
+ </p>
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">protected</strong> Manifest getManifest() {
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">// let the testing framework create/load the manifest</em>
+ Manifest mf = <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">super</strong>.getManifest();
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">// add Bundle-Classpath:</em>
+ mf.getMainAttributes().putValue(Constants.BUNDLE_CLASSPATH, <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>".,bundleclasspath/simple.jar"</em></strong>);
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">return</strong> mf;
+}</pre>
+
+ <p>
+ Another alternative is to provide your own manifest by overriding <code class="literal">getManifestLocations()</code>:</p>
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">protected</strong> String getManifestLocation() {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">return</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"classpath:com/xyz/abc/test/MyTestTest.MF"</em></strong>;
+}</pre>
+
+ <p>However each manifest needs the following entry:</p>
+ <span class="quote">&#8220;<span class="quote">Bundle-Activator: org.eclipse.gemini.blueprint.test.JUnitTestActivator</span>&#8221;</span>
+ <p>since without it, the testing infrastructure cannot function properly. Also, one needs to
+ import JUnit, Spring and Gemini Blueprint/Spring DM specific packages used by the base test suite:</p>
+ <pre class="programlisting">Import-Package: junit.framework,
+ org.osgi.framework,
+ org.apache.commons.logging,
+ org.springframework.util,
+ org.eclipse.gemini.blueprint.service,
+ org.eclipse.gemini.blueprint.util,
+ org.eclipse.gemini.blueprint.test,
+ org.springframework.context</pre>
+
+ <p>Failing to import a package used by the test class will cause the test to fail with a
+ <code class="literal">NoDefClassFoundError</code> error.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="testing:integration:specify-test-jar-content"></a>12.2.3.2.&nbsp;Customizing Test Bundle Content</h4></div></div></div>
+
+
+ <p>By default, for the on-the-fly bundle, the testing infrastructure uses all the classes, xml and properties files
+ found under <code class="literal">./target/test-classes</code> folder. This matches the project layout for maven which is used
+ (at the moment by Gemini Blueprint/Spring DM). These settings can be configured in two ways:</p>
+
+ <div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>programmatically by overriding <code class="classname">AbstractConfigurableBundleCreatorTests</code> <code class="literal">getXXX</code>
+ methods.</p>
+ </li><li class="listitem"><p>declaratively by creating a properties file having a similar name with the test case. For example, test
+ <code class="literal">com.xyz.MyTest</code> will have the properties file named <code class="literal">com/xyz/MyTest-bundle.properties</code>.
+ If found, the following properties will be read from the file:</p>
+
+ <div class="table"><a name="integration-test-jar-setting-file"></a><p class="title"><b>Table&nbsp;12.1.&nbsp;Default test jar content settings</b></p><div class="table-contents">
+
+ <table class="table" summary="Default test jar content settings" width="100%" border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Property Name</th><th>Default Value</th><th>Description</th></tr></thead><tbody><tr><td>root.dir</td><td><code class="literal">file:./target/test-classes</code></td><td>the root folder considered as the jar root</td></tr><tr><td>include.patterns</td><td><code class="literal">/**/*.class,/**/*.xml,/**/*.properties</code></td><td>Comma-separated string of Ant-style patterns</td></tr><tr><td>manifest</td><td>(empty)</td><td>manifest location given as a String. By default it's empty meaning the manifest
+ will be created by the test framework rather then being supplied by the user.</td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>This option is handy when creating specific tests that need to include certain resources (such as localization files
+ or images).</p>
+ </li></ol></div>
+
+ <p>Please consult <code class="classname">AbstractConfigurableBundleCreatorTests</code> and
+ <code class="classname">AbstractOnTheFlyBundleCreatorTests</code> tests for more customization hooks.
+ </p>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="testing:integration:understanding-manifest-creator"></a>12.2.3.3.&nbsp;Understanding The <code class="code">MANIFEST.MF</code> Generation</h4></div></div></div>
+
+
+ <p>A useful feature of the testing framework represents the automatic creation of the test manifest based on the test bundle content. The manifest
+ creator component uses byte-code analysis to determine the packages imported by the test classes so that it can generate the proper OSGi directives for them.
+ Since the generated bundle is used for running a test, the creator will use the following assumptions:</p>
+
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>No packages will be exported.</p> <p>The <span class="emphasis"><em>on-the-fly</em></span> bundle is used for running a test which
+ (usually) consumes OSGi packages for its execution. This behaviour can be changed by <a class="link" href="#testing:integration:customize-manifest" title="12.2.3.1.&nbsp;Customizing The Test Manifest">customizing</a>
+ the manifest.</p>
+ </li><li class="listitem"><p>Split packages (i.e. classes from the same package can come from different bundles) are not supported.</p>
+
+ <p>
+ This means that packages present in the test framework are considered complete and no <code class="code">Import-Package</code> entry will be generated for them.
+ To avoid this problem, consider using sub-packages or moving the classes inside one bundle. Note that split packages are discouraged due to the
+ issues associated with them (see the OSGi Core spec, Chapter 3.13 - Required Bundles).</p>
+ </li><li class="listitem">
+ <p>The test bundle contains only test classes.</p>
+ <p>The byte-code parser will look only at the test classes hierarchy. Any other class included in the bundle, will not be considered so no imports
+ will be generated for it. To change the default behaviour, override <code class="methodname">createManifestOnlyFromTestClass</code> to return
+ <code class="literal">false</code>:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">protected</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">boolean</strong> createManifestOnlyFromTestClass() {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">return</strong> false;
+}</pre>
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">The time required to generate the manifest might increase depending on the number and size of classes in the bundle.</td></tr></table></div>
+
+ <p>
+ Additionally consider customizing the manifest yourself or attaching the extra code as inner classes to the test class (so it gets parsed automatically).</p>
+ </li></ul></div>
+
+ <p>
+ The reason behind <span class="emphasis"><em>the lack of such features</em></span> is the byte-code parser is aimed to be simple and fast at creating test manifests -
+ it is not meant as a general-purpose tool for creating OSGi artifacts.
+ </p>
+ </div>
+
+
+ </div>
+
+
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="testing:integration:appContext"></a>12.2.4.&nbsp;Creating An OSGi Application Context</h3></div></div></div>
+
+
+ <p>Gemini Blueprint/Spring DM testing suite builds on top of Spring testing classes. To create an application context
+ (OSGi specific), one should just override <code class="literal">getConfigLocations[]</code> method and indicate
+ the location of the application context configuration. At runtime, an OSGi application context will be created
+ and cached for the lifetime of the test case.</p>
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">protected</strong> String[] getConfigLocations() {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">return</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">new</strong> String[] { <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"/com/xyz/abc/test/MyTestContext.xml"</em></strong> };
+}</pre>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="testing:integration:specify-platform"></a>12.2.5.&nbsp;Specifying The OSGi Platform To Use</h3></div></div></div>
+
+
+ <p>The testing framework supports out of the box, three OSGi 4.0 implementations namely:
+ Equinox, Knopflerfish and Felix. To be used, these should be in the test classpath. By default,
+ the testing framework will try to use Equinox platform. This can be configured in several ways:</p>
+
+ <div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>programmatically through <code class="literal">getPlatformName()</code> method</p>.
+ <p>Override the aforementioned method and indicate the fully qualified name of
+ the <code class="interfacename">Platform</code> interface implementation. Users can use the <code class="classname">Platforms</code>
+ class to specify one of the supported platforms:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">protected</strong> String getPlatformName() {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">return</strong> Platforms.FELIX;
+}</pre>
+
+ </li><li class="listitem"><p>declaratively
+ through <code class="literal">org.eclipse.gemini.blueprint.test.framework</code> system property.</p>
+ <p>If this property is set,
+ the testing framework will use its value as a fully qualified name of a Platform implementation.
+ It that fails, it will fall back to Equinox after logging a warning message.
+ This option is useful for building tools (such as ant or maven) since it indicates a certain
+ target environment without changing and test code.</p>
+
+ </li></ol></div>
+ </div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="testing:integration:specify-test-wait-time"></a>12.2.6.&nbsp;Waiting For The Test Dependencies</h3></div></div></div>
+
+
+ <p>A built-in feature of the testing framework is the ability to wait until all dependencies are deployed before
+ starting the test execution. Since the OSGi platforms are concurrent by nature, installing a bundle doesn't mean that
+ all its services are running. By running a test before its dependency services are fully initialized can cause sporadic
+ errors that pollute the test results. By default, the testing framework inspects all bundles installed by the user and,
+ if they are Spring-powered bundles, waits until they are fully started (that is their application context is published
+ as an OSGi service). This behaviour can be disabled by overriding <code class="literal">shouldWaitForSpringBundlesContextCreation</code>
+ method. Consult <code class="classname">AbstractSynchronizedOsgiTests</code> for more details.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="testing:integration:performance"></a>12.2.7.&nbsp;Testing Framework Performance</h3></div></div></div>
+
+
+ <p>Considering all the functionality offered by the testing framework, one might wonder if this doesn't become a
+ performance bottleneck. First, it's worth noting that all the work done automatically by the testing infrastructure
+ has to be done anyway (such as creating the manifest or creating a bundle for the test or installing the bundles).
+ Doing it manually simply does not work as it's too error prone and time consuming.
+ In fact, the current infrastructure started as way to do efficient, automatic testing without worrying
+ about deployment problems and redundancy.</p>
+ <p>As for the numbers, the current infrastructure has been used internally for the last half a year - our integration tests
+ (around 120) run in about 3:30 minutes on a laptop. Most of this time is spent on starting and stopping the OSGi platform: the "testing
+ framework" takes around 10% (as shown in our profiling so far).
+ For example, the manifest generation has proved to take less then 0.5 seconds in general, while the jar creation around 1
+ second.</p>
+ <p>However, we are working on making it even faster and smarter so that less configuration options are needed and
+ the contextual information available in your tests is used as much as possible. If you have any ideas or suggestion,
+ feel free to use our issue tracker or/and forum.
+ </p>
+ </div>
+
+ <p>Hopefully this chapter showed how Gemini Blueprint/Spring DM testing infrastructure can simplify OSGi integration testing and
+ how it can be customized. Consider consulting the javadocs for more information.
+ </p>
+ </div>
+
+</div>
+ </div>
+ <div class="part"><div class="titlepage"><div><div><h1 class="title"><a name="resources"></a>Part&nbsp;III.&nbsp;Other Resources</h1></div></div></div>
+
+ <div class="partintro"><div></div>
+ <p>
+ In addition to this reference documentation, there are a number of
+ other resources that may help you learn how to use OSGi and Eclipse Gemini Blueprint.
+ These additional, third-party resources are enumerated in this
+ section.
+ </p>
+ </div>
+ <div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="links"></a>Chapter&nbsp;13.&nbsp;Useful Links</h2></div></div></div>
+
+
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><span class="emphasis"><em>Eclipse Gemini Blueprint Home Page</em></span> - <a class="ulink" href="http://www.eclipse.org/gemini/blueprint/" target="_top">here</a></li><li class="listitem"><span class="emphasis"><em>SpringSource OSGi blog</em></span> - <a class="ulink" href="http://blog.springsource.com/category/osgi/" target="_top">here</a></li><li class="listitem"><span class="emphasis"><em>Spring DM Demos</em></span> - <a class="ulink" href="http://www.springframework.org/osgi/demos" target="_top">here</a></li><li class="listitem"><span class="emphasis"><em>Getting Started with OSGi</em></span> - by Neil Bartlett
+ <a class="ulink" href="http://neilbartlett.name/blog/osgi-articles/" target="_top">here</a> and
+ <a class="ulink" href="http://www.eclipse.org/resources/?author=Neil%20Bartlett" target="_top">here</a>.
+ </li><li class="listitem"><span class="emphasis"><em>Equinox Documents</em></span> -
+ <a class="ulink" href="http://www.eclipse.org/equinox/documents/" target="_top">here</a>
+ </li><li class="listitem"><span class="emphasis"><em>Felix-related presentations</em></span> - various
+ <a class="ulink" href="http://felix.apache.org/site/presentations.html" target="_top">presentations</a>
+ hosted by Apache Felix project.
+ </li><li class="listitem"><span class="emphasis"><em>Launching Gemini Blueprint using pax-runner</em></span> -
+ <a class="ulink" href="http://wiki.ops4j.org/confluence/display/ops4j/Pax+Runner+-+Screencast+-+Spring+OSGi" target="_top">
+ screencast</a>
+ </li><li class="listitem"><span class="emphasis"><em>OSGi Alliance Blog</em></span> - <a class="ulink" href="http://www.osgi.org/blog/" target="_top">here</a></li></ul></div>
+</div>
+
+ </div>
+ <div class="part"><div class="titlepage"><div><div><h1 class="title"><a name="appendixes"></a>Part&nbsp;IV.&nbsp;Appendixes</h1></div></div></div>
+
+ <div class="partintro"><div><div><div><h1 class="title"><a name="d21e3113"></a>Document structure</h1></div></div></div>
+
+
+ <p>
+ Various appendixes outside the reference documentation.
+ </p>
+
+ <p><a class="xref" href="#appendix-security" title="Appendix&nbsp;A.&nbsp;Security Integration">Appendix&nbsp;A, <i>Security Integration</i></a> provides information on how to run Gemini Blueprint
+ in an OSGi environment with a <code class="classname">SecurityManager</code> enabled
+ (Java 2 Security activated).
+ </p>
+
+ <p><a class="xref" href="#appendix-pde-integration" title="Appendix&nbsp;B.&nbsp;Eclipse Plug-in Development integration">Appendix&nbsp;B, <i>Eclipse Plug-in Development integration</i></a> describes how to integrate Gemini Blueprint
+ with Eclipse Plug-in Development Environment.</p>
+
+ <p><a class="xref" href="#">???</a> describes the Gemini Blueprint Maven 2 archetype
+ usage.</p>
+
+ <p><a class="xref" href="#appendix-tips" title="Appendix&nbsp;C.&nbsp;Useful OSGi tips">Appendix&nbsp;C, <i>Useful OSGi tips</i></a> provides some useful OSGi tips, especially
+ meaningful when used along with Gemini Blueprint.</p>
+
+ <p><a class="xref" href="#appendix-roadmap" title="Appendix&nbsp;D.&nbsp;Roadmap">Appendix&nbsp;D, <i>Roadmap</i></a> describes some features that are included in
+ the 1.0 distribution but are still considered early-access. The
+ externals of these features may change in future releases. This appendix
+ also discusses other planned features for which no implementation yet
+ exists.</p>
+
+ <p><a class="xref" href="#appendix-osgi-repo" title="Appendix&nbsp;E.&nbsp;Gemini Blueprint OSGi Repository">Appendix&nbsp;E, <i>Gemini Blueprint OSGi Repository</i></a> describes the repository used by Gemini Blueprint
+ for its osgi artifacts.</p>
+
+ <p><a class="xref" href="#appendix-schema" title="Appendix&nbsp;F.&nbsp;Gemini Blueprint Schema">Appendix&nbsp;F, <i>Gemini Blueprint Schema</i></a> defines the schemas provided by Spring Dynamic
+ Modules.</p>
+ </div>
+ <div class="appendix"><div class="titlepage"><div><div><h2 class="title"><a name="appendix-security"></a>Appendix&nbsp;A.&nbsp;Security Integration</h2></div></div></div>
+
+
+ <p>Since Spring DM 1.2.0, Gemini Blueprint integrates with Java 2 <a class="link" href="#">security</a>.
+ Namely Gemini Blueprint uses <a class="link" href="#">privileged blocks</a> for executing security
+ sensitive operations using its own permissions.
+ </p>
+
+ <p>Being a framework, Gemini Blueprint needs to introspect bundles to determine their content and configuration. In general, it is recommended to grant
+ <code class="classname">java.security.AllPermission</code> to Gemini Blueprint bundles. For those that would like to restrict the properties, below you can find a list
+ of permissions that are needed for Gemini Blueprint to work properly. However, we <span class="emphasis"><em>strongly</em></span> recommend to test whether the permissions are needed or
+ not for your environment since the minimum number depends heavily on what parts of the framework are used.
+ </p>
+
+ <div class="table"><a name="spring-dm-permission-table"></a><p class="title"><b>Table&nbsp;A.1.&nbsp;Gemini Blueprint Permission Table</b></p><div class="table-contents">
+
+
+ <table class="table" summary="Gemini Blueprint Permission Table" width="100%" border="1"><colgroup><col class="c1"><col class="c2"><col class="c3"><col class="c4"></colgroup><thead><tr><th>Permission</th><th>Target</th><th>Action</th><th>Usage</th></tr></thead><tbody><tr><td><code class="classname">java.io.FilePermission</code></td><td><span class="emphasis"><em>depends</em></span>, &lt;&lt;ALL FILES&gt;&gt; recommended</td><td>read/write</td><td>Required by the logging system and web extender for installing the wars and JSP taglibs</td></tr><tr><td><code class="classname">java.lang.RuntimePermission</code></td><td>*</td><td>accessDeclaredMembers</td><td>Used in some cases for reflection (such as accessing the <code class="interfacename">BundleContext</code> from a
+ given <code class="interfacename">Bundle</code> (on R4.0 platforms).</td></tr><tr><td><code class="classname">java.lang.reflect.ReflectPermission</code></td><td>*</td><td>suppressAccessChecks</td><td>Used for accessing (through reflection) non-public methods or fields internally.</td></tr><tr><td><code class="classname">java.util.PropertyPermission</code></td><td>*</td><td>read,write</td><td>In use by the testing framework mainy. Useful for reading the environment, including OSGi properties.</td></tr><tr><td><code class="classname">org.osgi.framework.AdminPermission</code></td><td>*</td><td>class, execute, listener, metadata, resolve, resource</td><td>Used by the extender to listen read the content of started bundles.</td></tr><tr><td><code class="classname">org.osgi.framework.BundlePermission</code></td><td>*</td><td>HOST</td><td>Useful when attaching a custom configuration (as fragment) to the extender/web extender.</td></tr><tr><td><code class="classname">org.osgi.framework.PackagePermission</code></td><td>*</td><td>EXPORT, IMPORT</td><td>Basic permission used for importing and exporting the Gemini Blueprint bundles content.</td></tr><tr><td><code class="classname">org.osgi.framework.ServicePermission</code></td><td>*</td><td>get,register</td><td>Used for publishing and lookup of Gemini Blueprint internal services (such as the Spring namespace handlers/resolvers).</td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>Note that as of Gemini Blueprint 1.0, the extender will use the target bundle permissions for all actions executed on its behalf. That is, loading of
+ classes, publishing the services, importing packages or the method invocations are executed using the bundle credentials just as if the user bundle
+ would </p>
+
+ <p>As a general recommendation, for security sensible environments, to determine the minimum number of permissions start with a basic set of bundles
+ and no permissions. This way, on each run, one can find out what permissions are needed and by whom and tweak the system accordingly.</p>
+</div>
+ <div class="appendix"><div class="titlepage"><div><div><h2 class="title"><a name="appendix-pde-integration"></a>Appendix&nbsp;B.&nbsp;Eclipse Plug-in Development integration</h2></div></div></div>
+
+
+ <p>Eclipse <a class="ulink" href="http://www.eclipse.org/pde/" target="_top">PDE</a> <span class="quote">&#8220;<span class="quote">provides comprehensive OSGi tooling, which makes it
+ an ideal environment for component programming, not just Eclipse plug-in development</span>&#8221;</span>.
+ In fact, Eclipse IDE is built on top of OSGi and uses at its core the Equinox OSGi implementation. Moreover, all the Eclipse
+ plug-ins are OSGi bundles. This makes Eclipse with PDE a very attractive tool for creating OSGi bundles.
+ While Gemini Blueprint artifacts can be integrated as <span class="emphasis"><em>normal</em></span> libraries, through
+ <a class="ulink" href="http://www.springide.org" target="_top">Spring IDE</a>, Gemini Blueprint can be installed as a
+ <a class="ulink" href="http://help.eclipse.org/stable/index.jsp?topic=/org.eclipse.pde.doc.user/guide/tools/preference_pages/target_platform.htm" target="_top">
+ target platform</a> ready to be used with PDE.
+ </p>
+
+ <div class="procedure"><p>The following steps illustrate how to install Spring IDE extension for OSGi and how to use it in your project. Please see
+ <a class="ulink" href="http://springide.org/project/wiki/SpringideInstall" target="_top">Spring IDE installation page</a> for information on its requirement
+ and install process.</p><ol class="procedure" type="1"><li class="step">
+ <p class="title"><b>Set Up Nightly Update Site</b></p>
+ <p>At the moment, the OSGi extension is available only on Spring-IDE nightly builds update site. Add it to the Eclipse configuration by
+ opening the software update menu:
+ </p>
+ <p>
+ </p><div class="mediaobject" align="left"><img src="images/pde/find-install.png" align="left"></div><p>
+
+ </p><div class="mediaobject" align="central"><img src="images/pde/springide-site.png" align="central"></div><p>
+
+ </p>
+
+ <p>and create a new update site pointing to <code class="literal">http://www.springide.org/updatesite_nightly</code></p>
+ </li><li class="step">
+ <p class="title"><b>Select Spring IDE OSGi extension</b></p>
+ <p>After using the nightly update site and performing the update, Eclipse will show the search results. Unfold the <span class="emphasis"><em>Extension</em></span> menu and select <code class="literal">Spring IDE OSGi Extension</code>:</p>
+ <p>
+ </p><div class="mediaobject" align="center"><img src="images/pde/spring-osgi-plugin.png" align="middle" alt="Select Spring IDE OSGI extension"></div><p>
+ </p>
+
+ <p>and proceed with the instalation.</p>
+ </li><li class="step">
+ <p class="title"><b>Select Gemini Blueprint Target Platform</b></p>
+ <p>Once the plug-in has been installed, Gemini Blueprint can be selected as a PDE target platform. Select Window/Preferences/Plug-in Development and then
+ Target Platform.</p>
+ <p>
+ </p><div class="mediaobject" align="center"><img src="images/pde/target-select.png" align="middle" alt="Select Gemini Blueprint target platform"></div><p>
+ </p>
+
+ <p>Select the Gemini Blueprint version that you desire from the Pre-defined Target (1) drop box and press Load Target (2). Eclipse will load the target and all bundles defined
+ by it - this includes Gemini Blueprint bundles and all of its dependencies (SLF4J is used for logging). The configuration can be customised appropriately by removing
+ and adding bundles.</p>
+
+ <p>In its current form, the plug-in offers two predefined targets - one for the stable released versions and one for the SNAPSHOT/nightly Gemini Blueprint jars. The latter
+ does not contain any jars as it is expected for the user to download them manually. Simply locate the path where the plug-ins should be located (3), enter that folder
+ and do a </p>
+ <pre class="programlisting">mvn install</pre>
+ <p>The latest Gemini Blueprint SNAPSHOT will be downloaded along with all of its dependencies.
+ Simply click on the reload button (4) and Eclipse will pick up the bundles. </p>
+ </li><li class="step">
+ <p class="title"><b>Select PDE Perspective</b></p>
+ <p>Once the installation is completed just select the PDE perspective:</p>
+ <p>
+ <span class="inlinemediaobject"><img src="images/pde/select-pde-1.png" align="left"></span>
+ <span class="inlinemediaobject"><img src="images/pde/select-pde-2.png" align="central"></span>
+
+ </p>
+
+ <p>and the Gemini Blueprint and its dependencies should be available in the plug-ins view:</p>
+ <p>
+ <span class="inlinemediaobject"><img src="images/pde/select-plugins-view.png" align="left"></span>
+
+ <span class="inlinemediaobject"><img src="images/pde/show-plugins.png" align="central"></span>
+ </p>
+ </li></ol></div>
+</div>
+ <div class="appendix"><div class="titlepage"><div><div><h2 class="title"><a name="appendix-tips"></a>Appendix&nbsp;C.&nbsp;Useful OSGi tips</h2></div></div></div>
+
+
+
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="appendix-tips:fragments"></a>C.1.&nbsp;OSGi Fragments</h2></div></div></div>
+
+ <div class="sidebar"><div class="titlepage"><div><div><p class="title"><b>Check the target OSGi platform fragment support</b></p></div></div></div>
+
+ <p>Before using fragments, make sure the target OSGi environment supports them (and to what degree). Out of the OSGi platforms on
+ which Gemini Blueprint is tested upon, at the time of this writing, Apache Felix does not support fragments (it simply ignores them).</p>
+ </div>
+
+ <p>Part of the OSGi R4 release, <span class="emphasis"><em>fragments</em></span> are a very useful and powerful feature. A fragment is
+ <span class="quote">&#8220;<span class="quote">a bundle that is <span class="emphasis"><em>attached</em></span> to a <span class="emphasis"><em>host bundle</em></span></span>&#8221;</span>, adding content to the target bundle.
+ A fragment cannot have its own class loader nor a bundle activator and cannot override the information already present in the host.
+ In short, through fragments, bundles can be extender with resources, classes and even manifest entries. To quote the spec again,
+ a <span class="quote">&#8220;<span class="quote">...key use case for fragments is providing translation files for different locales. This allows the translation files to be
+ treated and shipped independently from the main application bundle.</span>&#8221;</span></p>
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">For a full description on fragments, please see the OSGi specification, section 3.14.</td></tr></table></div>
+
+ <p>In Gemini Blueprint, fragments are useful for configuring various components such as the extenders. To do that, simply bundle the resources as you
+ normally would and add an extra entry to the bundle manifest:</p>
+
+ <pre class="programlisting">Fragment-Host: &lt;host bundle symbolic name&gt;</pre>
+
+ <p>This line indicates that the containing bundle is a fragment and that it should be attached to the host specified by a symbolic name. The fragment
+ and host bundle symbolic name should be different. For example, to attach a fragment (with extra configuration) the Gemini Blueprint extender, one could use
+ the following manifest:</p>
+
+ <div class="programlistingco"><pre class="programlisting">Manifest-Version: 1.0 <span class="co" id="appendix-tips:fragments.example.mv"><img src="images/callouts/1.png" alt="(1)"></span>
+Bundle-ManifestVersion: 2 <span class="co" id="appendix-tips:fragments.example.bmv"><img src="images/callouts/2.png" alt="(2)"></span>
+Fragment-Host: org.eclipse.gemini.blueprint.extender <span class="co" id="appendix-tips:fragments.example.fh"><img src="images/callouts/3.png" alt="(3)"></span>
+Bundle-SymbolicName: org.mydomain.project.fragment <span class="co" id="appendix-tips:fragments.example.bsn"><img src="images/callouts/4.png" alt="(4)"></span>
+Bundle-Name: my-fragment <span class="co" id="appendix-tips:fragments.example.bn"><img src="images/callouts/5.png" alt="(5)"></span>
+Bundle-Description: Fragment attached to Gemini Blueprint extender <span class="co" id="appendix-tips:fragments.example.bd"><img src="images/callouts/6.png" alt="(6)"></span>
+</pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p>Manifest version.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>OSGi bundle version. A value of <code class="literal">1</code> (which is also the default) indicates an OSGi Release 3 bundle so it's best to
+ specify <code class="literal">2</code> to indicate an OSGi Release 4 bundle.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/3.png" alt="3" border="0"></span></p></td><td valign="top" align="left">
+ <p>The symbolic name of the bundle to which this fragment should be attached to. In this case, the value
+ <code class="literal">org.eclipse.gemini.blueprint.extender</code> points to the <code class="literal">spring-osgi-extender.jar</code>.
+ <code class="literal">Fragment-Host</code> is the <span class="emphasis"><em>key</em></span> entry which tells the OSGi platform that the containing bundle is a of a
+ special kind - it's a fragment.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/4.png" alt="4" border="0"></span></p></td><td valign="top" align="left">
+ <p>The fragment symbolic name.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/5.png" alt="5" border="0"></span></p></td><td valign="top" align="left">
+ <p>The bundle name - an optional yet useful header.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/6.png" alt="6" border="0"></span></p></td><td valign="top" align="left">
+ <p>The bundle description - just like the name, this header is useful for humans not for the OSGi platform itself. However, it is
+ recommended that you define it to help identify the bundle purpose.</p>
+ </td></tr></table></div></div>
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">The Manifest entries order does not matter, but they case sensitive.</td></tr></table></div>
+
+ <p>When multiple bundles with the same symbolic names are present, one can add the bundle version to make sure the proper wiring is done:</p>
+
+ <pre class="programlisting">Fragment-Host: org.eclipse.gemini.blueprint.extender;bundle-version=1.1.0</pre>
+
+ <p>The default value for <code class="literal">bundle-version</code> (when it's not specified) is <code class="literal">[0.0.0,&#8734;)</code></p>
+
+ </div>
+
+</div>
+ <div class="appendix"><div class="titlepage"><div><div><h2 class="title"><a name="appendix-roadmap"></a>Appendix&nbsp;D.&nbsp;Roadmap</h2></div></div></div>
+
+
+ <p>
+ This appendix documents features on the Gemini Blueprint
+ roadmap. The design of these features specified here is subject
+ to change. As a most up to date source, please see
+ <a class="ulink" href="https://bugs.eclipse.org/bugs/buglist.cgi?product=Gemini.Blueprint" target="_top">
+ our
+ </a>
+ issue tracker.
+ </p>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d21e3346"></a>D.1.&nbsp;Start Level Integration</h2></div></div></div>
+
+
+ <p>A future release of Gemini Blueprint may offer the following
+ additional guarantee with respect to application context creation and
+ start levels:</p>
+
+ <p>Application context creation happens asynchronously. However, the
+ extender bundle does guarantee that the creation of all application
+ contexts for bundles at start level <code class="literal">n</code> will be
+ complete before the creation of any application context at start level
+ <code class="literal">m</code>, where <code class="literal">m &gt; n</code>. Care must
+ therefore be taken not to introduce any mandatory dependencies on
+ services exported by bundles with higher start levels or a deadlock will
+ be introduced.</p>
+
+ <p>In a similar vein, when shutting down the extender bundle,
+ application contexts at start level <code class="literal">m</code> will be shut
+ down before application contexts at start level <code class="literal">n</code>,
+ where <code class="literal">m &gt; n</code>.</p>
+ </div>
+
+
+</div>
+ <div class="appendix"><div class="titlepage"><div><div><h2 class="title"><a name="appendix-osgi-repo"></a>Appendix&nbsp;E.&nbsp;Gemini Blueprint OSGi Repository</h2></div></div></div>
+
+
+ <p>At the moment, most libraries are not released as OSGi bundles which means they cannot be used inside the OSGi space unless they
+ are embedded in other bundles. Though there are <a class="ulink" href="http://www.aqute.biz/Code/Bnd" target="_top">tools</a> that make the bundling
+ process easy, it is desirable to have the artifacts prepacked so they can be used immediately for development.</p>
+
+ <p>SpringSource <a class="ulink" href="http://www.springsource.com/repository/" target="_top">Enterprise Bundle Repository</a> (or SpringSource Repository) addresses this problem by
+ providing
+ <span class="quote">&#8220;<span class="quote">a collection of open source libraries commonly used for developing enterprise Java applications with the Spring Framework</span>&#8221;</span> (taken
+ from the Repository <a class="ulink" href="http://www.springsource.com/repository/app/faq" target="_top">FAQ</a>). With the availability of the Bundle Repository,
+ the Gemini Blueprint old repository (see below) has been deprecated and it is being used until migrating completely to SpringSource Repository. It is highly recommended
+ that users migrate as well to SpringSource Repository as it provides significantly more libraries and it is intended to be a user-facing infrastructure component.
+ </p>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="appendix-osgi-repo:old-repo"></a>E.1.&nbsp;Gemini Blueprint Temporary OSGi Repository</h2></div></div></div>
+
+
+ <p>Unfortunately, not all Gemini Blueprint dependencies are available in SpringSource Repository and thus Gemini Blueprint still needs to maintain some of its own
+ dedicated Maven <a class="ulink" href="http://maven.apache.org/guides/introduction/introduction-to-repositories.html" target="_top">repository</a> available
+ at <code class="literal">http://maven.springframework.org/osgi</code>.
+
+ </p><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="images/admons/warning.png"></td><th align="left">Warning</th></tr><tr><td align="left" valign="top">The repository is <span class="emphasis"><em>provided as-is</em></span> without any kind of support. The repository structure/content
+ can (and will) change until it becomes stable. Before using Gemini Blueprint repository make sure the needed artifact are not available
+ in SpringSource Repository. These being said, we hope you find it useful and we'd like to <a class="ulink" href="http://jira.springframework.org/browse/OSGI" target="_top">know</a>
+ if there are improvement that can be made to it.</td></tr></table></div><p>
+ </p>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="appendix-osgi-repo:conventions"></a>E.1.1.&nbsp;Repository Conventions</h3></div></div></div>
+
+
+ <p>Currently, all the artifacts published in the repository are marked as <code class="literal">SNAPSHOT</code>s meaning that, in time, their
+ content can change. This allows clients to download possible manifest updates made to the libraries. We foresee that, as the library usage
+ increases, several popular items will have the <code class="literal">SNAPSHOT</code> marker remove.
+ Additionally, to differentiate the <span class="emphasis"><em>OSGi</em></span>-enabled artifacts from the original ones, all libraries are placed under
+ <code class="literal">org.eclipse.gemini.blueprint</code> group and their names contains a <code class="literal">.osgi</code> suffix.</p>
+
+ <p>So for example, an OSGi version of <code class="literal">mx4j-3.0.2</code> jar is available in the Gemini Blueprint OSGi repository under at:
+ <code class="literal">org.eclipse.gemini.blueprint/mx4j.osgi/3.0.2-SNAPSHOT/mx4j.osgi-3.0.2-SNAPSHOT.jar</code></p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="appendix-osgi-repo:browsing"></a>E.1.2.&nbsp;Browsing The Repository Content</h3></div></div></div>
+
+
+ <p>The repository is currently hosted at Amazon <a class="ulink" href="http://aws.amazon.com/s3" target="_top">S3</a>. To browse the repository structure,
+ use a S3 compatible browser (such as <a class="ulink" href="http://s3browse.com/explore/maven.springframework.org/osgi/org.eclipse.gemini.blueprint/" target="_top">this</a> one)
+ since a vanilla web browse will not be suitable.
+ </p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="appendix-osgi-repo:maven"></a>E.1.3.&nbsp;Using The Repository With Maven</h3></div></div></div>
+
+
+ <p>The use the repository, simply add it ot the <code class="literal">repositories</code> group; since the repository
+ contains <code class="literal">SNAPSHOT</code> artifacts, make sure to mark it accordingly:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;repositories&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;repository&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;id&gt;</strong>spring-osgified-artifacts<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/id&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;snapshots&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;enabled&gt;</strong>true<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/enabled&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/snapshots&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;name&gt;</strong>Springframework Maven OSGified Artifacts Repository<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/name&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;url&gt;</strong>http://maven.springframework.org/osgi<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/url&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/repository&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/repositories&gt;</strong></pre>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="appendix-osgi-repo:ant"></a>E.1.4.&nbsp;Using The Repository With Ant/Ivy</h3></div></div></div>
+
+
+ <p>When using <a class="ulink" href="http://ant.apache.org/" target="_top">Ant</a> consider using the excellent <a class="ulink" href="http://ant.apache.org/ivy/" target="_top">Ivy</a>
+ subproject for retrieving the OSGi dependencies from the Gemini Blueprint repository as Ivy can work with a Maven-style repository. Please see the
+ Ivy <a class="ulink" href="http://ant.apache.org/ivy/history/latest-milestone/tutorial/start.html" target="_top">tutorial</a> for more information.</p>
+ </div>
+
+ </div>
+</div>
+ <div class="appendix"><div class="titlepage"><div><div><h2 class="title"><a name="appendix-schema"></a>Appendix&nbsp;F.&nbsp;Gemini Blueprint Schema</h2></div></div></div>
+
+
+ <p>Gemini Blueprint Core Schema</p>
+ <pre class="programlisting"><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-directive">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;</span>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:schema</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:xsd</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.w3.org/2001/XMLSchema"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:beans</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:tool</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/tool"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">targetNamespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">elementFormDefault</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"qualified"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">attributeFormDefault</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"unqualified"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">version</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1.0.0"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:import</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">namespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.w3.org/XML/1998/namespace"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:import</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">namespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:import</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">namespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/tool"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Namespace support for the core services provided by Eclipse Gemini Blueprint.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attributeGroup</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"defaults"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>Defaults for Gemini Blueprint declarations.<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- attributes --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"default-timeout"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:nonNegativeInteger"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"30000"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Default timeout (in milliseconds) for all reference (service importers) elements that do not explicitly specify one.
+ Default value is 300000 ms (5 minutes).
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"default-availablility"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TavailabilityOptions"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"mandatory"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Default availability for all OSGi references (singular or collections) elements that do not explicitly specify one.
+ Default value is 'mandatory' which means that a backing service must exist while 'optional' indicates that it is
+ acceptable to be no backing service.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"default-cardinality"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TdefaultCardinalityOptions"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1..X"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ As of Eclipse Gemini Blueprint, 'default-cardinality' has been replaced by 'default-availability' attribute.
+
+ Default cardinality (of the relationship to the backing service(s)) for all OSGi references (singular or collections)
+ elements that do not explicitly specify one.
+ Default value is '1..X' (resolved to '1..1' for osgi:reference and '1..N' for osgi:list/set) which means that a backing
+ service must exist (this is a mandatory service reference). A value of '0..X' (resolved to '0..1' for osgi:reference
+ and '0..N' for osgi:list/set) indicates that it is acceptable to be no backing service (an optional service reference).
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attributeGroup&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:simpleType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TavailabilityOptions"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:restriction</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:NMTOKEN"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"mandatory"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Mandatory service reference - a backing service must exist.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:enumeration&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Optional service reference - A backing service can be missing.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:enumeration&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:restriction&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:simpleType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:simpleType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TdefaultCardinalityOptions"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:restriction</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:NMTOKEN"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1..X"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ A backing service must exist (this is a mandatory service reference).
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:enumeration&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0..X"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ A backing service can be missing (this is an optional service reference).
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:enumeration&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:restriction&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:simpleType&gt;</strong>
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- reference --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"reference"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TsingleReference"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines a reference to a service obtained via the OSGi service registry.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"Treference"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:extension</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beans:identifiedType"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:sequence</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"interfaces"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beans:listOrSetType"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ The set of service interfaces that the services obtained via the registry are required to support.
+ By convention, the interface attribute is a Java interface type, but may also be a (non-final)
+ class type.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"reference-listener"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"Tlistener"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"unbounded"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines a listener that will receive notification when a service backing this reference is
+ bound or unbound.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"listener"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"Tlistener"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"unbounded"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines a listener that will receive notification when a service backing this reference is
+ bound or unbound. Deprecated since Gemini Blueprint, in favour of 'reference-listener'.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:sequence&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"interface"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:token"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ The service interface that the services obtained via the registry are required to support.
+ By convention this is a Java interface type, but may also be a (non-final) class type.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:expected-type</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.Class"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"filter"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines an OSGi filter expression that is used to constrain the set of matching services
+ in the service registry.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"depends-on"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Used to refer to the name of another bean that this bean depends on. Ensures that the
+ service registry look-up does not happen until after the dependent bean has been created
+ (most commonly used to refer to a bundle bean).
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"bean-name"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Convenient shortcut for specifying a filter expression that matches on the bean-name property
+ that is automatically advertised for beans published using the service element.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"context-class-loader"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TreferenceClassLoaderOptions"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"client"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines how the context class loader is managed when invoking operations on a service
+ backing this service reference. The default value is 'client' which means that the context
+ class loader has visibility of the resources on this bundle's classpath. Alternate
+ options are 'service-provider' which means that the context class loader has visibility of
+ resources on the bundle classpath of the bundle that exported the service, and 'unmanaged'
+ which does not do any management of the context class loader.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:extension&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:simpleType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TreferenceClassLoaderOptions"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:restriction</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:NMTOKEN"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"client"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service-provider"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"unmanaged"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:restriction&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:simpleType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"Tlistener"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines a listener that will be notified when the service backing the enclosing service reference element is bound or
+ unbound. Use either the 'ref' attribute or a nested bean declaration for the listener bean.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:sequence</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- nested bean declaration --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:any</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">namespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"##other"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">processContents</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"skip"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:sequence&gt;</strong>
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- shortcut for bean references --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"ref"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Refers by name to the bean that will receive bind and unbind events
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"bind-method"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:token"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ The name of the method to be invoked when a backing service is bound.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"unbind-method"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:token"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ The name of the method to be invoked when a backing service is unbound.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexType&gt;</strong>
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- single reference --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TsingleReference"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:extension</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"Treference"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"availability"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TavailabilityOptions"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines the required availability of the backing service. If not specified,
+ the default-availability attribute will apply. 'mandatory' means that a backing service
+ must exist, 'optional' indicates that it is acceptable to have no backing service.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"cardinality"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TsingleReferenceCardinality"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ As of Gemini Blueprint, 'cardinality' has been replaced by the 'availability' attribute.
+
+ Defines the required cardinality of the relationship to the backing service. If not specified,
+ the default-cardinality attribute will apply. A value of '1..1' means that a backing service
+ must exist (this is a mandatory service reference). A value of '0..1' indicates that it is
+ acceptable to be no backing service (an optional service reference).
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"timeout"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:nonNegativeInteger"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ For a 'reference' element, the amount of time (in milliseconds) to wait for a backing service to be
+ available when an operation is invoked. If not specified, the default-timeout attribute will apply.
+ See also the default-timeout attribute of the osgi element.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"sticky"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:boolean"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"true"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines whether the backing service should be changed if a 'better' OSGi service becomes
+ available. If 'true', the proxy will rebind only if the backing service is no longer available.
+ If 'false', the rebind will occur every time a 'better' candidate appears. A better service is
+ defined by having either a higher ranking or the same ranking and a lower service id.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:extension&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:simpleType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TsingleReferenceCardinality"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:restriction</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:NMTOKEN"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1..1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0..1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:restriction&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:simpleType&gt;</strong>
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- reference collections (set, list) --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"list"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TreferenceCollection"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">source</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java:org.eclipse.gemini.blueprint.service.importer.support.OsgiServiceCollectionProxyFactoryBean"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines a bean of type 'List' that contains all of the services matching the given criteria.
+ The list members are managed dynamically as matching backing services come and go.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:exports</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.util.List"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"set"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TreferenceCollection"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">source</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java:org.eclipse.gemini.blueprint.service.importer.support.OsgiServiceCollectionProxyFactoryBean"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines a bean of type 'Set' that contains all of the services matching the given criteria.
+ The set members are managed dynamically as matching backing services come and go.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:exports</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.util.Set"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TreferenceCollection"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:extension</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"Treference"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:sequence</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"comparator"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"Tcomparator"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">source</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java:java.util.Comparator"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Used to define an inline bean of type Comparator that will be used to sort the matching services.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:expected-type</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.util.Comparator"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:sequence&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"comparator-ref"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Used to refer to a named bean implementing the Comparator interface that will be used to
+ sort the matching services.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"availability"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TavailabilityOptions"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines the required availability of the backing service. If not specified,
+ the default-availability attribute will apply. 'mandatory' means that a backing service
+ must exist, 'optional' indicates that it is acceptable to have no backing service.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"cardinality"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TcollectionCardinality"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ As of Gemini Blueprint, 'cardinality' has been replaced by the 'availability' attribute.
+
+ Defines the required cardinality of the relationship to the backing services. If not specified,
+ the default-cardinality attribute will apply. A value of '1..N' means that at least one backing
+ service must exist (this is a mandatory service reference. A value of '0..N' indicates that it
+ is acceptable for there to be no backing service (an optional service reference).
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"greedy-proxying"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:boolean"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"false"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Indicates whether the proxies created for the imported OSGi services will be generated using
+ just the classes specified (false) or all the classes exported by the service and visible to
+ the importing bundle (true). The default value is false.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"member-type"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TmemberType"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service-object"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Indicates the type of object that will be placed within the reference collection.
+ 'service-object' indicates the collection contains service proxies for imported services.
+ 'service-reference' indicates the collection contains ServiceReference objects matching the
+ target service type.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:extension&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"Tcomparator"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">source</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java:java.util.Comparator"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Used to define an inline bean of type Comparator that will be used to sort the matching services.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:exports</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.util.Comparator"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:choice&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"natural"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TnaturalOrdering"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:sequence</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- nested bean declaration --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:any</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">namespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"##other"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">processContents</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"skip"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:sequence&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:choice&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TnaturalOrdering"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"basis"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TorderingBasis"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"required"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:simpleType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TorderingBasis"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:restriction</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:NMTOKEN"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service-reference"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:restriction&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:simpleType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:simpleType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TmemberType"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:restriction</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:NMTOKEN"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service-object"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service-reference"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:restriction&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:simpleType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:simpleType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TcollectionCardinality"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:restriction</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:NMTOKEN"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1..N"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0..N"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:restriction&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:simpleType&gt;</strong>
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- service --&gt;</em>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"Tservice"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TbaseService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:extension</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beans:identifiedType"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"interface"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:token"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines the interface to advertise for this service in the service registry.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:expected-type</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.Class"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"depends-on"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Used to ensure that the service is not exported to the registry before the named bean
+ has been created.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"context-class-loader"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TserviceClassLoaderOptions"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"unmanaged"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines how the context class loader will be managed when an operation is invoked on the
+ exported service. The default value is 'unmanaged' which means that no management of
+ the context class loader is attempted. A value of 'service-provider' guarantees that
+ the context class loader will have visibility of all the resources on the class path of
+ bundle exporting the service.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"auto-export"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TautoExportModes"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"disabled"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Enables Spring to automatically manage the set of service interfaces advertised for the
+ service. By default this facility is disabled. A value of 'interfaces' advertises all
+ of the Java interfaces supported by the exported service. A value of 'class-hierarchy'
+ advertises all the Java classes in the hierarchy of the exported service. A value of
+ 'all-classes' advertises all Java interfaces and classes.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:extension&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"Tservice"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">source</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java:org.eclipse.gemini.blueprint.service.exporter.support.OsgiServiceFactoryBean"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Exports the reference bean as a service in the OSGi service registry. The bean defined by this element is of
+ type org.osgi.framework.ServiceRegistration.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:exports</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.osgi.framework.ServiceRegistration"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:extension</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TbaseService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:sequence</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"interfaces"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beans:listOrSetType"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ The set of service interfaces to advertise in the service registry.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"registration-listener"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TserviceRegistrationListener"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"unbounded"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines a listener that will be notified when this service is registered or unregistered in the
+ OSGi service registry.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service-properties"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TserviceProperties"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines the service properties.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- nested bean declaration --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:any</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">namespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"##other"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">processContents</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"skip"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:sequence&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"ref"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Refers to the named bean to be exported as a service in the service registry.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"ranking"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:int"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Specifies the service ranking to be used when advertising the service.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"cache-target"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:boolean"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"false"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Specifies the caching of the exported target object. When enabled, the exporter will ignore the scope of the
+ target bean and use only the first resolved instance for registration. When disabled (default), the scope of
+ the target bean is considered and each service request, will be directed to the container.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:extension&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TserviceProperties"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Services properties used by the service exporter.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:exports</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.util.Map"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:extension</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beans:mapType"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- shortcut for bean references --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"ref"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Refers by name to the bean that will receive register and unregister events.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:extension&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TserviceRegistrationListener"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines a listener that will be notified when the bean is registered or unregistered in the OSGi Service Registry.
+ Use either the 'ref' attribute or a nested bean declaration for the listener bean.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:sequence</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- nested bean declaration --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:any</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">namespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"##other"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">processContents</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"skip"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:sequence&gt;</strong>
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- shortcut for bean references --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"ref"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Refers by name to the bean that will receive register and unregister events.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"registration-method"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:token"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ The name of the method to be invoked when the service is registered.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"unregistration-method"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:token"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ The name of the method to be invoked when the service is unregistered.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:simpleType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TserviceClassLoaderOptions"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:restriction</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:NMTOKEN"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service-provider"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"unmanaged"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:restriction&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:simpleType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:simpleType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TautoExportModes"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:restriction</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:NMTOKEN"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"disabled"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"interfaces"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"class-hierarchy"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"all-classes"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:restriction&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:simpleType&gt;</strong>
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- bundle --&gt;</em>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"bundle"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"Tbundle"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">source</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java:org.eclipse.gemini.blueprint.bundle.BundleFactoryBean"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines a bean representing a Bundle object. May be used to drive bean lifecycle transitions.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:exports</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.osgi.framework.Bundle"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"Tbundle"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:extension</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beans:identifiedType"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- optional nested bean declaration --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:sequence</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:any</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">namespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"##other"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">processContents</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"lax"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ OSGi bundle to work with.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:expected-type</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.osgi.framework.Bundle"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:any&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:sequence&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"symbolic-name"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ The bundle symbolic name of the bundle object. Normally used when interacting with an already
+ installed bundle.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"depends-on"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Indicates that this bundle object should not be created until the named bean has been created.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"location"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Location used to install, update or/and identify a bundle.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"action"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TbundleAction"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Lifecyle action to drive on the bundle. 'start' starts the bundle, installing if necessary.
+ 'stop' stops the bundle if it is currently ACTIVE. 'install' installs the bundle if it is
+ currently uninstalled. 'uninstall' stops the bundle if needed, and then uninstalls it.
+ 'update' installs the bundle if needed, and then invokes the Bundle.update() operation.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"destroy-action"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TbundleAction"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Lifecyle action to drive on the bundle. 'start' starts the bundle, installing if necessary.
+ 'stop' stops the bundle if it is currently ACTIVE. 'install' installs the bundle if it is
+ currently uninstalled. 'uninstall' stops the bundle if needed, and then uninstalls it.
+ 'update' installs the bundle if needed, and then invokes the Bundle.update() operation.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"start-level"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:int"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Start level to set for the bundle.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:extension&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:simpleType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TbundleAction"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:restriction</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:NMTOKEN"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"start"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"stop"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"install"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"uninstall"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"update"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:restriction&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:simpleType&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:schema&gt;</strong>
+ </pre>
+
+ <p>Gemini Blueprint Compendium Schema</p>
+ <pre class="programlisting"><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-directive">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;</span>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:schema</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:xsd</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.w3.org/2001/XMLSchema"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:beans</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:osgi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:tool</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/tool"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">targetNamespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">elementFormDefault</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"qualified"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">attributeFormDefault</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"unqualified"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">version</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1.0.0"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:import</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">namespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.w3.org/XML/1998/namespace"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:import</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">namespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:import</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">namespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/tool"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:import</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">namespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">schemaLocation</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint/gemini-blueprint.xsd"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Namespace support for the compendium services provided by Eclipse Gemini Blueprint.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- internal reusable type --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attributeGroup</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"updateAttributes"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"autowire-on-update"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:boolean"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"false"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Whether or not the container should autowire the target bean everytime an update occurs.
+ When 'true' is specified, the container will perform autowire (by name) the bean instance with the
+ newly set properties. In case 'update-method' attribute is used as well, the autowiring process will
+ take precedence.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"update-method"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ The update-method to invoke whenever an update occurs in the configuration data. Allows the target
+ bean to process the update information itself. In case 'autowire-on-update' is also used, the 'update-method'
+ will be invoked after the autowiring takes place.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attributeGroup&gt;</strong>
+
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"managed-properties"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines a bean based on the given class name and configuration, with properties autowired-by-name
+ based on the configuration stored under the given persistent id.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexType&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"persistent-id"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"required"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ The persistent-id under which the configuration for this bean is stored in
+ the Configuration Admin service.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attributeGroup</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"updateAttributes"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexType&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- managed-service-factory --&gt;</em>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"managed-service-factory"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines a collection of beans based on the given class name, with properties autowired-by-name based
+ on the configuration sets stored under the given factory persistent id.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexType&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:extension</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"osgi:TbaseService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:sequence&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"interfaces"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beans:listOrSetType"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ The set of service interfaces to advertise in the service registry.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"registration-listener"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"osgi:TserviceRegistrationListener"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"unbounded"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines a listener that will be notified when this service is registered or unregistered in the
+ OSGi service registry.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service-properties"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"osgi:TserviceProperties"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- the bean definition template --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:any</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">namespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"##other"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">processContents</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"skip"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines the service definition template.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:any&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:sequence&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"factory-pid"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"required"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ The persistent-id under which the configuration for this bean is stored in
+ the Configuration Admin service.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attributeGroup</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"updateAttributes"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:extension&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexType&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- cm-properties --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"cm-properties"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">source</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java:org.eclipse.gemini.blueprint.compendium.cm.ConfigAdminPropertiesFactoryBean"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Exposes the properties found in the Configuration Admin service under the given persistent id.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:exports</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.util.Properties"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexType&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:extension</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beans:propsType"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"id"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:ID"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"persistent-id"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"required"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ The persistent id under which the properties reside.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"local-override"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:boolean"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"false"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Specifies whether local properties override properties from the Configuration Admin service.
+ Default is "false": properties from Configuration Admin service override local defaults.
+ If set to "true", local properties will override properties from Configuration Admin service.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"dynamic"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:boolean"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"false"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Specifies whether changes to the Configuration Admin service will be reflected by the properties.
+ Default is "false": once resolved from the Configuration Admin, the properties will not change.
+ If set to "true", the properties object content will update accordingly (after initialization) to the changes in the Configuration Admin.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"init-lazy"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:boolean"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"true"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Specifies whether the properties reflecting the Configuration Admin service entry will be initialized lazy or not.
+ Default is "true": meaning the properties will be initialized just before being requested (from the factory) for the first time. This is
+ the common case as it allows the most recent entry to be used.
+ If set to "false", the properties object will be initialized at startup, along with the bean factory.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"init-timeout"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:nonNegativeInteger"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Specifies the amount of time (in milliseconds) the bean factory will wait for the Configuration Admin entry to
+ be initialized (return a non-null value). If the entry is not null at startup, no waiting will be performed.
+ Similar to the other timeout options, a value of '0' means no waiting. By default, no waiting (0) is performed.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:extension&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexType&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:schema&gt;</strong>
+ </pre>
+
+</div>
+ <div class="appendix"><div class="titlepage"><div><div><h2 class="title"><a name="appendix-ack"></a>Appendix&nbsp;G.&nbsp;Acknowledgments</h2></div></div></div>
+
+
+ <p>Gemini Blueprint would like to thank (in alphabetical order) to :
+ Bill Gallagher, Olivier Gruber, Richard S. Hall, BJ Hargrave, Peter Kriens,
+ Martin Lippert, Jeff McAffer, Glyn Normington, Gerd Wuetherich
+ for their contributions in the development of this documentation.</p>
+</div>
+ </div>
+</div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html-single/issues.html b/documentation/reference/3.0.0.M01/html-single/issues.html
new file mode 100644
index 0000000..ac03f65
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html-single/issues.html
@@ -0,0 +1,42 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Eclipse Gemini Blueprint</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="book"><div class="titlepage"><div><div><h1 class="title"><a name="d5e1"></a>Eclipse Gemini Blueprint</h1></div><div><h2 class="subtitle">Known Issues</h2></div><div><div class="authorgroup">
+ <div class="author"><h3 class="author"><span class="firstname">Costin</span> <span class="surname">Leau</span></h3><div class="affiliation">SpringSource, division of VMware</div></div>
+ </div></div><div><p class="releaseinfo">3.0.0.M01</p></div><div><p class="copyright">Copyright &copy; 2006 -, 2011 VMware Inc., Oracle Inc.</p></div><div><div class="legalnotice"><a name="d5e11"></a>
+ <p>Documentation made available under the terms of the Eclipse Public License v1.0
+ and Apache License v2.0 which accompanies this distribution.
+ The Eclipse Public License is available at <a class="ulink" href="http://www.eclipse.org/legal/epl-v10.html" target="_top">http://www.eclipse.org/legal/epl-v10.html</a> and
+ the Apache License v2.0 is available at <a class="ulink" href="http://www.opensource.org/licenses/apache2.0.php" target="_top">http://www.opensource.org/licenses/apache2.0.php</a>.
+ You may elect to redistribute this code under either of these licenses.</p>
+ </div></div></div><hr></div><div class="toc"><dl class="toc"><dt><span class="preface"><a href="#preface">Preface</a></span></dt><dt><span class="chapter"><a href="#known-issues">1. Known Issues</a></span></dt><dd><dl><dt><span class="section"><a href="#OSGI-237">1.1. Publishing prototypes as OSGi services</a></span></dt></dl></dd></dl></div>
+
+
+
+
+ <div class="preface"><div class="titlepage"><div><div><h1 class="title"><a name="preface"></a>Preface</h1></div></div></div>
+
+ <p>
+ This document describes known issues (and possible work-arounds). Each issue mentions the section of the reference
+ documentation that explain the behaviour along with the associated
+ <a class="ulink" href="https://bugs.eclipse.org/bugs/buglist.cgiproduct=Gemini.Blueprint" target="_top">Bugzilla</a> entry which
+ provides an estimate on when it will be solved.
+ As a rule, the next Gemini Blueprint release aims to solve most, if not all of them.
+ </p>
+ </div>
+
+ <div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="known-issues"></a>Chapter&nbsp;1.&nbsp;Known Issues</h1></div></div></div>
+
+
+ <p>As a side note, it worth pointing out that the issues below are not really bugs but rather improvements.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="OSGI-237"></a>1.1.&nbsp;Publishing prototypes as OSGi services</h2></div></div></div>
+
+ <p>Due to the way OSGi platform deals with OSGi services (it caches the instance and returns it every time), prototypes are not fully supported.
+ Spring DM publishes a proxy that on each call, delegates back to the target application context for retrieving the instance. While with other beans
+ this works, in case of prototypes, this results in one-instance-per-invocation which is incorrect. Additional functionality needs to be added
+ to fully support prototypes even though, as pointed out, this involves a knowledge between Client/Server regarding the publication contract.</p>
+ <p>See <a class="ulink" href="http://jira.springframework.org/browse/OSGI-237" target="_top">OSGI-237</a></p>
+ </div>
+
+ </div>
+</div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/app-deploy.html b/documentation/reference/3.0.0.M01/html/app-deploy.html
new file mode 100644
index 0000000..704db36
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/app-deploy.html
@@ -0,0 +1,515 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Chapter&nbsp;8.&nbsp;Packaging and Deploying Spring-based OSGi applications</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="reference.html" title="Part&nbsp;II.&nbsp;Reference Documentation"><link rel="prev" href="bnd-app-ctx.html" title="Chapter&nbsp;7.&nbsp;Bundles and Application Contexts"><link rel="next" href="service-registry.html" title="Chapter&nbsp;9.&nbsp;The Service Registry"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="app-deploy"></a>Chapter&nbsp;8.&nbsp;Packaging and Deploying Spring-based OSGi applications</h2></div></div></div>
+
+
+ <p>A traditional Spring application uses either a single application
+ context, or a parent context containing service layer, data layer, and
+ domain objects with a child context containing web layer components. The
+ application context may well be formed by aggregating the contents of
+ multiple configuration files.</p>
+
+ <p>When deploying an application to OSGi the more natural structure is
+ to package the application as a set of peer bundles (application contexts)
+ interacting via the OSGi service registry. Independent subsystems should
+ be packaged as independent bundles or sets of bundles (vertical
+ partitioning). A subsystem may be package in a single bundle, or divided
+ into several bundles partitioned by layer (horizontal partitioning). A
+ straightforward web application may for example be divided into four
+ modules (bundles): a web bundle, service layer bundle, data layer bundle,
+ and domain model bundle. Such an application would look like this:</p>
+
+ <div class="mediaobject" align="center"><img src="images/spring-osgi-model.png" align="middle" alt="Bundles and Application Contexts"></div>
+
+ <p>In this example the data layer bundle yields a data layer
+ application context that contains a number of internal components (beans).
+ Two of those beans are made publicly available outside of the application
+ context by publishing them as services in the OSGi service
+ registry.</p>
+
+ <p>The service layer bundle yields a service layer application context
+ that contains a number of internal components (beans). Some of those
+ components depend on data layer services, and import those services from
+ the OSGi service registry. Two of the service layer components are made
+ externally available as services in the OSGi service registry.</p>
+
+ <p>The web component bundle yields a web application context that
+ contains a number of internal components (beans). Some of those components
+ depend on application services, and import those services from the OSGi
+ service registry. Since the domain model bundle contributes only domain
+ model types, but does not need to create any components of its own, it has
+ no associated application context.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="app-deploy:headers"></a>8.1.&nbsp;Bundle Format And Manifest Headers</h2></div></div></div>
+
+
+ <p>Each application module should be packaged as an OSGi bundle. A
+ bundle is essentially a jar file with a
+ <code class="literal">META-INF/MANIFEST.MF</code> file containing a series of
+ headers recognized by the OSGi Service Platform. See the OSGi Service
+ Platform Core Specification section 3.2 for details. Some OSGi
+ implementations may support exploded jar files, but the format remains
+ the same.</p>
+
+ <p>The Spring extender recognizes a bundle as "Spring-powered" and
+ will create an associated application context when the bundle is started
+ and one or both of the following conditions is true:</p>
+
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <p>The bundle path contains a folder
+ <code class="literal">META-INF/spring</code> with one or more files in that
+ folder with a '.xml' extension.</p>
+ </li><li class="listitem">
+ <p><code class="literal">META-INF/MANIFEST.MF</code> contains a manifest
+ header <code class="literal">Spring-Context</code>.</p>
+ </li></ul></div>
+
+ <p>In addition, if the optional
+ <code class="literal">SpringExtender-Version</code> header is declared in the
+ bundle manifest, then the extender will only recognize bundles where the
+ specified version constraints are satisfied by the version of the
+ extender bundle (<code class="literal">Bundle-Version</code>). The value of the
+ <code class="literal">SpringExtender-Version</code> header must follow the syntax
+ for a version range as specified in section 3.2.5 of the OSGi Service
+ Platform Core Specification.</p>
+
+ <p>In the absence of the <code class="literal">Spring-Context</code> header the
+ extender expects every ".xml" file in the
+ <code class="literal">META-INF/spring</code> folder to be a valid Spring
+ configuration file, and all directives (see below) take on their default
+ values.</p>
+
+ <div class="tip" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Tip"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="images/admons/tip.png"></td><th align="left"><a name="app-deploy:headers:xml:tip"></a>Tip</th></tr><tr><td align="left" valign="top"><p>An application context is constructed from this set of files. A
+ suggested practice is to split the application context configuration
+ into at least two files, named by convention
+ <span class="emphasis"><em>modulename</em></span>-context.xml and
+ <span class="emphasis"><em>modulename</em></span>-osgi-context.xml. The
+ <span class="emphasis"><em>modulename</em></span>-context.xml file contains regular bean
+ definitions independent of any knowledge of OSGi. The
+ <span class="emphasis"><em>modulename</em></span>-osgi-context.xml file contains the bean
+ definitions for importing and exporting OSGi services. It may (but is
+ not required to) use the Gemini Blueprint OSGi schema as the
+ top-level namespace instead of the Spring 'beans' namespace.</p>
+ </td></tr></table></div>
+
+ <p>The <code class="literal">Spring-Context</code> manifest header may be used
+ to specify an alternate set of configuration files. The resource paths
+ are treated as relative resource paths and resolve to entries defined in
+ the bundle and the set of attached <a class="link" href="appendix-tips.html#appendix-tips:fragments" title="C.1.&nbsp;OSGi Fragments">fragments</a>.
+ When the
+ <code class="literal">Spring-Context</code> header defines at least one
+ configuration file location, any files in
+ <code class="literal">META-INF/spring</code> are ignored unless directly
+ referenced from the <code class="literal">Spring-Context</code> header.</p>
+
+ <p>The syntax for the <code class="literal">Spring-Context</code> header value
+ is:</p>
+
+ <pre class="programlisting">Spring-Context-Value ::= context ( ',' context ) *
+context ::= path ( ';' path ) * (';' directive) *
+</pre>
+
+ <p>This syntax is consistent with the OSGi Service Platform common
+ header syntax defined in section 3.2.3 of the OSGi Service Platform Core
+ Specification.</p>
+
+ <p>For example, the manifest entry:</p>
+
+ <pre class="programlisting">Spring-Context: config/account-data-context.xml, config/account-security-context.xml
+</pre>
+
+ <p>will cause an application context to be instantiated using the
+ configuration found in the files
+ <code class="literal">account-data-context.xml</code> and
+ <code class="literal">account-security-context.xml</code> in the bundle jar
+ file.</p>
+
+ <p>A number of directives are available for use with the
+ <code class="literal">Spring-Context</code> header. These directives are:</p>
+
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <p><span class="emphasis"><em>create-asynchronously</em></span> (false|true):
+ controls whether the application context is created asynchronously
+ (the default), or synchronously.</p>
+
+ <p>For example:</p>
+
+ <pre class="programlisting">Spring-Context: *;create-asynchronously:=false
+</pre>
+
+ <p>Creates an application context synchronously, using all of the
+ "*.xml" files contained in the <code class="literal">META-INF/spring</code>
+ folder.</p>
+
+ <pre class="programlisting">Spring-Context: config/account-data-context.xml;create-asynchrously:=false
+</pre>
+
+ <p>Creates an application context synchronously using the
+ <code class="literal">config/account-data-context.xml</code> configuration file.
+ Care must be taken when specifying synchronous context creation as the
+ application context will be created on the OSGi event thread, blocking
+ further event delivery until the context is fully initialized. If an
+ error occurs during the synchronous creation of the application context
+ then a <code class="literal">FrameworkEvent.ERROR</code> event is raised. The bundle will still
+ proceed to the <code class="literal">ACTIVE</code> state.</p>
+ </li><li class="listitem">
+ <p><span class="emphasis"><em>wait-for-dependencies</em></span> (true|false):
+ controls whether or not application context creation should wait for
+ any mandatory service dependencies to be satisfied before proceeding
+ (the default), or proceed immediately without waiting if
+ dependencies are not satisfied upon startup.</p>
+
+ <p>For example:</p>
+
+ <pre class="programlisting">Spring-Context: config/osgi-*.xml;wait-for-dependencies:=false
+</pre>
+
+ <p>Creates an application context using all the files matching
+ "osgi-*.xml" in the config directory. Context creation will begin
+ immediately even if dependencies are not satisfied. This essentially
+ means that mandatory service references are treated as though they were
+ optional - clients will be injected with a service object that may not
+ be backed by an actual service in the registry initially. See
+ <a class="xref" href="service-registry.html#service-registry:refs:singular:dynamics" title="9.2.3.9.&nbsp;reference And OSGi Service Dynamics">Section&nbsp;9.2.3.9, &#8220;<code class="literal">reference</code> And OSGi Service Dynamics&#8221;</a> for more details.</p>
+ </li><li class="listitem">
+ <p><span class="emphasis"><em>timeout</em></span> (300): the time to wait (in
+ seconds) for mandatory dependencies to be satisfied before giving up
+ and failing application context creation. This setting is ignored if
+ <code class="literal">wait-for-dependencies:=false</code> is specified. The
+ default is 5 minutes (300 seconds).</p>
+
+ <p>For example:</p>
+
+ <pre class="programlisting">Spring-Context: *;timeout:=60
+</pre>
+ <p>Creates an application context that waits up to 1 minute (60 seconds)
+ for its mandatory dependencies to appear.
+ </p>
+ </li><li class="listitem">
+ <p><span class="emphasis"><em>publish-context</em></span> (true|false): controls
+ whether or not the application context object itself should be
+ published in the OSGi service registry. The default is to publish
+ the context.</p>
+
+ <p>For example:</p>
+
+ <pre class="programlisting">Spring-Context: *;publish-context:=false
+</pre>
+
+ <p>If there is no <code class="literal">Spring-Context</code> manifest entry, or no value is
+ specified for a given directive in that entry, then the directive takes
+ on its default value.</p>
+ </li></ul></div>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="app-deploy:headers:blueprint"></a>8.2.&nbsp;Blueprint Manifest Configuration Comparison</h2></div></div></div>
+
+
+ <p>The table below summarizes the differences between the manifest configuration options in Eclipse Gemini Blueprint/Spring DM and Blueprint Container:</p>
+
+ <div class="table"><a name="sdm-vs-blueprint-config-attr"></a><p class="title"><b>Table&nbsp;8.1.&nbsp;Configuration Setting Differences</b></p><div class="table-contents">
+
+ <table class="table" summary="Configuration Setting Differences" width="100%" border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Option</th><th>Gemini Blueprint/Spring DM</th><th>Blueprint</th></tr></thead><tbody><tr><td>Default Configuration Location</td><td><code class="literal">META-INF/spring</code></td><td><code class="literal">OSGI-INF/blueprint</code></td></tr><tr><td>Custom Locations Header</td><td><code class="literal">Spring-Context</code></td><td><code class="literal">Bundle-Blueprint</code></td></tr><tr><td>Attribute Header</td><td><code class="literal">Spring-Context</code></td><td><code class="literal">Bundle-SymbolicName</code></td></tr><tr><td>Asynchronous Creation Attribute</td><td><code class="literal">create-asynchronously</code></td><td><code class="literal">-</code></td></tr><tr><td>Startup Mandatory Dependencies Attribute</td><td><code class="literal">wait-for-dependencies</code></td><td><code class="literal">blueprint.graceperiod</code></td></tr><tr><td>Startup Mandatory Timeout Attribute</td><td><code class="literal">timeout</code> (in s)</td><td><code class="literal">blueprint.timeout</code> (in ms)</td></tr><tr><td>Container API Service Publication Attribute</td><td><code class="literal">publish-context</code></td><td><code class="literal">-</code></td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>The manifests below are equivalent in terms of settings:</p>
+
+ <div class="programlistingco"><pre class="programlisting">Bundle-SymbolicName: org.example.account.bundle
+Spring-Context: config/account-data-context.xml, config/osgi-*.xml; <span class="co" id="blueprint:vs:mf:attr:sdm"><img src="images/callouts/1.png" alt="(1)"></span>
+ wait-for-dependencies:=true;
+ timeout:=10 <span class="co" id="blueprint:vs:mf:timeout:s"><img src="images/callouts/2.png" alt="(2)"></span>
+</pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p>All Gemini Blueprint/Spring DM specific attributes are grouped under <code class="literal">Spring-Context</code> header.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>Timeout specified in <span class="emphasis"><em>seconds</em></span>.</p>
+ </td></tr></table></div></div>
+
+ <div class="programlistingco"><pre class="programlisting">Bundle-SymbolicName: org.example.account.bundle; <span class="co" id="blueprint:vs:mf:attr:bp.1"><img src="images/callouts/1.png" alt="(1)"></span>
+ blueprint.graceperiod:=true;
+ blueprint.timeout:=10000 <span class="co" id="blueprint:vs:mf:timeout:ms"><img src="images/callouts/2.png" alt="(2)"></span>
+Blueprint-Bundle: config/account-data-context.xml, config/osgi-*.xml <span class="co" id="blueprint:vs:mf:attr:bp.2"><img src="images/callouts/1.png" alt="(1)"></span>
+</pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p>Blueprint settings are spread between <code class="literal">Bundle-SymbolicName</code> and <code class="literal">Blueprint-Bundle</code>.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>Timeout specified in <span class="emphasis"><em>milliseconds</em></span>.</p>
+ </td></tr></table></div></div>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="app-deploy:extender-configuration"></a>8.3.&nbsp;Extender Configuration Options</h2></div></div></div>
+
+
+ <p>Aside from bundle-specific configurations, Gemini Blueprint/Spring DM allows the core extender generic behaviour be configured. This is useful when
+ embedding Spring DM inside a managed environment or when a bundles-wide functionality is desired. To allow for extensible configuration,
+ the extender relies on OSGi <a class="link" href="appendix-tips.html#appendix-tips:fragments" title="C.1.&nbsp;OSGi Fragments">fragments</a> to override its defaults. The extender looks for all XML files
+ under <code class="literal">META-INF/spring/extender</code> folder in its bundle space and assembled them into an application context
+ (of type <code class="classname">OsgiBundleXmlApplicationContext</code>)
+ that is used internally as its configuration. To override a default setting of the extender, look up the appropriate bean
+ name from the table below, define it in a suitable manner and then attach it as a <a class="link" href="appendix-tips.html#appendix-tips:fragments" title="C.1.&nbsp;OSGi Fragments">fragment</a> to the
+ <code class="literal">spring-osgi-extender.jar</code>, using:</p>
+ <pre class="programlisting">Fragment-Host: org.eclipse.gemini.blueprint.extender</pre>
+
+ <p>The following beans are currently recognized by the extender:</p>
+
+ <div class="table"><a name="extender-configuration-options"></a><p class="title"><b>Table&nbsp;8.2.&nbsp;Extender Configuration Options</b></p><div class="table-contents">
+
+ <table class="table" summary="Extender Configuration Options" width="100%" border="1"><colgroup><col><col><col><col></colgroup><thead><tr><th>Bean Name</th><th>Type</th><th>Role</th><th>Default Behaviour/Value</th></tr></thead><tbody><tr><td><code class="literal">taskExecutor</code></td><td><code class="interfacename">TaskExecutor</code>
+ <a href="#ftn.d21e935" class="footnote" name="d21e935"><sup class="footnote">[a]</sup></a></td><td>Creates and runs the Spring application contexts associated with each bundle. The task executor is responsible for managing its own pool
+ of threads used by the application contexts</td><td><code class="classname">ThreadPoolTaskExecutor</code> with a maximum number of threads equal to the number of available processors is used by default.</td></tr><tr><td><code class="literal">shutdownTaskExecutor</code></td><td><code class="interfacename">TaskExecutor</code>
+ <a href="#ftn.d21e945" class="footnote" name="d21e945"><sup class="footnote">[b]</sup></a></td><td>Destroys managed Spring application contexts associated with each bundle. The task executor is responsible for managing its own pool
+ of threads used by the application contexts</td><td><code class="classname">ThreadPoolTaskExecutor</code> with a single thread is used by default which means all application context will be destroyed in a serialized manner (which is
+ desired). Since the shutdown order normally matters, it is recommended to keep the default implementation or, for managed environments, to use a thread-pool
+ that executes only one task at a time (so that contexts are stopped in the given order).</td></tr><tr><td><code class="literal">extenderProperties</code></td><td><code class="classname">java.util.Properties</code></td><td>Defines simple properties such as the maximum time for contexts to gracefully close</td><td>See the <a class="link" href="app-deploy.html#extender-configuration-options-properties" title="Table&nbsp;8.3.&nbsp;Available extenderProperties">defaults</a> below</td></tr><tr><td><code class="literal">osgiApplicationEventMulticaster</code></td><td><code class="interfacename">ApplicationEventMulticaster</code>
+ <a href="#ftn.d21e963" class="footnote" name="d21e963"><sup class="footnote">[c]</sup></a>
+ </td><td><code class="literal"><a class="ulink" href="https://docs.spring.io/spring/docs/4.2.x/javadoc-api/org/springframework/context/event/ApplicationEventMulticaster.html" target="_top">
+ ApplicationEventMultiCaster</a></code> used for propagating Gemini Blueprint/Spring DM <a class="link" href="app-deploy.html#app-deploy:extender-configuration:events" title="8.3.1.&nbsp;Listening To Extender Events">events</a>
+ to third parties.
+ </td><td>An instance of <code class="classname"><a class="ulink" href="https://docs.spring.io/spring/docs/4.2.x/javadoc-api/org/springframework/context/event/SimpleApplicationEventMulticaster.html" target="_top">
+ SimpleApplicationEventMulticaster</a></code> is used.
+ See <code class="classname">AbstractApplicationContext</code>
+ <a class="ulink" href="https://docs.spring.io/spring/docs/4.2.x/javadoc-api/org/springframework/context/support/AbstractApplicationContext.html" target="_top">javadoc</a>
+ for more information regarding available beans in an application context.</td></tr><tr><td><a name="extender-configuration-options:acc"></a><code class="literal">applicationContextCreator</code></td><td><code class="interfacename">OsgiApplicationContextCreator</code>
+ <a href="#ftn.extender-configuration-options:extender.pkg" class="footnote" name="extender-configuration-options:extender.pkg"><sup class="footnote">[d]</sup></a>
+ </td><td>Allows customization of the application context created by the extender. This includes changing the application context class type or additional
+ processing (see <a class="link" href="app-deploy.html#extender-configuration-options:obfpp">below</a>).</td><td>The Extender default behaviour applies.</td></tr><tr><td><a name="extender-configuration-options:obfpp"></a><span class="emphasis"><em>(irrelevant)</em></span></td><td><code class="interfacename">OsgiBeanFactoryPostProcessor</code>
+ <a href="app-deploy.html#ftn.extender-configuration-options:extender.pkg" class="footnoteref"><sup class="footnoteref">[d]</sup></a>
+ </td><td>Similar to Spring's <code class="interfacename">BeanFactoryPostProcessor</code> interface, beans of type
+ <code class="interfacename">OsgiBeanFactoryPostProcessor</code> are automatically detected and applied to all contexts created by the
+ extender (whether <a class="link" href="app-deploy.html#extender-configuration-options:acc">user-defined</a> or not). This type of post processor
+ is useful as it allows customization of the bean factory such as adding/removing/changing existing bean definitions or adding new bean
+ instances.</td><td>The Extender default behaviour applies.</td></tr><tr><td><a name="extender-configuration-options:contextListener"></a><code class="literal">osgiApplicationContextListener</code></td><td><code class="interfacename">OsgiBundleApplicationContextListener</code>
+ <a href="#ftn.extender-configuration-options:event.pkg" class="footnote" name="extender-configuration-options:event.pkg"><sup class="footnote">[e]</sup></a>
+ </td><td>Application context event listener registered automatically by the extender.</td><td>Default implementation provides logging of the managed application contexts lifecycle.</td></tr></tbody><tbody class="footnotes"><tr><td colspan="4"><div id="ftn.d21e935" class="footnote"><code class="literal"><a href="#d21e935" class="literal"><sup>[a] </sup></a>org.springframework.core.task</code></div><div id="ftn.d21e945" class="footnote"><code class="literal"><a href="#d21e945" class="literal"><sup>[b] </sup></a>org.springframework.core.task</code></div><div id="ftn.d21e963" class="footnote"><code class="literal"><a href="#d21e963" class="literal"><sup>[c] </sup></a>org.springframework.context.event</code></div><div id="ftn.extender-configuration-options:extender.pkg" class="footnote"><code class="literal"><a href="#extender-configuration-options:extender.pkg" class="literal"><sup>[d] </sup></a>org.eclipse.gemini.blueprint.extender package</code></div><div id="ftn.extender-configuration-options:event.pkg" class="footnote"><code class="literal"><a href="#extender-configuration-options:event.pkg" class="literal"><sup>[e] </sup></a>org.eclipse.gemini.blueprint.context.event package</code></div></td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>From the <code class="literal">extenderProperties</code> bean, the following properties are recognized:</p>
+
+ <p>In addition, in Eclipse Gemini Blueprint a new system property has been introduced to control whether bundles providing namespace extensions should be considered in RESOLVED (default)
+ or STARTED state. The former allows namespaces to be picked up as soon as a bundle installed into the OSGi framework has its dependencies resolved - the advantage is that the namespaces become
+ available as soon as possible but on the downside, one needs to remove the source bundle in order to remove the namespace.
+ The latter forces namespaces to be considered only when the source bundles are actually started - to remove a namespace simply stop the owning bundle. However the order in which the bundles
+ are started influences the available namespace - the bundles providing the namespaces need to start before the bundles that require them - depending on the app such a dependency graph can create
+ some subtle problems (at runtime).
+
+ Thus, if the system property <code class="literal">org.eclipse.gemini.blueprint.ns.bundles.started</code> is defined and set to <code class="literal">true</code> then only namespace bundles <span class="emphasis"><em>started</em></span>
+ will be considered, if not the ones <span class="emphasis"><em>resolved</em></span> will be used.
+ </p>
+
+ <div class="table"><a name="extender-configuration-options-properties"></a><p class="title"><b>Table&nbsp;8.3.&nbsp;Available <code class="literal">extenderProperties</code></b></p><div class="table-contents">
+
+ <table class="table" summary="Available extenderProperties" width="100%" border="1"><colgroup><col><col><col><col></colgroup><thead><tr><th>Name</th><th>Type</th><th>Description</th><th>Default Value</th></tr></thead><tbody><tr><td><code class="literal">shutdown.wait.time</code></td><td><code class="classname">java.lang.Long</code></td><td>The amount of time the extender will wait for each application context to shutdown gracefully. Expressed in milliseconds.</td><td>10000 ms (10 s)</td></tr><tr><td><code class="literal">shutdown.asynchronously</code></td><td><code class="classname">boolean</code></td><td>
+ Whether the extender shall shutdown each application context asynchronously. If <code class="literal">false</code>,
+ the <code class="literal">shutdown.wait.time</code> is ignored. Accordingly, application contexts blocking during close will block the bundle shutdown.
+ </td><td><code class="literal">true</code></td></tr><tr><td><code class="literal">dependencies.wait.time</code></td><td><code class="classname">java.lang.Long</code></td><td>The amount of time the newly created application contexts will wait for their mandatory service dependencies during startup. Expressed
+ in milliseconds. This settings is used only if the context owning bundle manifest does <span class="emphasis"><em>not</em></span> define a value. </td><td>300000 ms (300 s or 5 min)</td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">Since an application context is used, the full power of the Spring IoC container can be used for creating the extender configuration beans.</td></tr></table></div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="app-deploy:extender-configuration:events"></a>8.3.1.&nbsp;Listening To Extender Events</h3></div></div></div>
+
+
+ <p>There are cases when the failure or succesful startup of an application context needs to be acknowledged for logging purposes (for example).
+ For these cases, Gemini Blueprint/Spring DM offers a dedicated package <code class="literal">org.eclipse.gemini.blueprint.context.event</code> which defines the events that
+ OSGi application contexts can send during their lifecycle. At the moment, the following events are available:</p>
+
+ <div class="table"><a name="app-deploy:extender-configuration:events-table"></a><p class="title"><b>Table&nbsp;8.4.&nbsp;Gemini Blueprint/Spring DM build-in events</b></p><div class="table-contents">
+
+ <table class="table" summary="Gemini Blueprint/Spring DM build-in events" width="100%" border="1"><colgroup><col><col></colgroup><thead><tr><th>Event</th><th>Explanation</th></tr></thead><tbody><tr><td><code class="classname">OsgiBundleContextRefreshedEvent</code></td><td>Published when an OSGi application context has been succesfully initialized or refreshed (e.g. using the
+ <code class="methodname">refresh()</code> method on the <code class="interfacename">ConfigurableApplicationContext</code> interface).
+ There are no guarantees on how many times this event might be received during the lifecycle of an application context - this is
+ left up to the used implementation.</td></tr><tr><td><code class="classname">OsgiBundleContextFailedEvent</code></td><td>Published when an OSGi application context is closed due to a failure. This event can appear any time during the lifecycle
+ of an application context - before, during or after refresh. Usually the cause indicates an error in the configuration - syntax typo,
+ incorrect wiring, missing bean and so forth.</td></tr><tr><td><code class="classname">OsgiBundleContextClosedEvent</code></td><td>Published when an OSGi application context is closed after a successful refresh (normally issued a Spring bundle is being stopped).
+ </td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>Parties interested in receiving these events should implement <code class="interfacename">OsgiBundleApplicationContextListener</code> and
+ then publish it as an OSGi service. The Gemini Blueprint/Spring DM extender will automatically detect the listener and will send the events to it. By taking advantage
+ of the OSGi service registry, the extender decouples the received from the event publisher and moreover, makes the registration/unregistration process
+ easier. For example, there is nothing special a client should do to unregister the listener - simply stopping the bundle will automatically
+ unregister all its published services (including the listener), an event which will detected by the extender which will remove the listener.
+ Of course, it is also possible for the client to unregister the listener manually during a bundle lifecycle.
+
+ </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">The Gemini Blueprint/Spring DM events semantics are slightly different then
+ <a class="ulink" href="http://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/beans.html#context-functionality-events" target="_top">Spring's</a>. The OSGi events are
+ not sent to beans inside the <span class="emphasis"><em>causing</em></span> application context but to other parties (possible beans in other application contexts)
+ interested in monitoring its behaviour.</td></tr></table></div><p>
+ </p>
+ </div>
+ </div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="app-deploy:required-libraries"></a>8.4.&nbsp;Required Spring Framework And Gemini Blueprint
+ Bundles</h2></div></div></div>
+
+
+ <p>The Gemini Blueprint project provides a number of bundle
+ artifacts that must be installed in your OSGi platform in order for the
+ Spring extender to function correctly:</p>
+
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <p>The extender bundle itself,
+ <code class="literal">org.eclipse.gemini.blueprint.extender</code></p>
+ </li><li class="listitem">
+ <p>The core implementation bundle for the Gemini Blueprint
+ support, <code class="literal">org.eclipse.gemini.blueprint.core</code></p>
+ </li><li class="listitem">
+ <p>The Gemini Blueprint I/O support library bundle,
+ <code class="literal">org.eclipse.gemini.blueprint.io</code></p>
+ </li></ul></div>
+
+ <p>In addition, the Spring Framework provides a number of bundles that
+ are required to be installed as dependencies. As of release 4.2.4 of the
+ Spring Framework, OSGi bundle versions are maintained by the Apache ServiceMix team and published using their group id, see for example
+ <a class="ulink" href="http://search.maven.org/#search|ga|1|g%3Aorg.apache.servicemix.bundles%20spring-" target="_top">all Spring OSGi artifacts published in maven central</a>.
+ </p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="app-deploy:optional-libraries"></a>8.5.&nbsp;Optional Gemini Blueprint Bundles</h2></div></div></div>
+
+
+ <p>Optionally, the following bundles may be installed to augment the Gemini Blueprint core functionality:</p>
+
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <p>The Gemini Blueprint propriertary extensions bundle,
+ <code class="literal">org.eclipse.gemini.blueprint.extensions</code></p>
+ </li></ul></div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="app-deploy:spring-namespaces"></a>8.6.&nbsp;Spring XML Authoring Support</h2></div></div></div>
+
+
+ <p>Spring 2.0 introduced (among other things) <a class="ulink" href="https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/oxm.html#oxm-schema-based-config" target="_top">
+ easier</a> XML configuration and <a class="ulink" href="https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/xml-custom.html" target="_top">
+ extensible</a> XML authoring. The latter gives the ability of creating custom schemas that are discovered automatically (in non-OSGi environment)
+ by the Spring XML infrastructure by including them in the classpath. Gemini Blueprint/Spring DM is aware of this process and supports it in OSGi environments so
+ that custom schemas are available to bundles that use them without any extra code or manifest declaration.</p>
+ <p>All bundles deployed in the OSGi space (whether they are <code class="literal">Spring-powered</code> or not) are scanned by Gemini Blueprint/Spring DM for
+ custom Spring namespace declaration (by checking the bundle space for<code class="literal">META-INF/spring.handlers</code> and
+ <code class="literal">META-INF/spring.schemas</code>). If these are found, Gemini Blueprint/Spring DM will make the schemas and the namespaces available through an OSGi
+ service that will be automatically used by Spring-powered bundles. This mean that if you deploy a bundle that uses a custom schema, all you have to do
+ is deploy the library that provides the namespace parser and the schema.
+ Bundles that embedded inside their classpath libraries that provide custom schemas will use these over those available in the OSGi space. However,
+ the namespaces of the embedded libraries will not shared with other bundles, that is, they will not be seen by any other bundle.</p>
+ <p>
+ In short, when using Gemini Blueprint/Spring DM, custom Spring namespaces are supported transparently without any additional work. Embedded namespace providers will
+ have priority but will not be shared, as opposed to providers deployed as bundles which will be seen (and used) by others.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="app-deploy:imports-exports"></a>8.7.&nbsp;Importing and Exporting Packages</h2></div></div></div>
+
+
+ <p>Refer to the OSGi Service Platform for details of the
+ <code class="literal">Import-Package</code> and <code class="literal">Export-Package</code>
+ manifest headers. Your bundle will need an
+ <code class="literal">Import-Package</code> entry for every external package that
+ the bundle depends on. If your bundle provides types that other bundles
+ need access to, you will need <code class="literal">Export-Package</code> entries
+ for every package that should be available from outside of the
+ bundle.</p>
+
+ <div class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Important"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="images/admons/important.png"></td><th align="left">Important</th></tr><tr><td align="left" valign="top">Both <code class="literal">Export</code> and <code class="literal">Import-Package</code> have a crucial role in defining a bundle class space. If used incorrectly,
+ the bundle might not be able to load certain classes or resources, load incorrect versions or even load multiple versions at the same time which usually
+ result in <code class="literal">ClassCastException</code>, <code class="literal">NoClassDefFoundError</code> or <code class="literal">LinkageError</code>. We strongly
+ recommend that you get familiar with the basics and, at least for starters, use tools
+ (such as <a class="ulink" href="https://docs.spring.io/s2-bundlor/1.0.x/user-guide/html/" target="_top">Bundlor</a> or <a class="ulink" href="http://www.aqute.biz/Bnd/Bnd" target="_top">BND</a>) for creating proper
+ OSGi manifests.</td></tr></table></div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="app-deploy:ext-libs"></a>8.8.&nbsp;Considerations When Using External Libraries</h2></div></div></div>
+
+
+ <div class="sidebar"><div class="titlepage"><div><div><p class="title"><b>What is the context class loader?</b></p></div></div></div>
+
+
+ <p>
+ The thread context class loader was introduced in J2SE without much fanfare.
+ Below is a short definition for it, quoted from <a class="ulink" href="http://java.sun.com/products/jndi/tutorial/beyond/misc/classloader.html" target="_top">one
+ </a> of the tutorials available on <a class="ulink" href="http://java.sun.com/" target="_top">Java</a> site:
+ </p>
+ <p>
+ The Java 2 platform also introduced the notion of <span class="emphasis"><em>context class loader</em></span>. A thread's context class loader is, by default,
+ set to the context class loader of the thread's parent. The hierarchy of threads is rooted at the primordial thread (the one that runs the program).
+ The context class loader of the primordial thread is set to the class loader that loaded the application. So unless you explicitly change
+ the thread's context class loader, its context class loader will be the application's class loader. That is, the context class loader can
+ load the classes that the application can load. This loader is used by the Java runtime such as the RMI (Java Remote Method Invocation) to
+ load classes and resources on behalf of the user application. The context class loader, like any Java 2 platform class loader, has a parent
+ class loader and supports the same delegation model for class loading described previously.
+ </p>
+ </div>
+
+ <p>Many enterprise application libraries assume that all of the types
+ and resources that comprise the application are accessible through the
+ context class loader. While most developers do not use the context class
+ loader, the loader is used heavily by application servers, containers or
+ applications that are multi-threaded.</p>
+
+ <p>
+ In OSGi R4, the set of types and resources
+ available through the context class loader is undefined.
+ This means that the OSGi platform does not make a guarantee of the thread context
+ class loader value or in other words, it does not manage it.
+ </p>
+ <p>
+ Thus code (for example libraries) that performs manual class loading or that generates
+ new classes dynamically can cause problems when executed inside an OSGi environment.
+ </p>
+
+ <p>Gemini Blueprint guarantees that during the creation of an
+ application context on behalf of a given bundle, all of the types and
+ resources on the bundle's classpath are accessible via the context class
+ loader. Gemini Blueprint also allows you to control what is
+ accessible through the context class loader when invoking external
+ services and when servicing requests on exported services. See <a class="xref" href="service-registry.html" title="Chapter&nbsp;9.&nbsp;The Service Registry">Chapter&nbsp;9, <i>The Service Registry</i></a>
+ for details on this.</p>
+
+ <p>Work is underway in the OSGi R5 timeframe to provide standardized
+ support for dealing with generated classes and implicit class path
+ dependencies introduced by third-party libraries. In the interim you may
+ need to rely on workarounds such as the
+ <code class="literal">DynamicImport-Package</code> manifest header, or the
+ facilities provided by specific OSGi implementations such as Equinox's
+ buddy mechanism. The Gemini Blueprint documentation contains more
+ details on known issues with common enterprise libraries and the
+ workarounds.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="app-deploy:troubleshooting"></a>8.9.&nbsp;Diagnosing Problems</h2></div></div></div>
+
+
+ <p>Your chosen OSGi platform implementation should be able to provide
+ you with a good deal of information about the current status of the OSGi
+ environment. For example, starting Equinox with the
+ <code class="literal">-console</code> argument provides a command-line console
+ through which you can determine which bundles are installed and their
+ states, the packages and services exported by bundles, find out why a
+ bundle has failed to resolve, and drive bundles through the
+ lifecycle. All the OSGi platform tested, provide their own logging, which
+ can be enabled and customized through dedicated settings. For more information,
+ please refer to OSGi platforms documentation.</p>
+
+ <p>In addition, Spring itself and the Gemini Blueprint bundles
+ contain extensive logging instrumentation that can help you diagnose
+ problems. The recommended approach is to deploy the Simple Logging
+ Facade for Java (<a class="ulink" href="http://www.slf4j.org/" target="_top">slf4j</a>)
+ slf4j-api.jar and slf4j-log4j13.jar bundles (the jar files distributed
+ by the project are valid OSGi bundles). Then you simply need to create a
+ <code class="literal">log4j.properties</code> file in the root of your bundle
+ classpath.</p>
+
+ <p>Managed, OSGi-aware runtime environments such as
+ <a class="ulink" href="http://docs.spring.io/s2-dmserver/2.0.x/user-guide/html/" target="_top">dmServer</a>
+ provide additional logging and insight not just for the bundle at hand, but also
+ regarding the application context and the VM among other things.</p>
+
+ <p>Note that Gemini Blueprint uses commons-logging API internally
+ which means that its logging implementation is fully pluggable. Please see
+ the FAQ and Resources pages for more information on other logging libraries
+ besides log4j.
+ </p>
+ </div>
+
+ </div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bnd-app-ctx.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="service-registry.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;7.&nbsp;Bundles and Application Contexts&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;9.&nbsp;The Service Registry</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/appendix-ack.html b/documentation/reference/3.0.0.M01/html/appendix-ack.html
new file mode 100644
index 0000000..82ba6eb
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/appendix-ack.html
@@ -0,0 +1,11 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Appendix&nbsp;G.&nbsp;Acknowledgments</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="appendixes.html" title="Part&nbsp;IV.&nbsp;Appendixes"><link rel="prev" href="appendix-schema.html" title="Appendix&nbsp;F.&nbsp;Gemini Blueprint Schema"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="appendix"><div class="titlepage"><div><div><h2 class="title"><a name="appendix-ack"></a>Appendix&nbsp;G.&nbsp;Acknowledgments</h2></div></div></div>
+
+
+ <p>Gemini Blueprint would like to thank (in alphabetical order) to :
+ Bill Gallagher, Olivier Gruber, Richard S. Hall, BJ Hargrave, Peter Kriens,
+ Martin Lippert, Jeff McAffer, Glyn Normington, Gerd Wuetherich
+ for their contributions in the development of this documentation.</p>
+</div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix-schema.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;</td></tr><tr><td width="40%" align="left" valign="top">Appendix&nbsp;F.&nbsp;Gemini Blueprint Schema&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/appendix-osgi-repo.html b/documentation/reference/3.0.0.M01/html/appendix-osgi-repo.html
new file mode 100644
index 0000000..d2a9920
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/appendix-osgi-repo.html
@@ -0,0 +1,82 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Appendix&nbsp;E.&nbsp;Gemini Blueprint OSGi Repository</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="appendixes.html" title="Part&nbsp;IV.&nbsp;Appendixes"><link rel="prev" href="appendix-roadmap.html" title="Appendix&nbsp;D.&nbsp;Roadmap"><link rel="next" href="appendix-schema.html" title="Appendix&nbsp;F.&nbsp;Gemini Blueprint Schema"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="appendix"><div class="titlepage"><div><div><h2 class="title"><a name="appendix-osgi-repo"></a>Appendix&nbsp;E.&nbsp;Gemini Blueprint OSGi Repository</h2></div></div></div>
+
+
+ <p>At the moment, most libraries are not released as OSGi bundles which means they cannot be used inside the OSGi space unless they
+ are embedded in other bundles. Though there are <a class="ulink" href="http://www.aqute.biz/Code/Bnd" target="_top">tools</a> that make the bundling
+ process easy, it is desirable to have the artifacts prepacked so they can be used immediately for development.</p>
+
+ <p>SpringSource <a class="ulink" href="http://www.springsource.com/repository/" target="_top">Enterprise Bundle Repository</a> (or SpringSource Repository) addresses this problem by
+ providing
+ <span class="quote">&#8220;<span class="quote">a collection of open source libraries commonly used for developing enterprise Java applications with the Spring Framework</span>&#8221;</span> (taken
+ from the Repository <a class="ulink" href="http://www.springsource.com/repository/app/faq" target="_top">FAQ</a>). With the availability of the Bundle Repository,
+ the Gemini Blueprint old repository (see below) has been deprecated and it is being used until migrating completely to SpringSource Repository. It is highly recommended
+ that users migrate as well to SpringSource Repository as it provides significantly more libraries and it is intended to be a user-facing infrastructure component.
+ </p>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="appendix-osgi-repo:old-repo"></a>E.1.&nbsp;Gemini Blueprint Temporary OSGi Repository</h2></div></div></div>
+
+
+ <p>Unfortunately, not all Gemini Blueprint dependencies are available in SpringSource Repository and thus Gemini Blueprint still needs to maintain some of its own
+ dedicated Maven <a class="ulink" href="http://maven.apache.org/guides/introduction/introduction-to-repositories.html" target="_top">repository</a> available
+ at <code class="literal">http://maven.springframework.org/osgi</code>.
+
+ </p><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="images/admons/warning.png"></td><th align="left">Warning</th></tr><tr><td align="left" valign="top">The repository is <span class="emphasis"><em>provided as-is</em></span> without any kind of support. The repository structure/content
+ can (and will) change until it becomes stable. Before using Gemini Blueprint repository make sure the needed artifact are not available
+ in SpringSource Repository. These being said, we hope you find it useful and we'd like to <a class="ulink" href="http://jira.springframework.org/browse/OSGI" target="_top">know</a>
+ if there are improvement that can be made to it.</td></tr></table></div><p>
+ </p>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="appendix-osgi-repo:conventions"></a>E.1.1.&nbsp;Repository Conventions</h3></div></div></div>
+
+
+ <p>Currently, all the artifacts published in the repository are marked as <code class="literal">SNAPSHOT</code>s meaning that, in time, their
+ content can change. This allows clients to download possible manifest updates made to the libraries. We foresee that, as the library usage
+ increases, several popular items will have the <code class="literal">SNAPSHOT</code> marker remove.
+ Additionally, to differentiate the <span class="emphasis"><em>OSGi</em></span>-enabled artifacts from the original ones, all libraries are placed under
+ <code class="literal">org.eclipse.gemini.blueprint</code> group and their names contains a <code class="literal">.osgi</code> suffix.</p>
+
+ <p>So for example, an OSGi version of <code class="literal">mx4j-3.0.2</code> jar is available in the Gemini Blueprint OSGi repository under at:
+ <code class="literal">org.eclipse.gemini.blueprint/mx4j.osgi/3.0.2-SNAPSHOT/mx4j.osgi-3.0.2-SNAPSHOT.jar</code></p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="appendix-osgi-repo:browsing"></a>E.1.2.&nbsp;Browsing The Repository Content</h3></div></div></div>
+
+
+ <p>The repository is currently hosted at Amazon <a class="ulink" href="http://aws.amazon.com/s3" target="_top">S3</a>. To browse the repository structure,
+ use a S3 compatible browser (such as <a class="ulink" href="http://s3browse.com/explore/maven.springframework.org/osgi/org.eclipse.gemini.blueprint/" target="_top">this</a> one)
+ since a vanilla web browse will not be suitable.
+ </p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="appendix-osgi-repo:maven"></a>E.1.3.&nbsp;Using The Repository With Maven</h3></div></div></div>
+
+
+ <p>The use the repository, simply add it ot the <code class="literal">repositories</code> group; since the repository
+ contains <code class="literal">SNAPSHOT</code> artifacts, make sure to mark it accordingly:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;repositories&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;repository&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;id&gt;</strong>spring-osgified-artifacts<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/id&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;snapshots&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;enabled&gt;</strong>true<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/enabled&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/snapshots&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;name&gt;</strong>Springframework Maven OSGified Artifacts Repository<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/name&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;url&gt;</strong>http://maven.springframework.org/osgi<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/url&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/repository&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/repositories&gt;</strong></pre>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="appendix-osgi-repo:ant"></a>E.1.4.&nbsp;Using The Repository With Ant/Ivy</h3></div></div></div>
+
+
+ <p>When using <a class="ulink" href="http://ant.apache.org/" target="_top">Ant</a> consider using the excellent <a class="ulink" href="http://ant.apache.org/ivy/" target="_top">Ivy</a>
+ subproject for retrieving the OSGi dependencies from the Gemini Blueprint repository as Ivy can work with a Maven-style repository. Please see the
+ Ivy <a class="ulink" href="http://ant.apache.org/ivy/history/latest-milestone/tutorial/start.html" target="_top">tutorial</a> for more information.</p>
+ </div>
+
+ </div>
+</div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix-roadmap.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="appendix-schema.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix&nbsp;D.&nbsp;Roadmap&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;Appendix&nbsp;F.&nbsp;Gemini Blueprint Schema</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/appendix-pde-integration.html b/documentation/reference/3.0.0.M01/html/appendix-pde-integration.html
new file mode 100644
index 0000000..89e99fc
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/appendix-pde-integration.html
@@ -0,0 +1,74 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Appendix&nbsp;B.&nbsp;Eclipse Plug-in Development integration</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="appendixes.html" title="Part&nbsp;IV.&nbsp;Appendixes"><link rel="prev" href="appendix-security.html" title="Appendix&nbsp;A.&nbsp;Security Integration"><link rel="next" href="appendix-tips.html" title="Appendix&nbsp;C.&nbsp;Useful OSGi tips"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="appendix"><div class="titlepage"><div><div><h2 class="title"><a name="appendix-pde-integration"></a>Appendix&nbsp;B.&nbsp;Eclipse Plug-in Development integration</h2></div></div></div>
+
+
+ <p>Eclipse <a class="ulink" href="http://www.eclipse.org/pde/" target="_top">PDE</a> <span class="quote">&#8220;<span class="quote">provides comprehensive OSGi tooling, which makes it
+ an ideal environment for component programming, not just Eclipse plug-in development</span>&#8221;</span>.
+ In fact, Eclipse IDE is built on top of OSGi and uses at its core the Equinox OSGi implementation. Moreover, all the Eclipse
+ plug-ins are OSGi bundles. This makes Eclipse with PDE a very attractive tool for creating OSGi bundles.
+ While Gemini Blueprint artifacts can be integrated as <span class="emphasis"><em>normal</em></span> libraries, through
+ <a class="ulink" href="http://www.springide.org" target="_top">Spring IDE</a>, Gemini Blueprint can be installed as a
+ <a class="ulink" href="http://help.eclipse.org/stable/index.jsp?topic=/org.eclipse.pde.doc.user/guide/tools/preference_pages/target_platform.htm" target="_top">
+ target platform</a> ready to be used with PDE.
+ </p>
+
+ <div class="procedure"><p>The following steps illustrate how to install Spring IDE extension for OSGi and how to use it in your project. Please see
+ <a class="ulink" href="http://springide.org/project/wiki/SpringideInstall" target="_top">Spring IDE installation page</a> for information on its requirement
+ and install process.</p><ol class="procedure" type="1"><li class="step">
+ <p class="title"><b>Set Up Nightly Update Site</b></p>
+ <p>At the moment, the OSGi extension is available only on Spring-IDE nightly builds update site. Add it to the Eclipse configuration by
+ opening the software update menu:
+ </p>
+ <p>
+ </p><div class="mediaobject" align="left"><img src="images/pde/find-install.png" align="left"></div><p>
+
+ </p><div class="mediaobject" align="central"><img src="images/pde/springide-site.png" align="central"></div><p>
+
+ </p>
+
+ <p>and create a new update site pointing to <code class="literal">http://www.springide.org/updatesite_nightly</code></p>
+ </li><li class="step">
+ <p class="title"><b>Select Spring IDE OSGi extension</b></p>
+ <p>After using the nightly update site and performing the update, Eclipse will show the search results. Unfold the <span class="emphasis"><em>Extension</em></span> menu and select <code class="literal">Spring IDE OSGi Extension</code>:</p>
+ <p>
+ </p><div class="mediaobject" align="center"><img src="images/pde/spring-osgi-plugin.png" align="middle" alt="Select Spring IDE OSGI extension"></div><p>
+ </p>
+
+ <p>and proceed with the instalation.</p>
+ </li><li class="step">
+ <p class="title"><b>Select Gemini Blueprint Target Platform</b></p>
+ <p>Once the plug-in has been installed, Gemini Blueprint can be selected as a PDE target platform. Select Window/Preferences/Plug-in Development and then
+ Target Platform.</p>
+ <p>
+ </p><div class="mediaobject" align="center"><img src="images/pde/target-select.png" align="middle" alt="Select Gemini Blueprint target platform"></div><p>
+ </p>
+
+ <p>Select the Gemini Blueprint version that you desire from the Pre-defined Target (1) drop box and press Load Target (2). Eclipse will load the target and all bundles defined
+ by it - this includes Gemini Blueprint bundles and all of its dependencies (SLF4J is used for logging). The configuration can be customised appropriately by removing
+ and adding bundles.</p>
+
+ <p>In its current form, the plug-in offers two predefined targets - one for the stable released versions and one for the SNAPSHOT/nightly Gemini Blueprint jars. The latter
+ does not contain any jars as it is expected for the user to download them manually. Simply locate the path where the plug-ins should be located (3), enter that folder
+ and do a </p>
+ <pre class="programlisting">mvn install</pre>
+ <p>The latest Gemini Blueprint SNAPSHOT will be downloaded along with all of its dependencies.
+ Simply click on the reload button (4) and Eclipse will pick up the bundles. </p>
+ </li><li class="step">
+ <p class="title"><b>Select PDE Perspective</b></p>
+ <p>Once the installation is completed just select the PDE perspective:</p>
+ <p>
+ <span class="inlinemediaobject"><img src="images/pde/select-pde-1.png" align="left"></span>
+ <span class="inlinemediaobject"><img src="images/pde/select-pde-2.png" align="central"></span>
+
+ </p>
+
+ <p>and the Gemini Blueprint and its dependencies should be available in the plug-ins view:</p>
+ <p>
+ <span class="inlinemediaobject"><img src="images/pde/select-plugins-view.png" align="left"></span>
+
+ <span class="inlinemediaobject"><img src="images/pde/show-plugins.png" align="central"></span>
+ </p>
+ </li></ol></div>
+</div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix-security.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="appendix-tips.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix&nbsp;A.&nbsp;Security Integration&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;Appendix&nbsp;C.&nbsp;Useful OSGi tips</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/appendix-roadmap.html b/documentation/reference/3.0.0.M01/html/appendix-roadmap.html
new file mode 100644
index 0000000..969992d
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/appendix-roadmap.html
@@ -0,0 +1,40 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Appendix&nbsp;D.&nbsp;Roadmap</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="appendixes.html" title="Part&nbsp;IV.&nbsp;Appendixes"><link rel="prev" href="appendix-tips.html" title="Appendix&nbsp;C.&nbsp;Useful OSGi tips"><link rel="next" href="appendix-osgi-repo.html" title="Appendix&nbsp;E.&nbsp;Gemini Blueprint OSGi Repository"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="appendix"><div class="titlepage"><div><div><h2 class="title"><a name="appendix-roadmap"></a>Appendix&nbsp;D.&nbsp;Roadmap</h2></div></div></div>
+
+
+ <p>
+ This appendix documents features on the Gemini Blueprint
+ roadmap. The design of these features specified here is subject
+ to change. As a most up to date source, please see
+ <a class="ulink" href="https://bugs.eclipse.org/bugs/buglist.cgi?product=Gemini.Blueprint" target="_top">
+ our
+ </a>
+ issue tracker.
+ </p>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d21e3346"></a>D.1.&nbsp;Start Level Integration</h2></div></div></div>
+
+
+ <p>A future release of Gemini Blueprint may offer the following
+ additional guarantee with respect to application context creation and
+ start levels:</p>
+
+ <p>Application context creation happens asynchronously. However, the
+ extender bundle does guarantee that the creation of all application
+ contexts for bundles at start level <code class="literal">n</code> will be
+ complete before the creation of any application context at start level
+ <code class="literal">m</code>, where <code class="literal">m &gt; n</code>. Care must
+ therefore be taken not to introduce any mandatory dependencies on
+ services exported by bundles with higher start levels or a deadlock will
+ be introduced.</p>
+
+ <p>In a similar vein, when shutting down the extender bundle,
+ application contexts at start level <code class="literal">m</code> will be shut
+ down before application contexts at start level <code class="literal">n</code>,
+ where <code class="literal">m &gt; n</code>.</p>
+ </div>
+
+
+</div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix-tips.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="appendix-osgi-repo.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix&nbsp;C.&nbsp;Useful OSGi tips&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;Appendix&nbsp;E.&nbsp;Gemini Blueprint OSGi Repository</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/appendix-schema.html b/documentation/reference/3.0.0.M01/html/appendix-schema.html
new file mode 100644
index 0000000..d57c755
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/appendix-schema.html
@@ -0,0 +1,931 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Appendix&nbsp;F.&nbsp;Gemini Blueprint Schema</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="appendixes.html" title="Part&nbsp;IV.&nbsp;Appendixes"><link rel="prev" href="appendix-osgi-repo.html" title="Appendix&nbsp;E.&nbsp;Gemini Blueprint OSGi Repository"><link rel="next" href="appendix-ack.html" title="Appendix&nbsp;G.&nbsp;Acknowledgments"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="appendix"><div class="titlepage"><div><div><h2 class="title"><a name="appendix-schema"></a>Appendix&nbsp;F.&nbsp;Gemini Blueprint Schema</h2></div></div></div>
+
+
+ <p>Gemini Blueprint Core Schema</p>
+ <pre class="programlisting"><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-directive">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;</span>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:schema</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:xsd</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.w3.org/2001/XMLSchema"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:beans</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:tool</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/tool"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">targetNamespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">elementFormDefault</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"qualified"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">attributeFormDefault</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"unqualified"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">version</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1.0.0"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:import</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">namespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.w3.org/XML/1998/namespace"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:import</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">namespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:import</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">namespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/tool"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Namespace support for the core services provided by Eclipse Gemini Blueprint.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attributeGroup</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"defaults"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>Defaults for Gemini Blueprint declarations.<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- attributes --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"default-timeout"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:nonNegativeInteger"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"30000"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Default timeout (in milliseconds) for all reference (service importers) elements that do not explicitly specify one.
+ Default value is 300000 ms (5 minutes).
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"default-availablility"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TavailabilityOptions"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"mandatory"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Default availability for all OSGi references (singular or collections) elements that do not explicitly specify one.
+ Default value is 'mandatory' which means that a backing service must exist while 'optional' indicates that it is
+ acceptable to be no backing service.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"default-cardinality"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TdefaultCardinalityOptions"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1..X"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ As of Eclipse Gemini Blueprint, 'default-cardinality' has been replaced by 'default-availability' attribute.
+
+ Default cardinality (of the relationship to the backing service(s)) for all OSGi references (singular or collections)
+ elements that do not explicitly specify one.
+ Default value is '1..X' (resolved to '1..1' for osgi:reference and '1..N' for osgi:list/set) which means that a backing
+ service must exist (this is a mandatory service reference). A value of '0..X' (resolved to '0..1' for osgi:reference
+ and '0..N' for osgi:list/set) indicates that it is acceptable to be no backing service (an optional service reference).
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attributeGroup&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:simpleType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TavailabilityOptions"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:restriction</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:NMTOKEN"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"mandatory"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Mandatory service reference - a backing service must exist.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:enumeration&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Optional service reference - A backing service can be missing.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:enumeration&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:restriction&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:simpleType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:simpleType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TdefaultCardinalityOptions"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:restriction</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:NMTOKEN"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1..X"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ A backing service must exist (this is a mandatory service reference).
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:enumeration&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0..X"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ A backing service can be missing (this is an optional service reference).
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:enumeration&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:restriction&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:simpleType&gt;</strong>
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- reference --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"reference"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TsingleReference"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines a reference to a service obtained via the OSGi service registry.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"Treference"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:extension</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beans:identifiedType"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:sequence</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"interfaces"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beans:listOrSetType"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ The set of service interfaces that the services obtained via the registry are required to support.
+ By convention, the interface attribute is a Java interface type, but may also be a (non-final)
+ class type.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"reference-listener"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"Tlistener"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"unbounded"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines a listener that will receive notification when a service backing this reference is
+ bound or unbound.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"listener"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"Tlistener"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"unbounded"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines a listener that will receive notification when a service backing this reference is
+ bound or unbound. Deprecated since Gemini Blueprint, in favour of 'reference-listener'.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:sequence&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"interface"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:token"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ The service interface that the services obtained via the registry are required to support.
+ By convention this is a Java interface type, but may also be a (non-final) class type.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:expected-type</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.Class"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"filter"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines an OSGi filter expression that is used to constrain the set of matching services
+ in the service registry.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"depends-on"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Used to refer to the name of another bean that this bean depends on. Ensures that the
+ service registry look-up does not happen until after the dependent bean has been created
+ (most commonly used to refer to a bundle bean).
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"bean-name"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Convenient shortcut for specifying a filter expression that matches on the bean-name property
+ that is automatically advertised for beans published using the service element.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"context-class-loader"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TreferenceClassLoaderOptions"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"client"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines how the context class loader is managed when invoking operations on a service
+ backing this service reference. The default value is 'client' which means that the context
+ class loader has visibility of the resources on this bundle's classpath. Alternate
+ options are 'service-provider' which means that the context class loader has visibility of
+ resources on the bundle classpath of the bundle that exported the service, and 'unmanaged'
+ which does not do any management of the context class loader.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:extension&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:simpleType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TreferenceClassLoaderOptions"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:restriction</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:NMTOKEN"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"client"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service-provider"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"unmanaged"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:restriction&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:simpleType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"Tlistener"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines a listener that will be notified when the service backing the enclosing service reference element is bound or
+ unbound. Use either the 'ref' attribute or a nested bean declaration for the listener bean.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:sequence</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- nested bean declaration --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:any</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">namespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"##other"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">processContents</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"skip"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:sequence&gt;</strong>
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- shortcut for bean references --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"ref"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Refers by name to the bean that will receive bind and unbind events
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"bind-method"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:token"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ The name of the method to be invoked when a backing service is bound.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"unbind-method"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:token"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ The name of the method to be invoked when a backing service is unbound.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexType&gt;</strong>
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- single reference --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TsingleReference"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:extension</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"Treference"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"availability"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TavailabilityOptions"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines the required availability of the backing service. If not specified,
+ the default-availability attribute will apply. 'mandatory' means that a backing service
+ must exist, 'optional' indicates that it is acceptable to have no backing service.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"cardinality"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TsingleReferenceCardinality"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ As of Gemini Blueprint, 'cardinality' has been replaced by the 'availability' attribute.
+
+ Defines the required cardinality of the relationship to the backing service. If not specified,
+ the default-cardinality attribute will apply. A value of '1..1' means that a backing service
+ must exist (this is a mandatory service reference). A value of '0..1' indicates that it is
+ acceptable to be no backing service (an optional service reference).
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"timeout"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:nonNegativeInteger"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ For a 'reference' element, the amount of time (in milliseconds) to wait for a backing service to be
+ available when an operation is invoked. If not specified, the default-timeout attribute will apply.
+ See also the default-timeout attribute of the osgi element.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"sticky"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:boolean"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"true"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines whether the backing service should be changed if a 'better' OSGi service becomes
+ available. If 'true', the proxy will rebind only if the backing service is no longer available.
+ If 'false', the rebind will occur every time a 'better' candidate appears. A better service is
+ defined by having either a higher ranking or the same ranking and a lower service id.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:extension&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:simpleType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TsingleReferenceCardinality"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:restriction</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:NMTOKEN"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1..1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0..1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:restriction&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:simpleType&gt;</strong>
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- reference collections (set, list) --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"list"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TreferenceCollection"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">source</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java:org.eclipse.gemini.blueprint.service.importer.support.OsgiServiceCollectionProxyFactoryBean"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines a bean of type 'List' that contains all of the services matching the given criteria.
+ The list members are managed dynamically as matching backing services come and go.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:exports</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.util.List"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"set"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TreferenceCollection"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">source</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java:org.eclipse.gemini.blueprint.service.importer.support.OsgiServiceCollectionProxyFactoryBean"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines a bean of type 'Set' that contains all of the services matching the given criteria.
+ The set members are managed dynamically as matching backing services come and go.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:exports</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.util.Set"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TreferenceCollection"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:extension</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"Treference"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:sequence</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"comparator"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"Tcomparator"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">source</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java:java.util.Comparator"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Used to define an inline bean of type Comparator that will be used to sort the matching services.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:expected-type</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.util.Comparator"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:sequence&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"comparator-ref"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Used to refer to a named bean implementing the Comparator interface that will be used to
+ sort the matching services.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"availability"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TavailabilityOptions"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines the required availability of the backing service. If not specified,
+ the default-availability attribute will apply. 'mandatory' means that a backing service
+ must exist, 'optional' indicates that it is acceptable to have no backing service.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"cardinality"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TcollectionCardinality"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ As of Gemini Blueprint, 'cardinality' has been replaced by the 'availability' attribute.
+
+ Defines the required cardinality of the relationship to the backing services. If not specified,
+ the default-cardinality attribute will apply. A value of '1..N' means that at least one backing
+ service must exist (this is a mandatory service reference. A value of '0..N' indicates that it
+ is acceptable for there to be no backing service (an optional service reference).
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"greedy-proxying"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:boolean"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"false"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Indicates whether the proxies created for the imported OSGi services will be generated using
+ just the classes specified (false) or all the classes exported by the service and visible to
+ the importing bundle (true). The default value is false.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"member-type"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TmemberType"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service-object"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Indicates the type of object that will be placed within the reference collection.
+ 'service-object' indicates the collection contains service proxies for imported services.
+ 'service-reference' indicates the collection contains ServiceReference objects matching the
+ target service type.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:extension&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"Tcomparator"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">source</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java:java.util.Comparator"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Used to define an inline bean of type Comparator that will be used to sort the matching services.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:exports</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.util.Comparator"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:choice&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"natural"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TnaturalOrdering"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:sequence</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- nested bean declaration --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:any</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">namespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"##other"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">processContents</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"skip"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:sequence&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:choice&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TnaturalOrdering"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"basis"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TorderingBasis"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"required"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:simpleType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TorderingBasis"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:restriction</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:NMTOKEN"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service-reference"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:restriction&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:simpleType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:simpleType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TmemberType"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:restriction</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:NMTOKEN"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service-object"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service-reference"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:restriction&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:simpleType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:simpleType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TcollectionCardinality"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:restriction</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:NMTOKEN"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1..N"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0..N"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:restriction&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:simpleType&gt;</strong>
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- service --&gt;</em>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"Tservice"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TbaseService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:extension</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beans:identifiedType"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"interface"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:token"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines the interface to advertise for this service in the service registry.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:expected-type</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.Class"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"depends-on"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Used to ensure that the service is not exported to the registry before the named bean
+ has been created.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"context-class-loader"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TserviceClassLoaderOptions"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"unmanaged"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines how the context class loader will be managed when an operation is invoked on the
+ exported service. The default value is 'unmanaged' which means that no management of
+ the context class loader is attempted. A value of 'service-provider' guarantees that
+ the context class loader will have visibility of all the resources on the class path of
+ bundle exporting the service.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"auto-export"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TautoExportModes"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"disabled"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Enables Spring to automatically manage the set of service interfaces advertised for the
+ service. By default this facility is disabled. A value of 'interfaces' advertises all
+ of the Java interfaces supported by the exported service. A value of 'class-hierarchy'
+ advertises all the Java classes in the hierarchy of the exported service. A value of
+ 'all-classes' advertises all Java interfaces and classes.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:extension&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"Tservice"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">source</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java:org.eclipse.gemini.blueprint.service.exporter.support.OsgiServiceFactoryBean"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Exports the reference bean as a service in the OSGi service registry. The bean defined by this element is of
+ type org.osgi.framework.ServiceRegistration.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:exports</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.osgi.framework.ServiceRegistration"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:extension</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TbaseService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:sequence</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"interfaces"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beans:listOrSetType"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ The set of service interfaces to advertise in the service registry.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"registration-listener"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TserviceRegistrationListener"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"unbounded"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines a listener that will be notified when this service is registered or unregistered in the
+ OSGi service registry.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service-properties"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TserviceProperties"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines the service properties.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- nested bean declaration --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:any</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">namespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"##other"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">processContents</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"skip"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:sequence&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"ref"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Refers to the named bean to be exported as a service in the service registry.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"ranking"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:int"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Specifies the service ranking to be used when advertising the service.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"cache-target"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:boolean"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"false"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Specifies the caching of the exported target object. When enabled, the exporter will ignore the scope of the
+ target bean and use only the first resolved instance for registration. When disabled (default), the scope of
+ the target bean is considered and each service request, will be directed to the container.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:extension&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TserviceProperties"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Services properties used by the service exporter.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:exports</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.util.Map"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:extension</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beans:mapType"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- shortcut for bean references --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"ref"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Refers by name to the bean that will receive register and unregister events.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:extension&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TserviceRegistrationListener"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines a listener that will be notified when the bean is registered or unregistered in the OSGi Service Registry.
+ Use either the 'ref' attribute or a nested bean declaration for the listener bean.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:sequence</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- nested bean declaration --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:any</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">namespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"##other"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">processContents</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"skip"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:sequence&gt;</strong>
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- shortcut for bean references --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"ref"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Refers by name to the bean that will receive register and unregister events.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"registration-method"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:token"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ The name of the method to be invoked when the service is registered.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"unregistration-method"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:token"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ The name of the method to be invoked when the service is unregistered.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:simpleType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TserviceClassLoaderOptions"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:restriction</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:NMTOKEN"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service-provider"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"unmanaged"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:restriction&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:simpleType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:simpleType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TautoExportModes"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:restriction</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:NMTOKEN"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"disabled"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"interfaces"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"class-hierarchy"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"all-classes"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:restriction&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:simpleType&gt;</strong>
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- bundle --&gt;</em>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"bundle"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"Tbundle"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">source</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java:org.eclipse.gemini.blueprint.bundle.BundleFactoryBean"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines a bean representing a Bundle object. May be used to drive bean lifecycle transitions.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:exports</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.osgi.framework.Bundle"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"Tbundle"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:extension</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beans:identifiedType"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- optional nested bean declaration --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:sequence</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:any</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">namespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"##other"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">processContents</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"lax"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ OSGi bundle to work with.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:expected-type</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.osgi.framework.Bundle"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:any&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:sequence&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"symbolic-name"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ The bundle symbolic name of the bundle object. Normally used when interacting with an already
+ installed bundle.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"depends-on"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Indicates that this bundle object should not be created until the named bean has been created.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"location"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Location used to install, update or/and identify a bundle.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"action"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TbundleAction"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Lifecyle action to drive on the bundle. 'start' starts the bundle, installing if necessary.
+ 'stop' stops the bundle if it is currently ACTIVE. 'install' installs the bundle if it is
+ currently uninstalled. 'uninstall' stops the bundle if needed, and then uninstalls it.
+ 'update' installs the bundle if needed, and then invokes the Bundle.update() operation.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"destroy-action"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TbundleAction"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Lifecyle action to drive on the bundle. 'start' starts the bundle, installing if necessary.
+ 'stop' stops the bundle if it is currently ACTIVE. 'install' installs the bundle if it is
+ currently uninstalled. 'uninstall' stops the bundle if needed, and then uninstalls it.
+ 'update' installs the bundle if needed, and then invokes the Bundle.update() operation.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"start-level"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:int"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Start level to set for the bundle.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:extension&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexType&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:simpleType</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"TbundleAction"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:restriction</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:NMTOKEN"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"start"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"stop"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"install"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"uninstall"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:enumeration</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"update"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:restriction&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:simpleType&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:schema&gt;</strong>
+ </pre>
+
+ <p>Gemini Blueprint Compendium Schema</p>
+ <pre class="programlisting"><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-directive">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;</span>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:schema</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:xsd</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.w3.org/2001/XMLSchema"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:beans</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:osgi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:tool</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/tool"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">targetNamespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">elementFormDefault</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"qualified"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">attributeFormDefault</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"unqualified"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">version</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1.0.0"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:import</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">namespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.w3.org/XML/1998/namespace"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:import</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">namespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:import</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">namespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/tool"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:import</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">namespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">schemaLocation</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint/gemini-blueprint.xsd"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Namespace support for the compendium services provided by Eclipse Gemini Blueprint.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- internal reusable type --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attributeGroup</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"updateAttributes"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"autowire-on-update"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:boolean"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"false"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Whether or not the container should autowire the target bean everytime an update occurs.
+ When 'true' is specified, the container will perform autowire (by name) the bean instance with the
+ newly set properties. In case 'update-method' attribute is used as well, the autowiring process will
+ take precedence.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"update-method"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ The update-method to invoke whenever an update occurs in the configuration data. Allows the target
+ bean to process the update information itself. In case 'autowire-on-update' is also used, the 'update-method'
+ will be invoked after the autowiring takes place.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attributeGroup&gt;</strong>
+
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"managed-properties"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines a bean based on the given class name and configuration, with properties autowired-by-name
+ based on the configuration stored under the given persistent id.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexType&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"persistent-id"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"required"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ The persistent-id under which the configuration for this bean is stored in
+ the Configuration Admin service.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attributeGroup</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"updateAttributes"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexType&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- managed-service-factory --&gt;</em>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"managed-service-factory"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines a collection of beans based on the given class name, with properties autowired-by-name based
+ on the configuration sets stored under the given factory persistent id.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexType&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:extension</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"osgi:TbaseService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:sequence&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"interfaces"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beans:listOrSetType"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ The set of service interfaces to advertise in the service registry.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"registration-listener"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"osgi:TserviceRegistrationListener"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"unbounded"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines a listener that will be notified when this service is registered or unregistered in the
+ OSGi service registry.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service-properties"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"osgi:TserviceProperties"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- the bean definition template --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:any</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">namespace</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"##other"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">minOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">maxOccurs</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">processContents</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"skip"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Defines the service definition template.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:any&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:sequence&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"factory-pid"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"required"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ The persistent-id under which the configuration for this bean is stored in
+ the Configuration Admin service.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attributeGroup</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"updateAttributes"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:extension&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexType&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- cm-properties --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:element</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"cm-properties"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">source</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java:org.eclipse.gemini.blueprint.compendium.cm.ConfigAdminPropertiesFactoryBean"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Exposes the properties found in the Configuration Admin service under the given persistent id.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;tool:exports</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.util.Properties"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/tool:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:appinfo&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexType&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:extension</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">base</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beans:propsType"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"id"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:ID"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"persistent-id"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:string"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">use</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"required"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ The persistent id under which the properties reside.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"local-override"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:boolean"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"false"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Specifies whether local properties override properties from the Configuration Admin service.
+ Default is "false": properties from Configuration Admin service override local defaults.
+ If set to "true", local properties will override properties from Configuration Admin service.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"dynamic"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:boolean"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"false"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Specifies whether changes to the Configuration Admin service will be reflected by the properties.
+ Default is "false": once resolved from the Configuration Admin, the properties will not change.
+ If set to "true", the properties object content will update accordingly (after initialization) to the changes in the Configuration Admin.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"init-lazy"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:boolean"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"true"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Specifies whether the properties reflecting the Configuration Admin service entry will be initialized lazy or not.
+ Default is "true": meaning the properties will be initialized just before being requested (from the factory) for the first time. This is
+ the common case as it allows the most recent entry to be used.
+ If set to "false", the properties object will be initialized at startup, along with the bean factory.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:attribute</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"init-timeout"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"xsd:nonNegativeInteger"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"0"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;xsd:documentation&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;![CDATA[</strong>
+ Specifies the amount of time (in milliseconds) the bean factory will wait for the Configuration Admin entry to
+ be initialized (return a non-null value). If the entry is not null at startup, no waiting will be performed.
+ Similar to the other timeout options, a value of '0' means no waiting. By default, no waiting (0) is performed.
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">]]&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:documentation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:annotation&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:attribute&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:extension&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexContent&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:complexType&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:element&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/xsd:schema&gt;</strong>
+ </pre>
+
+</div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix-osgi-repo.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="appendix-ack.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix&nbsp;E.&nbsp;Gemini Blueprint OSGi Repository&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;Appendix&nbsp;G.&nbsp;Acknowledgments</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/appendix-security.html b/documentation/reference/3.0.0.M01/html/appendix-security.html
new file mode 100644
index 0000000..151719f
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/appendix-security.html
@@ -0,0 +1,31 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Appendix&nbsp;A.&nbsp;Security Integration</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="appendixes.html" title="Part&nbsp;IV.&nbsp;Appendixes"><link rel="prev" href="appendixes.html" title="Part&nbsp;IV.&nbsp;Appendixes"><link rel="next" href="appendix-pde-integration.html" title="Appendix&nbsp;B.&nbsp;Eclipse Plug-in Development integration"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="appendix"><div class="titlepage"><div><div><h2 class="title"><a name="appendix-security"></a>Appendix&nbsp;A.&nbsp;Security Integration</h2></div></div></div>
+
+
+ <p>Since Spring DM 1.2.0, Gemini Blueprint integrates with Java 2 <a class="link" href="">security</a>.
+ Namely Gemini Blueprint uses <a class="link" href="">privileged blocks</a> for executing security
+ sensitive operations using its own permissions.
+ </p>
+
+ <p>Being a framework, Gemini Blueprint needs to introspect bundles to determine their content and configuration. In general, it is recommended to grant
+ <code class="classname">java.security.AllPermission</code> to Gemini Blueprint bundles. For those that would like to restrict the properties, below you can find a list
+ of permissions that are needed for Gemini Blueprint to work properly. However, we <span class="emphasis"><em>strongly</em></span> recommend to test whether the permissions are needed or
+ not for your environment since the minimum number depends heavily on what parts of the framework are used.
+ </p>
+
+ <div class="table"><a name="spring-dm-permission-table"></a><p class="title"><b>Table&nbsp;A.1.&nbsp;Gemini Blueprint Permission Table</b></p><div class="table-contents">
+
+
+ <table class="table" summary="Gemini Blueprint Permission Table" width="100%" border="1"><colgroup><col class="c1"><col class="c2"><col class="c3"><col class="c4"></colgroup><thead><tr><th>Permission</th><th>Target</th><th>Action</th><th>Usage</th></tr></thead><tbody><tr><td><code class="classname">java.io.FilePermission</code></td><td><span class="emphasis"><em>depends</em></span>, &lt;&lt;ALL FILES&gt;&gt; recommended</td><td>read/write</td><td>Required by the logging system and web extender for installing the wars and JSP taglibs</td></tr><tr><td><code class="classname">java.lang.RuntimePermission</code></td><td>*</td><td>accessDeclaredMembers</td><td>Used in some cases for reflection (such as accessing the <code class="interfacename">BundleContext</code> from a
+ given <code class="interfacename">Bundle</code> (on R4.0 platforms).</td></tr><tr><td><code class="classname">java.lang.reflect.ReflectPermission</code></td><td>*</td><td>suppressAccessChecks</td><td>Used for accessing (through reflection) non-public methods or fields internally.</td></tr><tr><td><code class="classname">java.util.PropertyPermission</code></td><td>*</td><td>read,write</td><td>In use by the testing framework mainy. Useful for reading the environment, including OSGi properties.</td></tr><tr><td><code class="classname">org.osgi.framework.AdminPermission</code></td><td>*</td><td>class, execute, listener, metadata, resolve, resource</td><td>Used by the extender to listen read the content of started bundles.</td></tr><tr><td><code class="classname">org.osgi.framework.BundlePermission</code></td><td>*</td><td>HOST</td><td>Useful when attaching a custom configuration (as fragment) to the extender/web extender.</td></tr><tr><td><code class="classname">org.osgi.framework.PackagePermission</code></td><td>*</td><td>EXPORT, IMPORT</td><td>Basic permission used for importing and exporting the Gemini Blueprint bundles content.</td></tr><tr><td><code class="classname">org.osgi.framework.ServicePermission</code></td><td>*</td><td>get,register</td><td>Used for publishing and lookup of Gemini Blueprint internal services (such as the Spring namespace handlers/resolvers).</td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>Note that as of Gemini Blueprint 1.0, the extender will use the target bundle permissions for all actions executed on its behalf. That is, loading of
+ classes, publishing the services, importing packages or the method invocations are executed using the bundle credentials just as if the user bundle
+ would </p>
+
+ <p>As a general recommendation, for security sensible environments, to determine the minimum number of permissions start with a basic set of bundles
+ and no permissions. This way, on each run, one can find out what permissions are needed and by whom and tweak the system accordingly.</p>
+</div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendixes.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="appendix-pde-integration.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part&nbsp;IV.&nbsp;Appendixes&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;Appendix&nbsp;B.&nbsp;Eclipse Plug-in Development integration</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/appendix-tips.html b/documentation/reference/3.0.0.M01/html/appendix-tips.html
new file mode 100644
index 0000000..9253503
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/appendix-tips.html
@@ -0,0 +1,70 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Appendix&nbsp;C.&nbsp;Useful OSGi tips</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="appendixes.html" title="Part&nbsp;IV.&nbsp;Appendixes"><link rel="prev" href="appendix-pde-integration.html" title="Appendix&nbsp;B.&nbsp;Eclipse Plug-in Development integration"><link rel="next" href="appendix-roadmap.html" title="Appendix&nbsp;D.&nbsp;Roadmap"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="appendix"><div class="titlepage"><div><div><h2 class="title"><a name="appendix-tips"></a>Appendix&nbsp;C.&nbsp;Useful OSGi tips</h2></div></div></div>
+
+
+
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="appendix-tips:fragments"></a>C.1.&nbsp;OSGi Fragments</h2></div></div></div>
+
+ <div class="sidebar"><div class="titlepage"><div><div><p class="title"><b>Check the target OSGi platform fragment support</b></p></div></div></div>
+
+ <p>Before using fragments, make sure the target OSGi environment supports them (and to what degree). Out of the OSGi platforms on
+ which Gemini Blueprint is tested upon, at the time of this writing, Apache Felix does not support fragments (it simply ignores them).</p>
+ </div>
+
+ <p>Part of the OSGi R4 release, <span class="emphasis"><em>fragments</em></span> are a very useful and powerful feature. A fragment is
+ <span class="quote">&#8220;<span class="quote">a bundle that is <span class="emphasis"><em>attached</em></span> to a <span class="emphasis"><em>host bundle</em></span></span>&#8221;</span>, adding content to the target bundle.
+ A fragment cannot have its own class loader nor a bundle activator and cannot override the information already present in the host.
+ In short, through fragments, bundles can be extender with resources, classes and even manifest entries. To quote the spec again,
+ a <span class="quote">&#8220;<span class="quote">...key use case for fragments is providing translation files for different locales. This allows the translation files to be
+ treated and shipped independently from the main application bundle.</span>&#8221;</span></p>
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">For a full description on fragments, please see the OSGi specification, section 3.14.</td></tr></table></div>
+
+ <p>In Gemini Blueprint, fragments are useful for configuring various components such as the extenders. To do that, simply bundle the resources as you
+ normally would and add an extra entry to the bundle manifest:</p>
+
+ <pre class="programlisting">Fragment-Host: &lt;host bundle symbolic name&gt;</pre>
+
+ <p>This line indicates that the containing bundle is a fragment and that it should be attached to the host specified by a symbolic name. The fragment
+ and host bundle symbolic name should be different. For example, to attach a fragment (with extra configuration) the Gemini Blueprint extender, one could use
+ the following manifest:</p>
+
+ <div class="programlistingco"><pre class="programlisting">Manifest-Version: 1.0 <span class="co" id="appendix-tips:fragments.example.mv"><img src="images/callouts/1.png" alt="(1)"></span>
+Bundle-ManifestVersion: 2 <span class="co" id="appendix-tips:fragments.example.bmv"><img src="images/callouts/2.png" alt="(2)"></span>
+Fragment-Host: org.eclipse.gemini.blueprint.extender <span class="co" id="appendix-tips:fragments.example.fh"><img src="images/callouts/3.png" alt="(3)"></span>
+Bundle-SymbolicName: org.mydomain.project.fragment <span class="co" id="appendix-tips:fragments.example.bsn"><img src="images/callouts/4.png" alt="(4)"></span>
+Bundle-Name: my-fragment <span class="co" id="appendix-tips:fragments.example.bn"><img src="images/callouts/5.png" alt="(5)"></span>
+Bundle-Description: Fragment attached to Gemini Blueprint extender <span class="co" id="appendix-tips:fragments.example.bd"><img src="images/callouts/6.png" alt="(6)"></span>
+</pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p>Manifest version.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>OSGi bundle version. A value of <code class="literal">1</code> (which is also the default) indicates an OSGi Release 3 bundle so it's best to
+ specify <code class="literal">2</code> to indicate an OSGi Release 4 bundle.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/3.png" alt="3" border="0"></span></p></td><td valign="top" align="left">
+ <p>The symbolic name of the bundle to which this fragment should be attached to. In this case, the value
+ <code class="literal">org.eclipse.gemini.blueprint.extender</code> points to the <code class="literal">spring-osgi-extender.jar</code>.
+ <code class="literal">Fragment-Host</code> is the <span class="emphasis"><em>key</em></span> entry which tells the OSGi platform that the containing bundle is a of a
+ special kind - it's a fragment.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/4.png" alt="4" border="0"></span></p></td><td valign="top" align="left">
+ <p>The fragment symbolic name.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/5.png" alt="5" border="0"></span></p></td><td valign="top" align="left">
+ <p>The bundle name - an optional yet useful header.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/6.png" alt="6" border="0"></span></p></td><td valign="top" align="left">
+ <p>The bundle description - just like the name, this header is useful for humans not for the OSGi platform itself. However, it is
+ recommended that you define it to help identify the bundle purpose.</p>
+ </td></tr></table></div></div>
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">The Manifest entries order does not matter, but they case sensitive.</td></tr></table></div>
+
+ <p>When multiple bundles with the same symbolic names are present, one can add the bundle version to make sure the proper wiring is done:</p>
+
+ <pre class="programlisting">Fragment-Host: org.eclipse.gemini.blueprint.extender;bundle-version=1.1.0</pre>
+
+ <p>The default value for <code class="literal">bundle-version</code> (when it's not specified) is <code class="literal">[0.0.0,&#8734;)</code></p>
+
+ </div>
+
+</div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix-pde-integration.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="appendix-roadmap.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix&nbsp;B.&nbsp;Eclipse Plug-in Development integration&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;Appendix&nbsp;D.&nbsp;Roadmap</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/appendixes.html b/documentation/reference/3.0.0.M01/html/appendixes.html
new file mode 100644
index 0000000..7500477
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/appendixes.html
@@ -0,0 +1,46 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Part&nbsp;IV.&nbsp;Appendixes</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="prev" href="links.html" title="Chapter&nbsp;13.&nbsp;Useful Links"><link rel="next" href="appendix-security.html" title="Appendix&nbsp;A.&nbsp;Security Integration"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="part"><div class="titlepage"><div><div><h1 class="title"><a name="appendixes"></a>Part&nbsp;IV.&nbsp;Appendixes</h1></div></div></div>
+
+ <div class="partintro"><div><div><div><h1 class="title"><a name="d21e3113"></a>Document structure</h1></div></div></div>
+
+
+ <p>
+ Various appendixes outside the reference documentation.
+ </p>
+
+ <p><a class="xref" href="appendix-security.html" title="Appendix&nbsp;A.&nbsp;Security Integration">Appendix&nbsp;A, <i>Security Integration</i></a> provides information on how to run Gemini Blueprint
+ in an OSGi environment with a <code class="classname">SecurityManager</code> enabled
+ (Java 2 Security activated).
+ </p>
+
+ <p><a class="xref" href="appendix-pde-integration.html" title="Appendix&nbsp;B.&nbsp;Eclipse Plug-in Development integration">Appendix&nbsp;B, <i>Eclipse Plug-in Development integration</i></a> describes how to integrate Gemini Blueprint
+ with Eclipse Plug-in Development Environment.</p>
+
+ <p><a class="xref" href="">???</a> describes the Gemini Blueprint Maven 2 archetype
+ usage.</p>
+
+ <p><a class="xref" href="appendix-tips.html" title="Appendix&nbsp;C.&nbsp;Useful OSGi tips">Appendix&nbsp;C, <i>Useful OSGi tips</i></a> provides some useful OSGi tips, especially
+ meaningful when used along with Gemini Blueprint.</p>
+
+ <p><a class="xref" href="appendix-roadmap.html" title="Appendix&nbsp;D.&nbsp;Roadmap">Appendix&nbsp;D, <i>Roadmap</i></a> describes some features that are included in
+ the 1.0 distribution but are still considered early-access. The
+ externals of these features may change in future releases. This appendix
+ also discusses other planned features for which no implementation yet
+ exists.</p>
+
+ <p><a class="xref" href="appendix-osgi-repo.html" title="Appendix&nbsp;E.&nbsp;Gemini Blueprint OSGi Repository">Appendix&nbsp;E, <i>Gemini Blueprint OSGi Repository</i></a> describes the repository used by Gemini Blueprint
+ for its osgi artifacts.</p>
+
+ <p><a class="xref" href="appendix-schema.html" title="Appendix&nbsp;F.&nbsp;Gemini Blueprint Schema">Appendix&nbsp;F, <i>Gemini Blueprint Schema</i></a> defines the schemas provided by Spring Dynamic
+ Modules.</p>
+ </div>
+
+
+
+
+
+
+
+ </div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="links.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="appendix-security.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;13.&nbsp;Useful Links&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;Appendix&nbsp;A.&nbsp;Security Integration</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/blueprint.html b/documentation/reference/3.0.0.M01/html/blueprint.html
new file mode 100644
index 0000000..91fe881
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/blueprint.html
@@ -0,0 +1,153 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Chapter&nbsp;6.&nbsp;OSGi 4.2 Blueprint Container</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="reference.html" title="Part&nbsp;II.&nbsp;Reference Documentation"><link rel="prev" href="reference.html" title="Part&nbsp;II.&nbsp;Reference Documentation"><link rel="next" href="bnd-app-ctx.html" title="Chapter&nbsp;7.&nbsp;Bundles and Application Contexts"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="blueprint"></a>Chapter&nbsp;6.&nbsp;OSGi 4.2 Blueprint Container</h2></div></div></div>
+
+
+ <p>Based on the Gemini Blueprint programming model, the OSGi Alliance introduced in OSGi 4.2 Release
+ the Blueprint Container specification (part of the Compendium Service). Gemini Blueprint 1.0 serves as
+ the Blueprint Reference <a class="ulink" href="http://en.wikipedia.org/wiki/Reference_implementation" target="_top">Implementation</a>
+ - the official, complete implementation of the spec.
+ </p>
+ <p>Existing and new users have the freedom to mix and match the programming model they want, since Eclipse Gemini Blueprint supports
+ both the Spring DM 1.x declarations and the Blueprint one, inside the same application, provided the default namespace is Blueprint
+ and the Blueprint files are stored in the folder <code class="literal">META-INF/spring</code>.
+ </p>
+
+ <p>Please note that this documentation will focus on Gemini Blueprint specific configurations and options; for Blueprint specific
+ behaviour please refer to the OSGi 4.2 Compendium spec, section 121.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="blueprint:requirements"></a>6.1.&nbsp;Blueprint Requirements</h2></div></div></div>
+
+ <p>The Blueprint Container spec is part of the OSGi 4.2 release and relies on it, in its API. Thus,
+ in order to use Blueprint, one must use an OSGi 4.2 compatible platform as a runtime environment. Gemini Blueprint itself
+ requires only an OSGi 4.0 framework so if 4.2 is not an option, one can safely downgrade at the loss of the Blueprint
+ model which can be built on top of Spring/Gemini Blueprint.
+ </p>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">On environments prior to OSGi 4.2, Gemini Blueprint will disable the Blueprint functionality automatically - users will be notified
+ through a log message similar to the following:
+
+ <pre class="screen">Pre-4.2 OSGi platform detected; disabling Blueprint Container functionality</pre>
+
+ </td></tr></table></div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="blueprint:differences"></a>6.2.&nbsp;Blueprint/Gemini Blueprint Differences</h2></div></div></div>
+
+ <p>There are a lot of similarities in terms of functionality and configuration between Gemini Blueprint 1.x and Blueprint which should be
+ no surprise considering that Spring DM was the basis of the Blueprint spec. In addition to fully supporting the Blueprint configuration schema,
+ DM 2.x enhanced its declarations by providing option that allow for Blueprint specific behaviour. The table below aggregates the most
+ important user facing differences between Spring/Gemini Blueprint configurations and Blueprint. Additional comparison information is available
+ throughout the documentation (such as <a class="xref" href="app-deploy.html#app-deploy:headers:blueprint" title="8.2.&nbsp;Blueprint Manifest Configuration Comparison">Section&nbsp;8.2, &#8220;Blueprint Manifest Configuration Comparison&#8221;</a> or <a class="xref" href="service-registry.html#service-registry:export:blueprint" title="9.1.10.2.&nbsp;Blueprint service Comparison">Section&nbsp;9.1.10.2, &#8220;Blueprint <code class="literal">service</code> Comparison&#8221;</a>).
+ Again, one can simply switch between the two definition styles, if need be.</p>
+
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="blueprint:differences:xml"></a>6.2.1.&nbsp;XML Declarations</h3></div></div></div>
+
+
+ <p>Most of the XML declarations are similar between Spring and Blueprint. Using the Spring
+ <a class="ulink" href="http://static.springsource.org/spring/docs/2.5.x/reference/new-in-2.html#new-in-2-ioc-configuration" target="_top">namespace</a> mechanism,
+ the same configuration can contain both Spring, Gemini Blueprint, Blueprint and other namespaces. Moreover, custom elements can be used for virtually
+ all elements of a Spring configuration (namespace, bean declaration, decoration, etc...). The table below focuses <span class="emphasis"><em>only</em></span>
+ on the usual, standard Spring namespaces and their Blueprint equivalent.</p>
+
+ <div class="table"><a name="spring-vs-blueprint-xml"></a><p class="title"><b>Table&nbsp;6.1.&nbsp;XML Configuration Differences</b></p><div class="table-contents">
+
+ <table class="table" summary="XML Configuration Differences" width="100%" border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Element/Attribute</th><th>Gemini Blueprint</th><th>Blueprint</th></tr></thead><tbody><tr><td>Namespace Declaration</td><td><p><code class="literal">http://www.springframework.org/schema/beans</code></p>
+ <p>or <code class="literal">http://www.springframework.org/schema/osgi</code></p></td><td><code class="literal">http://www.osgi.org/xmlns/blueprint/v1.0.0</code></td></tr><tr><td>Root Element</td><td><code class="literal">&lt;beans&gt;</code></td><td><code class="literal">&lt;blueprint&gt;</code></td></tr><tr><td>Default Lazy</td><td><code class="literal">default-lazy</code></td><td><code class="literal">default-activation</code></td></tr><tr><td>Default Init Method</td><td><code class="literal">default-init-method</code></td><td><code class="literal">-</code></td></tr><tr><td>Default Destroy Method</td><td><code class="literal">default-destroy-method</code></td><td><code class="literal">-</code></td></tr><tr><td>Default Autowire Strategy</td><td><code class="literal">default-autowire</code>, <code class="literal">default-autowire-candidates</code></td><td><code class="literal">-</code></td></tr><tr><td>Root Element</td><td><code class="literal">&lt;beans&gt;</code></td><td><code class="literal">&lt;blueprint&gt;</code></td></tr><tr><td>Bean ID</td><td><code class="literal">id</code></td><td><code class="literal">id</code></td></tr><tr><td>Bean Name/Alias</td><td><code class="literal">name</code>/<code class="literal">&lt;alias&gt;</code></td><td><code class="literal">-</code></td></tr><tr><td>Bean Class</td><td><code class="literal">class</code></td><td><code class="literal">class</code></td></tr><tr><td>Bean Scope Name</td><td><code class="literal">scope</code></td><td><code class="literal">scope</code></td></tr><tr><td>Built-in Scopes</td><td><code class="literal">singleton</code>, <code class="literal">prototype</code>, <code class="literal">request</code>, <code class="literal">session</code>, <code class="literal">bundle</code></td><td><code class="literal">singleton</code>, <code class="literal">prototype</code></td></tr><tr><td>Lazy Initialization Name/Values</td><td><code class="literal">lazy-init</code>=<code class="literal">true/false</code></td><td><code class="literal">activation</code>=<code class="literal">lazy/eager</code></td></tr><tr><td>Depends</td><td><code class="literal">depends-on</code></td><td><code class="literal">depends-on</code></td></tr><tr><td>Init Method</td><td><code class="literal">init-method</code></td><td><code class="literal">init-method</code></td></tr><tr><td>Destroy Method</td><td><code class="literal">destroy-method</code></td><td><code class="literal">destroy-method</code></td></tr><tr><td>Factory Method</td><td><code class="literal">factory-method</code></td><td><code class="literal">factory-method</code></td></tr><tr><td>Factory Bean</td><td><code class="literal">factory-bean</code></td><td><code class="literal">factory-ref</code></td></tr><tr><td>Bean Inheritance</td><td><code class="literal">parent</code></td><td><code class="literal">-</code></td></tr><tr><td>Autowire Strategy</td><td><code class="literal">autowire</code>, <code class="literal">autowire-candidate</code></td><td><code class="literal">-</code></td></tr><tr><td>Constructor</td><td><code class="literal">&lt;constructor-arg&gt;</code></td><td><code class="literal">&lt;argument&gt;</code></td></tr><tr><td>Property</td><td><code class="literal">&lt;property&gt;</code></td><td><code class="literal">&lt;property&gt;</code></td></tr><tr><td>Value</td><td><code class="literal">&lt;value&gt;</code></td><td><code class="literal">&lt;value&gt;</code></td></tr><tr><td>Service Exporter</td><td><code class="literal">&lt;service&gt;</code></td><td><code class="literal">&lt;service&gt;</code></td></tr><tr><td>Service Importer</td><td><code class="literal">&lt;reference&gt;/&lt;list&gt;/&lt;set&gt;</code></td><td><code class="literal">&lt;reference&gt;/&lt;list&gt;</code></td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>The configurations below are equivalent in terms of functionality:</p>
+
+ <pre class="programlisting"><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-directive">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;blueprint</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.osgi.org/xmlns/blueprint/v1.0.0"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default-activation</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"lazy"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"object"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.Object"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"length"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.Integer"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;argument</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"4"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"buffer"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.StringBuffer"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">depends-on</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"simple"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"length"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"length"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"current-time"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.System"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">factory-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"currentTimeMillis"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">scope</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"prototype"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"list"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.util.ArrayList"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">destroy-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"clear"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">activation</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"eager"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;argument</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"length"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/blueprint&gt;</strong></pre>
+ <pre class="programlisting"><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-directive">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:xsi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xsi:schemaLocation</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default-lazy-init</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"true"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"object"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.Object"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"length"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.Integer"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;constructor-arg</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"4"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"buffer"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.StringBuffer"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">depends-on</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"simple"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"length"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"length"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"current-time"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.System"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">factory-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"currentTimeMillis"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">scope</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"prototype"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"list"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.util.ArrayList"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">destroy-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"clear"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">lazy-init</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"false"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;constructor-arg</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"length"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/beans&gt;</strong></pre>
+
+ <p>As mentioned before, in Gemini Blueprint one can mix and match the namespaces provided the default namespace is Blueprint
+ and the Blueprint files are stored in the folder <code class="literal">META-INF/spring</code>:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;blueprint</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.osgi.org/xmlns/blueprint/v1.0.0"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:beans</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:xsi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xsi:schemaLocation</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"
+ http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans:bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"anInteger"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.Integer"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans:constructor-arg</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"10"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/beans:bean&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"anInteger"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.Comparable"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/blueprint&gt;</strong></pre>
+
+ <p>The example above uses the Gemini Blueprint and Spring <code class="literal">beans</code> namespaces.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="blueprint:differences:container"></a>6.2.2.&nbsp;Container Capabilities</h3></div></div></div>
+
+
+ <p>From a container perspective, the Blueprint spec standardizes the a subset of the Spring container. A high-level view comparison, by no
+ means comprehensive, is summarized in the table below:</p>
+
+ <div class="table"><a name="spring-vs-blueprint-container"></a><p class="title"><b>Table&nbsp;6.2.&nbsp;Container Capabilities Differences</b></p><div class="table-contents">
+
+ <table class="table" summary="Container Capabilities Differences" width="100%" border="1"><colgroup><col class="c1"><col class="c2"><col class="c3"></colgroup><thead><tr><th>Feature</th><th>Gemini Blueprint</th><th>Blueprint</th></tr></thead><tbody><tr><td colspan="3" align="center"><span class="emphasis"><em>Object Instantiation</em></span></td></tr><tr><td>Constructor Instantiation</td><td>Y</td><td>Y</td></tr><tr><td>Static Factory Instantiation</td><td>Y</td><td>Y</td></tr><tr><td>Instance Factory Instantiation</td><td>Y</td><td>Y</td></tr><tr><td colspan="3" align="center"><span class="emphasis"><em>Dependency Injection</em></span></td></tr><tr><td>Constructor Injection</td><td>Y</td><td>Y</td></tr><tr><td>Setter Injection</td><td>Y</td><td>Y</td></tr><tr><td>Field Injection</td><td>Y</td><td>N</td></tr><tr><td>Method Injection</td><td>Y</td><td>N</td></tr><tr><td>Arbitrary Method Injection</td><td>Y</td><td>N</td></tr><tr><td>Autowiring</td><td>Y</td><td>N</td></tr><tr><td colspan="3" align="center"><span class="emphasis"><em>Component Lifecycle</em></span></td></tr><tr><td>Lazy Initialization</td><td>Y</td><td>Y</td></tr><tr><td>Bean Scopes</td><td>Y</td><td>Y</td></tr><tr><td>Custom Bean Scopes</td><td>Y</td><td>N</td></tr><tr><td>Built-in Callbacks</td><td>Y</td><td>N</td></tr><tr><td>Custom Callbacks</td><td>Y</td><td>Y</td></tr><tr><td>Initialization Processing</td><td>Y</td><td>N</td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>As with the XML configuration, since Gemini Blueprint translates the Blueprint configuration into Spring metadata, one can rely on Spring for features
+ beyond the Blueprint container. For example, one can configure a bean using Blueprint and use annotation on the same instance, for field injection.
+ The same object can implement Spring's <code class="literal">Aware</code> interfaces or rely on other post processors for certain behaviour.</p>
+ </div>
+
+ <p>Note that additional information on Blueprint is available through out the documentation. These being said, it is highly recommended to read
+ and use the Blueprint specification as guidance, if the Blueprint Container becomes the programming model of choice.</p>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="blueprint:using"></a>6.3.&nbsp;Using Blueprint</h2></div></div></div>
+
+ <p>There are no extra jars or steps that need to be executed to <span class="emphasis"><em>enable</em></span> the Blueprint functionality in Gemini Blueprint.
+ This is built directly into the core, in fact the Blueprint APIs are exported by the Gemini Blueprint core. Please see the next section for
+ information on how to install Gemini Blueprint and the OSGi compendium spec (section 121) for Blueprint related information such as bootstrapping
+ and configuration locations. For those in a hurry, simply install and start the Gemini Blueprint jars (io, core, extender) and their dependencies
+ (namely Spring and slf4j) and you should be all set: Gemini Blueprint will automatically detect the running environment and the types of bundles started.
+ </p>
+ </div>
+</div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="reference.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="bnd-app-ctx.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part&nbsp;II.&nbsp;Reference Documentation&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;7.&nbsp;Bundles and Application Contexts</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/bnd-app-ctx.html b/documentation/reference/3.0.0.M01/html/bnd-app-ctx.html
new file mode 100644
index 0000000..6c5ca75
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/bnd-app-ctx.html
@@ -0,0 +1,365 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Chapter&nbsp;7.&nbsp;Bundles and Application Contexts</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="reference.html" title="Part&nbsp;II.&nbsp;Reference Documentation"><link rel="prev" href="blueprint.html" title="Chapter&nbsp;6.&nbsp;OSGi 4.2 Blueprint Container"><link rel="next" href="app-deploy.html" title="Chapter&nbsp;8.&nbsp;Packaging and Deploying Spring-based OSGi applications"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="bnd-app-ctx"></a>Chapter&nbsp;7.&nbsp;Bundles and Application Contexts</h2></div></div></div>
+
+
+ <p>The unit of deployment (and modularity) in OSGi is the <span class="emphasis"><em>bundle</em></span> (see
+ section 3.2 of the OSGi Service Platform Core Specification). A bundle
+ known to the OSGi runtime is in one of three steady states: installed,
+ resolved, or active. Bundles may export services (objects) to the OSGi
+ service registry, and by so doing make these services available for other
+ bundles to discover and to use. Bundles may also export Java packages,
+ enabling other bundles to import the exported types.</p>
+
+ <p>In Spring the primary unit of modularity is an <span class="emphasis"><em>application context</em></span>,
+ which contains some number of beans (objects managed by the Spring
+ application context). Application contexts can be configured in a
+ hierarchy such that a child application context can see beans defined in a
+ parent, but not vice-versa. The Spring concepts of exporters and factory
+ beans are used to export references to beans to clients outside of the
+ application context, and to inject references to services that are defined
+ outside of the application context.</p>
+
+ <p>There is a natural affinity between an OSGi bundle and a Spring
+ application context. Using Gemini Blueprint, an active bundle may
+ contain a Spring application context, responsible for the instantiation,
+ configuration, assembly, and decoration of the objects (beans) within the
+ bundle. Some of these beans may optionally be exported as OSGi services
+ and thus made available to other bundles; beans within the bundle may also
+ be transparently injected with references to OSGi services.</p>
+
+ <p>This chapter describes the lifecycle relationship between bundles and their
+ application contexts, as imposed by Gemini Blueprint based on the events occurring at runtime,
+ inside an OSGi environment.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="bnd-app-ctx:extender"></a>7.1.&nbsp;The Gemini Blueprint Extender Bundle</h2></div></div></div>
+
+
+ <div class="sidebar"><a name="extender-pattern"></a><div class="titlepage"><div><div><p class="title"><b>Extender Pattern</b></p></div></div></div>
+
+ <p>A common pattern in OSGi applications is the <span class="emphasis"><em>extender</em></span>, that
+ (quoting <a class="ulink" href="http://www.aqute.biz/Blog/HomePage" target="_top">Peter Kriens</a>,
+ OSGi Technical Director), <span class="quote">&#8220;<span class="quote">allows other bundles to extend the functionality in a specific domain</span>&#8221;</span>.
+ See <a class="ulink" href="http://www.osgi.org/blog/2007/02/osgi-extender-model.html" target="_top">this</a> OSGi Alliance blog
+ entry for an in-depth explanation.
+ </p>
+ </div>
+
+ <p>The component responsible for detecting the <span class="emphasis"><em>Spring-powered bundles</em></span> and instantiating
+ their application context is the Gemini Blueprint <span class="emphasis"><em>extender</em></span>. It serves the same purpose as the <a class="ulink" href="http://static.springframework.org/spring/docs/2.5.x/reference/webintegration.html" target="_top">ContextLoaderListener</a>
+ does for Spring web applications. Once the extender bundle is installed
+ and started it looks for any existing Spring-powered bundles that are
+ already in the <span class="emphasis"><em>ACTIVE</em></span> state and creates application contexts on their
+ behalf. In addition, it listens for bundle starting events and
+ automatically creates an application context for any Spring-powered
+ bundle that is subsequently started. <a class="xref" href="app-deploy.html#app-deploy:headers" title="8.1.&nbsp;Bundle Format And Manifest Headers">Section&nbsp;8.1, &#8220;Bundle Format And Manifest Headers&#8221;</a>
+ describes what the extender recognizes as a "Spring-powered bundle" while
+ <a class="xref" href="app-deploy.html#app-deploy:extender-configuration" title="8.3.&nbsp;Extender Configuration Options">Section&nbsp;8.3, &#8220;Extender Configuration Options&#8221;</a> how the extender can be configured.
+ The extender monitors the lifecycle of the bundle it manages and will destroy automatically the contexts for bundles
+ that are stopped. When the extender bundle itself is stopped, it will automatically close all the contexts that it manages,
+ based on the service dependency between them.
+ The extender bundle symbolic name is <code class="literal">org.eclipse.gemini.blueprint.extender</code>. </p>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="bnd-app-ctx:app-creation"></a>7.2.&nbsp;Application Context Creation</h2></div></div></div>
+
+
+ <p>Once started, the extender analyses the existing started bundles and monitors any new bundle that will start. Once a
+ Blueprint or Gemini Blueprint configuration is detected, the extender will create an application context for it in an asynchronous manner,
+ on a different thread then the one starting the bundle (or delivering the STARTED event).
+ This behaviour follows the OSGi specification recommendation and ensures that starting an OSGi Service Platform is fast and that
+ bundles with service inter-dependencies do not cause deadlock (waiting for each other) on startup, as pictured below: </p>
+
+
+ <div class="mediaobject" align="center"><img src="images/start-diagram.png" align="middle" alt="Application Context Sequence Diagram"></div>
+
+ <p>The extender considers only bundles successfully started, that is, bundles in
+ <span class="emphasis"><em>ACTIVE</em></span> state; bundles in other states are ignored.
+ Therefore a Spring-powered/Blueprint bundle will have its application context created <span class="emphasis"><em>after</em></span>
+ it has been fully started. It is possible to force synchronous/serialized creation of application contexts
+ for started bundles, on a bundle-by-bundle basis. See <a class="xref" href="app-deploy.html#app-deploy:headers" title="8.1.&nbsp;Bundle Format And Manifest Headers">Section&nbsp;8.1, &#8220;Bundle Format And Manifest Headers&#8221;</a> for information
+ on how to specify this behaviour.</p>
+
+ <p>If application context creation fails for any reason then the
+ failure cause is logged. The bundle remains in the ACTIVE state; the application context lifecycle will not influence
+ the bundle lifecycle in anyway. Naturally, since the context has failed, so will the functionality associated with it;
+ for example there will be no services exported to the registry from the application context in this scenario.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="bnd-app-ctx:app-creation:mandatory-deps"></a>7.2.1.&nbsp;Mandatory Service Dependencies</h3></div></div></div>
+
+
+ <p>If an application context declares mandatory availability for certain
+ imported OSGi services, the creation of the application context is blocked
+ until all the mandatory dependencies can be satisfied through matching services
+ available in the OSGi service registry. In practice, for most enterprise applications
+ built using Gemini Blueprint services, the set of available
+ services and bundles will reach a steady state once the platform and
+ its installed bundles are all started. In such a world, the behaviour of
+ waiting for mandatory dependencies simply ensures that bundles A and
+ B, where bundle A depends on services exported by bundle B, may be
+ started in any order.</p>
+
+ <p>A timeout applies to the wait for mandatory dependencies to be
+ satisfied. By default the timeout is set to 5 minutes, but this value
+ can be configured using the <code class="literal">timeout</code> directive. See
+ <a class="xref" href="app-deploy.html#app-deploy:headers" title="8.1.&nbsp;Bundle Format And Manifest Headers">Section&nbsp;8.1, &#8220;Bundle Format And Manifest Headers&#8221;</a> for details.</p>
+
+ <p>Blueprint users could achieve the same result through the <code class="literal">blueprint.timeout</code>
+ attribute declared on the <code class="literal">Bundle-SymbolicName</code></p>
+
+ <p>It is possible to change the application context creation
+ semantics so that application context creation fails if all mandatory
+ services are not immediately available upon startup (see the aforementioned
+ section for more information).
+ Again, note that regardless of the configuration chosen, the failure of the
+ application context will not change the bundle state.</p>
+
+ <p>For more information on the <span class="emphasis"><em>availability</em></span> of imported services,
+ see <a class="xref" href="service-registry.html#service-registry:refs:availability" title="9.2.2.&nbsp;Imported Service Availability">Section&nbsp;9.2.2, &#8220;Imported Service Availability&#8221;</a></p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="bnd-app-ctx:app-creation:app-ctx-publication"></a>7.2.2.&nbsp;Application Context Service Publication</h3></div></div></div>
+
+
+ <p>Once the application context creation for a bundle has
+ completed, the application context object is automatically exported as
+ a service available through the OSGi Service Registry. The context is
+ published under the interface
+ <code class="interfacename">org.springframework.context.ApplicationContext</code> (and
+ also all of the visible super-interfaces and types implemented by the
+ context). The published service has a service property named
+ <code class="literal">org.springframework.context.service.name</code> whose
+ value is set to the bundle symbolic name of the bundle hosting the
+ application context. In case of a Blueprint bundle, the container will be published
+ under <code class="interfacename">org.osgi.service.blueprint.container.BlueprintContainer</code>
+ while the bundle symbolic name will be published under <code class="literal">osgi.blueprint.container.symbolicname</code>
+ property.
+ </p>
+ <p>It is possible to prevent publication of the
+ application context as a service using a directive in the bundle's
+ manifest. See <a class="xref" href="app-deploy.html#app-deploy:headers" title="8.1.&nbsp;Bundle Format And Manifest Headers">Section&nbsp;8.1, &#8220;Bundle Format And Manifest Headers&#8221;</a> for details.</p>
+
+ <p>Note: the application context is published as a service
+ primarily to facilitate testing, administration, and management.
+ Accessing this context object at runtime and invoking
+ <code class="literal">getBean()</code> or similar operations is discouraged. The
+ preferred way to access a bean defined in another application context
+ is to export that bean as an OSGi service from the defining context,
+ and then to import a reference to that service in the context that
+ needs access to the service. Going via the service registry in this
+ way ensures that a bean only sees services with compatible versions of
+ service types, and that OSGi platform dynamics are respected.</p>
+ </div>
+ </div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="bnd-app-ctx:bnd-lifecycle"></a>7.3.&nbsp;Bundle Lifecycle</h2></div></div></div>
+
+
+ <p>OSGi is a dynamic platform: bundles may be installed, started,
+ updated, stopped, and uninstalled at any time during the running of the
+ framework.</p>
+
+ <p>When an active bundle is stopped, any services it exported during
+ its lifetime are automatically unregistered and the bundle returns to
+ the resolved state. A stopped bundle should release any resources it has
+ acquired and terminate any threads. Packages exported by a stopped
+ bundle continue to be available to other bundles.</p>
+
+ <p>A bundle in the resolved state may be uninstalled: packages that
+ were exported by an uninstalled bundle continue to be available to
+ bundles that imported them (but not to newly installed bundles).A bundle
+ in the resolved state may also be updated. The update
+ process migrates from one version of a bundle to another version of the
+ same bundle.</p>
+
+ <p>Finally of course, a resolved bundle can be started, which
+ transitions it to the active state.</p>
+
+ <p>The diagram below represents the bundle states and its transitions:</p>
+
+ <div class="mediaobject" align="center"><img src="images/bundle-states.png" align="middle" alt="Bundle States"></div>
+
+
+ <p>The OSGi <code class="literal">PackageAdmin</code>
+ <code class="literal">refreshPackages</code> operation refreshes packages across
+ the whole OSGi framework or a given subset of installed bundles. During
+ the refresh, an application context in an affected bundle will be
+ stopped and restarted. After a <code class="literal">refreshPackages</code>
+ operation, packages exported by older versions of updated bundles, or
+ packages exported by uninstalled bundles, are no longer available.
+ Consult the OSGi specifications for full details.</p>
+
+ <p>When a Spring-powered or Blueprint bundle is stopped, the application context
+ created for it is automatically destroyed. All services exported by the
+ bundle will be unregistered (removed from the service registry) and the
+ normal application context tear-down life-cycle is observed
+ (<code class="interfacename">org.springframework.beans.factory.DisposableBean</code> implementors
+ and <code class="literal">destroy-method</code>
+ callbacks are invoked on beans in the context).</p>
+
+ <p>If a Spring-powered bundle that has been stopped is subsequently
+ re-started, a new application context will be created for it.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="bnd-app-ctx:osgi-resource"></a>7.4.&nbsp;The Resource Abstraction</h2></div></div></div>
+
+
+ <p>The Spring Framework defines a resource abstraction for loading
+ resources within an application context (see <a class="ulink" href="http://static.springframework.org/spring/docs/2.5.x/reference/resources.html" target="_top">Spring's
+ resource abstraction</a>). All resource loading is done through the
+ <code class="interfacename">org.springframework.core.io.ResourceLoader</code> associated with the application
+ context. The <code class="interfacename">org.springframework.core.io.ResourceLoader</code> is also
+ available to beans wishing to load resources programmatically. Resource paths with
+ explicit prefixes - such as <code class="literal">classpath:</code> - are treated uniformly
+ across all application context types (for example, web application
+ contexts and classpath-based application contexts). Relative resource
+ paths are interpreted differently based on the type of application
+ context being created. This enables easy integration testing outside
+ the ultimate deployment environment.</p>
+
+ <p>OSGi 4.0.x specification defines three different spaces from which a
+ resource can be loaded. Gemini Blueprint supports all of them through its dedicated OSGi-specific
+ application context and dedicated prefixes:</p>
+
+ <div class="table"><a name="osgi-search-strategies"></a><p class="title"><b>Table&nbsp;7.1.&nbsp;OSGi resource search strategies</b></p><div class="table-contents">
+
+ <table class="table" summary="OSGi resource search strategies" width="100%" border="1"><colgroup><col><col><col></colgroup><thead><tr><th>OSGi Search Strategy</th><th>Prefix</th><th>Explanation</th></tr></thead><tbody><tr><td>Class Space</td><td><code class="literal">classpath:</code></td><td>Searches the bundle classloader (the bundle, all imported packages and required bundles). Forces the bundle to be resolved.
+ This method has similar semantics to
+ <a class="ulink" href="http://www2.osgi.org/javadoc/r4/org/osgi/framework/Bundle.html#getResource(java.lang.String)" target="_top"><code class="literal">Bundle#getResource(String)</code></a></td></tr><tr><td>Class Space</td><td><code class="literal">classpath*:</code></td><td>Searches the bundle classloader (the bundle and all imported packages and required bundles). Forces the bundle to be resolved.
+ This method has similar semantics to
+ <a class="ulink" href="http://www2.osgi.org/javadoc/r4/org/osgi/framework/Bundle.html#getResources(java.lang.String)" target="_top"><code class="literal">Bundle#getResources(String)</code></a>
+ </td></tr><tr><td>JAR File (or JarSpace)</td><td><code class="literal">osgibundlejar:</code></td><td>Searches only the bundle jar. Provides low-level access without requiring the bundle to be resolved.</td></tr><tr><td>Bundle Space</td><td><code class="literal">osgibundle:</code></td><td>Searches the bundle jar and its attached fragments (if there are any). Does not create a class loader or force the bundle to be resolved.</td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>Please consult section 4.3.12 of the OSGi specification for an in depth explanation of the differences between them.
+ </p>
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">If no prefix is specified, the bundle space (<code class="literal">osgibundle:</code>) will be used.</td></tr></table></div>
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">Due to the OSGi dynamic nature, a bundle classpath can change during its life time (for example when dynamic imports are used). This might cause different
+ classpath <code class="interfacename">Resource</code>s to be returned when doing pattern matching based on the running environment or target platform.</td></tr></table></div>
+
+ <p>All of the regular Spring resource prefixes such as <code class="literal">file:</code> and
+ <code class="literal">http:</code> are also supported, as are the pattern matching wildcards.
+ Resources loaded using such prefixes may come from any location, they
+ are not restricted to being defined within the resource-loading bundle
+ or its attached fragments.</p>
+
+ <p>OSGi platforms may define their own unique prefixes for accessing
+ bundle contents. For example, Equinox defines the <code class="literal">bundleresource:</code> and
+ <code class="literal">bundlentry:</code> prefixes. These platform specific prefixes may also be
+ used with Gemini Blueprint, at the cost, of course, of tying yourself to a
+ particular OSGi implementation.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="bnd-app-ctx:bundle-scope"></a>7.5.&nbsp;Bundle Scope</h2></div></div></div>
+
+
+ <p>Gemini Blueprint introduces a new bean scope named <code class="literal">bundle</code>. This scope is relevant for
+ beans exported as an OSGi service and can be described as <span class="emphasis"><em>one instance per bundle</em></span>.
+ Beans exported as OSGi service, that have <code class="literal">bundle</code> scope, will result in a different instance created for
+ each unique bundle that imports the service through the OSGi service registry. Consumers of the same bundle (whether defined
+ through Gemini Blueprint or not) will see the same bean instance. When a bundle has stopped importing the bundle (for whatever reason),
+ the bean instance is disposed.
+ To the declaring bundle, a <code class="literal">bundle</code>-scoped bean behaves just like a singleton (i.e. there is only
+ one instance per bundle, including the declaring one).This contract lifecycle is similar to that of the
+ <code class="interfacename">org.osgi.framework.ServiceFactory</code> interface.</p>
+ <p>For more information regarding service publication and consumption, see <a class="xref" href="service-registry.html" title="Chapter&nbsp;9.&nbsp;The Service Registry">Chapter&nbsp;9, <i>The Service Registry</i></a>.</p>
+
+ <div class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Important"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="images/admons/important.png"></td><th align="left">Important</th></tr><tr><td align="left" valign="top">The bundle scope is relevant, only if the declaring bean is consumed through the OSGi service registry. That is,
+ instances are created and destroyed (tracked) only when the bean exported as a service, is requested or released as an OSGi service
+ by other bundles.</td></tr></table></div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="bnd-app-ctx:access-bnd-ctx"></a>7.6.&nbsp;Accessing the BundleContext</h2></div></div></div>
+
+
+ <p>In general there is no need to depend on any OSGi APIs when using
+ the Gemini Blueprint support. If you <span class="emphasis"><em>do</em></span> need
+ access to the OSGi <code class="interfacename">BundleContext</code> object for your
+ bundle, then Spring makes this easy to do.</p>
+
+ <p>The OSGi application context created by the Spring extender will
+ automatically contain a bean of type <code class="interfacename">BundleContext</code>
+ and with name <code class="literal">bundleContext</code>. You can inject a
+ reference to this bean into any bean in the application context either
+ by-name or by-type. In addition, Gemini Blueprint defines the
+ interface
+ <code class="interfacename">org.eclipse.gemini.blueprint.context.BundleContextAware</code>:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">interface</strong> BundleContextAware {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> setBundleContext(BundleContext context);
+}</pre>
+
+ <p>Any bean implementing this interface will be injected with a
+ reference to the bundle context when it is configured by Spring. If you
+ wish to use this facility within a bundle, remember to import the
+ package <code class="literal">org.eclipse.gemini.blueprint.context</code> in your
+ bundle manifest since otherwise the interface will not be visible to your bundle.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="bnd-app-ctx:app-destruction"></a>7.7.&nbsp;Application Context Destruction</h2></div></div></div>
+
+
+ <p>The application context is bound to the bundle in which it lives. Thus, if the declaring
+ bundle is being shutdown (for whatever reasons), the application context will be destroyed as well,
+ all exported services being unregistered and all service imported dispose of.
+ </p>
+
+ <p>As opposed to the application creation, the application context is destroyed in a synchronized manner,
+ on the same thread that stops the bundle. This is required since once stopped, a bundle can not longer be used
+ (even for class loading) preventing the application context shutdown from executing correctly.
+ </p>
+
+ <div class="mediaobject" align="center"><img src="images/stop-diagram.png" align="middle" alt="Application Context Sequence Diagram"></div>
+
+
+ <p>Note that a bundle can be closed individually or as part of a bigger
+ event such as shutting down the entire OSGi platform. In this case or when the extender
+ bundle is being closed down, the application contexts will be closed in a managed
+ manner, based on the service dependencies between them. Please see the next section for more
+ details.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="bnd-app-ctx:access-bnd-ctx:stop-extender"></a>7.8.&nbsp;Stopping the Extender Bundle</h2></div></div></div>
+
+
+ <div class="sidebar"><a name="shutdown-2.x"></a><div class="titlepage"><div><div><p class="title"><b>Shutdown algorithm change in 2.x</b></p></div></div></div>
+
+ <p>The shutdown algorithm implementation in Gemini Blueprint 1.0 has been revised to be better
+ aligned with the Blueprint Container spec. Namely, the previous implementation performed ordering
+ in only one pass while the latter performs multiple steps to accommodate the service changes in
+ the OSGi space. Users should not discover any differences at runtime however, if that's not the case,
+ please let us know.
+ </p>
+ </div>
+
+ <p>If the extender bundle is stopped, then all the application
+ contexts created by the extender will be destroyed. The algorithm described here is identical
+ to that used by the Blueprint specification (section 121.3.11). Application contexts
+ are shutdown in the following order:</p>
+
+ <div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
+ <p>Application contexts that do not export any services, or that
+ export services that are not currently referenced, are shutdown in
+ reverse order of bundle id. (Most recently installed bundles have
+ their application contexts shutdown first).</p>
+ </li><li class="listitem">
+ <p>Shutting down the application contexts in step 1 may have
+ released references these contexts were holding such that there are
+ now additional application contexts that can be shutdown. If so,
+ repeat <a class="link" href="bnd-app-ctx.html#bnd-app-ctx:access-bnd-ctx:stop-extender:shutdown.step.1">step 1</a> again.</p>
+ </li><li class="listitem">
+ <p>If there are no more active application contexts, we have
+ finished. If there <span class="emphasis"><em>are</em></span> active application
+ contexts then there must be a cyclic dependency of references. The
+ circle is broken by determining the highest ranking service exported
+ by each context: the bundle with the lowest ranking service in this
+ set (or in the event of a tie, the highest service id), is shut
+ down. Repeat from <a class="link" href="bnd-app-ctx.html#bnd-app-ctx:access-bnd-ctx:stop-extender:shutdown.step.1">step 1</a>.</p>
+ </li></ol></div>
+ </div>
+</div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="blueprint.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="app-deploy.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;6.&nbsp;OSGi 4.2 Blueprint Container&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;8.&nbsp;Packaging and Deploying Spring-based OSGi applications</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/bundles.html b/documentation/reference/3.0.0.M01/html/bundles.html
new file mode 100644
index 0000000..a57c404
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/bundles.html
@@ -0,0 +1,72 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Chapter&nbsp;10.&nbsp;Working With Bundles</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="reference.html" title="Part&nbsp;II.&nbsp;Reference Documentation"><link rel="prev" href="service-registry.html" title="Chapter&nbsp;9.&nbsp;The Service Registry"><link rel="next" href="compendium.html" title="Chapter&nbsp;11.&nbsp;Compendium Services"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="bundles"></a>Chapter&nbsp;10.&nbsp;Working With Bundles</h2></div></div></div>
+
+
+ <p>Gemini Blueprint offers a dedicated schema element for interacting with existing
+ bundles or for installing new ones. While it is not intended to be used as a replacement
+ for proper OSGi services, the <code class="literal">bundle</code> element offers a very
+ easy way of executing actions on bundles based on the lifecycle of the application
+ context.
+ </p>
+
+ <p>The <code class="literal">bundle</code> element defines a bean of type
+ <code class="interfacename">org.osgi.framework.Bundle</code>. It provides a simple way to
+ work directly with bundles, including driving their lifecycle. In the
+ simplest case all you need to do is specify the
+ <code class="literal">symbolic-name</code> of the bundle you are interested
+ in:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bundle</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"aBundle"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">symbolic-name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.xyz.abundle"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+
+ <p>The bean <code class="literal">aBundle</code> can now be injected into any property of
+ type <code class="interfacename">Bundle</code>.</p>
+
+ <p>If the needed bundle is not installed, one can use <code class="literal">location</code> attribute
+ to indicate install or/and the <code class="literal">action</code>/<code class="literal">destroy-action</code> attributes
+ provide declarative control over the bundle's lifecycle. The <code class="literal">location</code> attribute is
+ used to specify a URL where the bundle jar file artifact can be found. The
+ <code class="literal">action</code> attribute specifies the lifecycle operation to
+ be invoked on the bundle object. The supported action values are
+ <code class="literal">install</code>, <code class="literal">start</code>,
+ <code class="literal">update</code>, <code class="literal">stop</code>, and
+ <code class="literal">uninstall</code>. These actions have the same semantics as the
+ operations of the corresponding names defined on the
+ <code class="literal">Bundle</code> interface (see the OSGi Service Platform Core
+ Specification), with the exception that pre-conditions are weakened to
+ allow for example a <span class="emphasis"><em>start</em></span> action to be specified against a bundle that
+ is not currently installed (it will be installed first).</p>
+
+ <p>The following table shows how actions are interpreted for the given
+ Bundle states:</p>
+
+ <div class="table"><a name="bundle-factory-actions"></a><p class="title"><b>Table&nbsp;10.1.&nbsp;&lt;bundle&gt; <code class="literal">action</code> values</b></p><div class="table-contents">
+
+ <table class="table" summary="<bundle&gt; action values" width="100%" border="1"><colgroup><col><col><col><col></colgroup><thead><tr><th>Action</th><th><code class="literal">UNINSTALLED</code></th><th><code class="literal">INSTALLED/RESOLVED</code></th><th><code class="literal">ACTIVE</code></th></tr></thead><tbody><tr><td><code class="literal">START</code></td><td>installs and starts the bundle</td><td>starts the bundle</td><td>no action taken, bundle already started</td></tr><tr><td><code class="literal">UPDATE</code></td><td>installs the bundle and then updates it (`Bundle.update()`)</td><td>updates the bundle</td><td>updates the bundle</td></tr><tr><td><code class="literal">STOP</code></td><td>no action taken</td><td>no action taken</td><td>bundle is stopped</td></tr><tr><td><code class="literal">UNINSTALL</code></td><td>no action taken</td><td>bundle is uninstalled</td><td>bundle is stopped and then uninstalled</td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>For example:</p>
+
+ <pre class="programlisting"><em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- ensure this bundle is installed and started --&gt;</em>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bundle</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"aBundle"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">symbolic-name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.xyz.abundle"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">location</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.xyz.com/bundles/org.xyz.abundle.jar"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">action</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"start"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+
+
+
+ <p>The following table lists the <code class="literal">bundle</code> element attributes names,
+ possible values and a short description for each of them:
+ </p>
+
+ <div class="table"><a name="bundle-options"></a><p class="title"><b>Table&nbsp;10.2.&nbsp;&lt;bundle&gt; attributes</b></p><div class="table-contents">
+
+ <table class="table" summary="<bundle&gt; attributes" width="100%" border="1"><colgroup><col class="c1"><col align="center" class="c2"><col align="center" class="c3"><col align="center" class="c4"><col align="center" class="c5"><col align="center" class="c6"><col align="justify" class="c7"></colgroup><thead><tr><th>Name</th><th colspan="5" align="justify">Values</th><th align="justify">Description</th></tr></thead><tbody><tr><td>symbolic-name</td><td colspan="5" align="justify">any valid symbolic-name String</td><td align="justify">The symbolic name of the bundle object. Normally used when interacting with an already
+ installed bundle.</td></tr><tr><td>location</td><td colspan="5" align="justify">String that can be converted into an <code class="literal">URL</code></td><td align="justify">Location used to install, update or/and identify a bundle.</td></tr><tr><td>action</td><td align="center">start</td><td align="center">stop</td><td align="center">install</td><td align="center">uninstall</td><td align="center">update</td><td align="justify">Lifecyle action to drive on the bundle. The action is executed at startup.</td></tr><tr><td>destroy-action</td><td colspan="5" align="justify">(same as action)</td><td align="justify">Lifecyle action to drive on the bundle. The action is executed at shutdown.</td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>The samples that ship with the Gemini Blueprint project
+ include further support for a <code class="literal">virtual-bundle</code> element
+ that can be used to create and install OSGi bundles on the fly from
+ existing artifacts.</p>
+ </div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="service-registry.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="compendium.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;9.&nbsp;The Service Registry&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;11.&nbsp;Compendium Services</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/compendium.html b/documentation/reference/3.0.0.M01/html/compendium.html
new file mode 100644
index 0000000..b87f849
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/compendium.html
@@ -0,0 +1,399 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Chapter&nbsp;11.&nbsp;Compendium Services</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="reference.html" title="Part&nbsp;II.&nbsp;Reference Documentation"><link rel="prev" href="bundles.html" title="Chapter&nbsp;10.&nbsp;Working With Bundles"><link rel="next" href="testing.html" title="Chapter&nbsp;12.&nbsp;Testing OSGi based Applications"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="compendium"></a>Chapter&nbsp;11.&nbsp;Compendium Services</h2></div></div></div>
+
+
+ <p>The OSGi Service Platform Service Compendium specification defines a
+ number of additional services that may be supported by OSGi
+ implementations. Gemini Blueprint supports an additional
+ "compendium" namespace that provides integration with some of these services.
+ By convention, the prefix <code class="literal">osgix</code> is used for this
+ namespace:</p>
+
+ <div class="programlistingco"><pre class="programlisting"><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-directive">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:xsi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns</span><span class="co" id="compendium:ns:xml:uri.prefix.2"><img src="images/callouts/1.png" alt="(1)"></span><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">:bp</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.osgi.org/xmlns/blueprint/v1.0.0"</span> <span class="co" id="compendium:ns:xml:uri.prefix.1"><img src="images/callouts/1.png" alt="(1)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:context</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/context"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:util</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/util"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:task</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/task"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:compendium</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium"</span> <span class="co" id="compendium:ns:xml:uri"><img src="images/callouts/2.png" alt="(2)"></span>
+ <span class="co" id="compendium:ns:xml:uri.loc"><img src="images/callouts/3.png" alt="(3)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xsi:schemaLocation</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
+ http://www.springframework.org/schema/util
+ http://www.springframework.org/schema/util/spring-util-3.2.xsd
+ http://www.springframework.org/schema/task
+ http://www.springframework.org/schema/task/spring-task-3.2.xsd
+ http://www.osgi.org/xmlns/blueprint/v1.0.0
+ http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
+ http://www.springframework.org/schema/context
+ http://www.springframework.org/schema/context/spring-context-3.2.xsd
+ http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium
+ http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium/gemini-blueprint-compendium.xsd"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- use the OSGi namespace elements directly --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"simpleServiceOsgi"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"simpleService"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.xyz.MyService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong>
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- qualify compendium namespace elements --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;compendium:cm-properties</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"cm"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">persistent-id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.myapp"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/beans:beans&gt;</strong></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p>Compendium namespace declaration (bound to <code class="literal">osgix</code> prefix)</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>Schema location (namespace URI)</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/3.png" alt="3" border="0"></span></p></td><td valign="top" align="left">
+ <p>XML schema to use for the compendium namespace</p>
+ </td></tr></table></div></div>
+
+ <p>At present this namespace provides support for the Configuration
+ Admin service. Support for other compendium services may be added in
+ future releases.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="compendium:cm"></a>11.1.&nbsp;Configuration Admin</h2></div></div></div>
+
+
+ <p>One of the most important compendium services, is the <a class="ulink" href="http://www.osgi.org/javadoc/r4v401/org/osgi/service/cm/package-summary.html" target="_top">Configuration Admin</a>
+ which, as a name implies, provides configuration to interested bundles through the OSGi service registry. Gemini Blueprint provides dedicated support
+ for Configuration Admin (CM), allowing consumption and injection of the configuration data in a declarative way.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="compendium:cm:props"></a>11.1.1.&nbsp;Exposing Configuration Admin Entries As <code class="classname">Properties</code></h3></div></div></div>
+
+
+ <p>In its simplest form, the CM can be seen as a configuration source, namely a <code class="classname">Dictionary</code> whose
+ keys are always <code class="classname">String</code>s. Gemini Blueprint can expose entries in the CM as a <code class="classname">Properties</code> object,
+ through the <code class="literal">cm-properties</code> element. A minimal declaration looks as follows:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgix:cm-properties</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"ds.cfg"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">persistent-id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"data.source.office.1"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+
+ <p>The configuration above, exposes the properties available in the CM under <span class="emphasis"><em>data.source.office.1</em></span> entry as a bean named
+ <span class="emphasis"><em>ds.cfg</em></span>.</p>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top"><p>The <code class="literal">persistent-id</code> attribute must refer to the
+ persistent-id of an OSGi <code class="interfacename">ManagedService</code>, it is a
+ configuration error to specify a factory persistent id referring to a
+ <code class="interfacename">ManagedServiceFactory</code>.</p></td></tr></table></div>
+
+ <p>Those familiar with Spring's
+ <a class="ulink" href="http://docs.spring.io/spring/docs/4.3.x/spring-framework-reference/html/xsd-configuration.html#xsd-config-body-schemas-util" target="_top">util schema</a> will
+ find <code class="literal">&lt;osgi:cm-properties/&gt;</code> element similar to <code class="literal">&lt;util:properties/&gt;</code>.</p>
+
+ <p>It is possible to specify a default set of property values to be used in the event that the configuration dictionary does not contain
+ an entry for a given key. The declaration is similar to the <code class="literal">props</code> element inside the Spring beans namespace:</p>
+ <pre class="programlisting"><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-directive">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:xsi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:bp</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.osgi.org/xmlns/blueprint/v1.0.0"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:context</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/context"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:util</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/util"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:task</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/task"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:compendium</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium"</span>
+
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xsi:schemaLocation</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
+ http://www.springframework.org/schema/util
+ http://www.springframework.org/schema/util/spring-util-3.2.xsd
+ http://www.springframework.org/schema/task
+ http://www.springframework.org/schema/task/spring-task-3.2.xsd
+ http://www.osgi.org/xmlns/blueprint/v1.0.0
+ http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
+ http://www.springframework.org/schema/context
+ http://www.springframework.org/schema/context/spring-context-3.2.xsd
+ http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium
+ http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium/gemini-blueprint-compendium.xsd"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;compendium:cm-properties</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"cfg.with.defaults"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">persistent-id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"data.source.office.2"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans:prop</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">key</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"host"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>localhost<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/beans:prop&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans:prop</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">key</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"port"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>3306<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/beans:prop&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/compendium:cm-properties&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/beans:beans&gt;</strong></pre>
+
+ <p>By default, the properties found in the Configuration Admin entry will override the local properties. Thus, for the previous example, if the
+ <code class="literal">data.source.office.2</code> configuration contains a <span class="emphasis"><em>host</em></span> entry, its value will override the locally defined
+ <code class="literal">localhost</code>. For cases where this behaviour is undesired, the attribute <code class="literal">local-override</code>
+ (default <code class="literal">false</code>) allows one to revert the merging algorithm, forcing the local properties to override the entries in the CM.</p>
+
+ <p>Since <code class="literal">cm-properties</code> exposes the CM entries as <code class="classname">Properties</code>, it can be used with Spring's <code class="classname">
+ <a class="ulink" href="http://docs.spring.io/spring/docs/4.3.x/spring-framework-reference/html/beans.html#beans-factory-placeholderconfigurer" target="_top">PropertyPlaceholderConfigurer</a></code>
+ and <code class="classname"><a class="ulink" href="http://docs.spring.io/spring/docs/4.3.x/spring-framework-reference/html/beans.html#beans-factory-overrideconfigurer" target="_top">PropertyOverrideConfigurer</a></code>
+ to externalize and customize environment-specific properties:</p>
+
+ <pre class="programlisting"><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-directive">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:xsi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:context</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/context"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:mvc</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/mvc"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:bp</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.osgi.org/xmlns/blueprint/v1.0.0"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:compendium</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xsi:schemaLocation</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
+ http://www.osgi.org/xmlns/blueprint/v1.0.0
+ http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
+ http://www.springframework.org/schema/context
+ http://www.springframework.org/schema/context/spring-context-4.2.xsd
+ http://www.springframework.org/schema/mvc
+ http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
+ http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium
+ http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium/gemini-blueprint-compendium.xsd"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- Configuration Admin entry --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;compendium:cm-properties</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"cmProps"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">persistent-id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.myapp"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;prop</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">key</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"host"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>localhost<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/prop&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/compendium:cm-properties&gt;</strong>
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- placeholder configurer --&gt;</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;context:property-placeholder</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">properties-ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"cmProps"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"dataSource"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">...&gt;</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">&lt;property</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"host"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"${host}"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"timeout"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"${timeout}"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/beans&gt;</strong></pre>
+
+ <p>An important aspect of <code class="literal">cm-properties</code> is does <span class="emphasis"><em>not</em></span> reflect
+ any that any subsequent changes made to the entry it represents, made through the Configuration Admin API.
+ That is, once resolved, the <code class="literal">cm-properties</code> content remains the same, regardless of any updates
+ made the to CM entry it represents.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="compendium:cm:managed-properties"></a>11.1.2.&nbsp;Managed Properties</h3></div></div></div>
+
+
+ <p>Based on a configuration admin entry, Gemini Blueprint can autowire by name, the properties of a given bean. To use this feature, define
+ a nested <code class="literal">managed-properties</code> inside the bean definition:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"managedComponent"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"MessageTank"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgix:managed-properties</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">persistent-id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.messageservice"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong></pre>
+
+ <p>For each key in the dictionary stored by Configuration Admin under the given persistent id,
+ if the bean type has a property with a matching name (following JavaBeans conventions),
+ then that component property will be dependency injected with the value stored in Configuration Admin under the key.
+ If the definition of <code class="classname">SomeClass</code> from the example above is as follows:</p>
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">class</strong> MessageTank {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">private</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">int</strong> amount;
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">int</strong> getAmount() { <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">return</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">this</strong>.amount; }
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> setAmount(<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">int</strong> amount) { <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">this</strong>.amount = amount; }
+}</pre>
+ <p>and the configuration dictionary stored under the pid <code class="literal">com.xyz.messageservice</code> contains an entry
+ <code class="literal">amount=200</code>, then the <code class="literal">setAmount</code> method will be invoked on the bean
+ instance during configuration, passing in the value <code class="literal">200</code>.</p>
+ <p>If a property value is defined both in the configuration dictionary stored in the Configuration Admin service and in a
+ property element declaration nested in the component element, then the value from Configuration Admin takes precedence:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"managedComponent"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"MessageTank"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgix:managed-properties</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">persistent-id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.messageservice"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"amount"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"100"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"threshold"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"500"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong></pre>
+
+ <p>Property values specified via property elements can therefore be treated as default values to be used if none is available through
+ Configuration Admin.</p>
+
+ <div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="images/admons/warning.png"></td><th align="left">Warning</th></tr><tr><td align="left" valign="top">Do not share the same <span class="emphasis"><em>persistent-id</em></span> (PID) between multiple bundles or definitions, as <span class="emphasis"><em>only one</em></span>
+ of them will receive notifications. <code class="literal">managed-properties</code> relies on <code class="literal">org.osgi.service.cm.ManagedService</code>
+ contract which mandates that each <code class="literal">ManagedService</code> instance must be identified with its own unique PID.
+ Please see the Configuration Admin spec, specifically section 104.3 and 104.5</td></tr></table></div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="compendium:cm:managed-properties:update"></a>11.1.2.1.&nbsp;Configuration Admin Runtime Updates</h4></div></div></div>
+
+ <p>A powerful feature of Configuration Admin is the ability to update (or delete) entries at runtime. That is, the configuration data
+ stored in Configuration Admin may be updated after the bean has been created. By default, any post-creation updates will be ignored. However,
+ one can configure <code class="literal">managed-properties</code> element to receive configuration updates through the <code class="literal">autowire-on-update</code>
+ and <code class="literal">update-method</code> attributes.</p>
+
+ <p><code class="literal">update-method</code> specifies the bean method to invoke whenever an update occurs in the configuration data.
+ The update method must have one of the following signatures:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> anyMethodName(Map properties)
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> anyMethodName(Map&lt;String,?&gt; properties); <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">// for Java 5</em></pre>
+
+ <p>If <code class="literal">autowire-on-update</code> is set to <code class="literal">true</code> (default is <code class="literal">false</code>) then the container will autowire the target bean everytime an update occurs.
+ If both <code class="literal">autowire-on-update</code> and <code class="literal">update-method</code> are specified then the autowiring process will take precedence.
+ For autowiring, the component class must provide setter methods for the component properties that it wishes to have updated. Consider the following class definitions:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">class</strong> ContainerManagedBean {
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">// will be reinjected (since it has a setter)</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">private</strong> Integer integer;
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">// will not be reinjected (no setter present)</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">private</strong> Long waitTime;
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> setInteger(Integer integer) { <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">this</strong>.integer = integer; }
+}
+
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">class</strong> SelfManagedBean {
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">// update callback</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> updateCallback(Map properties) {
+ System.out.println(<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"Received properties "</em></strong> + properties);
+ System.out.println(<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"Props can be used as a Dictionary "</em></strong> + (Dictionary) properties);
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">// do more work ... </em>
+ }
+}</pre>
+
+ <p>and configuraton:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"containerManaged"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"ContainerManagedBean"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgix:managed-properties</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">persistent-id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"labX"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">autowire-on-update</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"true"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"integer"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"23"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beanManaged"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"SelfManagedBean"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgix:managed-properties</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">persistent-id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"labY"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">update-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"updateCallback"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong></pre>
+
+ <p>Any updates made to the CM entry <code class="literal">labX</code> will be automatically reinjected on existing instances of
+ <code class="literal">containerManaged</code> bean while the <code class="literal">labY</code> updates will be passed to <code class="methodname">updateCallback</code>
+ method.</p>
+
+ <p>The update options are summarized in the table below:</p>
+ <div class="table"><a name="compendium-cm-managed-properties-options"></a><p class="title"><b>Table&nbsp;11.1.&nbsp;Managed Properties Update Options</b></p><div class="table-contents">
+
+ <table class="table" summary="Managed Properties Update Options" width="100%" border="1"><colgroup><col class="c1"><col class="c2"><col class="c3"></colgroup><thead><tr><th><code class="literal">autowire-on-update</code></th><th><code class="literal">update-method</code></th><th>Behaviour</th></tr></thead><tbody><tr><td><code class="literal">true</code></td><td><span class="emphasis"><em>optional</em></span>, called after autowiring</td><td>Reinjects the bean properties, using the properties present in the update. The re-injection will be applied while locking (through
+ a <code class="literal">synchronized</code> instruction) the bean instance. If the locking or re-injection strategy is not suitable, consider using
+ the <code class="literal">update-method</code> only approach.</td></tr><tr><td><code class="literal">false</code> (default)</td><td><span class="emphasis"><em>optional</em></span></td><td>Invokes the <code class="literal">update-method</code> callback on the bean instance, passing the updated configuration (as a
+ <code class="interfacename">Map</code> object that can be safely cast to a <code class="classname">Dictionary</code> if needed). No locking is
+ performed.</td></tr></tbody></table>
+ </div></div><br class="table-break">
+ </div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="compendium:cm:managed-service-factories"></a>11.1.3.&nbsp;Managed Service Factories</h3></div></div></div>
+
+
+ <p>The Configuration Admin service supports a notion of a <span class="emphasis"><em>managed service factory</em></span>(see section 104.6 in the Compendium Specification).
+ A managed service factory is identified by a factory pid which allows <span class="emphasis"><em>multiple</em></span> <code class="interfacename">Configuration</code> objects
+ to be associated with the factory. <code class="interfacename">Configuration</code> objects associated with the factory can be added or removed at any point.
+ The main intent of a factory is to create an OSGi service for each configuration: adding a new <code class="interfacename">Configuration</code> entry results
+ in a new OSGi service being registered, removing a <code class="interfacename">Configuration</code>, unregisters the service.
+ Gemini Blueprint provides support for the <span class="emphasis"><em>managed service factory</em></span> concept through the <code class="literal">managed-service-factory</code> element. Once
+ defined, the configuration associated with the factory pid will automatically create (or remove) bean instances which will be registered (or unregistered)
+ in the OSGi space based on a <span class="emphasis"><em>template</em></span> bean definition and the CM configuration.</p>
+
+ <p>This might sound more complicated then it actually is, so let's look at a simplistic example:</p>
+ <div class="programlistingco"><pre class="programlisting">&lt;osgix:managed-service-factory id=<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"simple-msf"</em></strong>
+ factory-pid=<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"com.xyz.messageservice"</em></strong> <span class="co" id="compendium:msf:def.1:fpid"><img src="images/callouts/1.png" alt="(1)"></span>
+ auto-export=<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"all-classes"</em></strong>&gt; <span class="co" id="compendium:msf:def.1:ae"><img src="images/callouts/2.png" alt="(2)"></span>
+
+ &lt;bean <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">class</strong>=<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"com.xyz.MessageTank"</em></strong>/&gt; <span class="co" id="compendium:msf:def.1:bean.template"><img src="images/callouts/3.png" alt="(3)"></span>
+&lt;/osgix:managed-service-factory&gt;</pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p>factory persistent id (pid)</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>Shortcut flag used to determine under what interfaces the OSGi service is published (more info below)</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/3.png" alt="3" border="0"></span></p></td><td valign="top" align="left">
+ <p>bean definition <span class="emphasis"><em>template</em></span>. For each detected configuration, a new service will be created using
+ the bean definition template.</p>
+ </td></tr></table></div></div>
+
+ <p>In its simplest form, the <code class="literal">managed-service-factory</code> requires the <span class="emphasis"><em>factory pid</em></span>, a <span class="emphasis"><em>bean definition</em></span>
+ used as a template and some information on how possible bean instances are published as services. Basically, the definition above instructs
+ Gemini Blueprint to monitor the given factory pid (through a dedicated <code class="interfacename">ManagedServiceFactory</code> implementation (see the Compendium Spec for
+ more info)) and for every <code class="interfacename">Configuration</code> object associated with the factory pid, to create a new, anonymous instance of
+ the nested bean declared and export that instance as an OSGi service. The lifecycle of these beans instances is tied to the lifecycle of the
+ associated <code class="interfacename">Configuration</code> objects. If a new configuration is added, a new bean is created and exported.
+ If a configuration object is deleted or disassociated from the factory pid then the corresponding bean instance is destroyed.</p>
+
+ <p>In many regards, <code class="literal">managed-service-factory</code> acts as a specialized service exporter, similar to the
+ <a class="link" href="service-registry.html#service-registry:export" title="9.1.&nbsp;Exporting A Spring Bean As An OSGi Service"><code class="literal">service</code></a> element but supporting the concept of
+ <a class="link" href="compendium.html#compendium:cm:managed-properties" title="11.1.2.&nbsp;Managed Properties">managed properties</a>. In fact, many of
+ <code class="literal">service</code>'s attributes that indicate how a bean is exported, are found in <code class="literal">managed-service-factory</code> (as you saw in the
+ previous example with <code class="literal">auto-export</code>) as are the <code class="literal">managed-properties</code> attributes.</p>
+
+ <p>The list of attributes can be found below:</p>
+
+ <div class="table"><a name="compendium-cm-msf-options"></a><p class="title"><b>Table&nbsp;11.2.&nbsp;Managed Service Factory Options</b></p><div class="table-contents">
+
+ <table class="table" summary="Managed Service Factory Options" width="100%" border="1"><colgroup><col class="c1"><col class="c2"><col class="c3"><col class="c4"><col class="c5"><col class="c6"></colgroup><thead><tr><th align="center">Name</th><th colspan="4" align="center">Values</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">interface</td><td colspan="4" align="center">fully qualified class name (such as <code class="classname">java.lang.Thread</code>)</td><td align="center">the fully qualified name of the class under which the object will be exported</td></tr><tr><td align="center">context-class-loader</td><td colspan="2" align="center">unmanaged</td><td colspan="2" align="center">service-provider</td><td align="center">Defines how the context class loader will be managed when an operation is invoked on the
+ exported service. The default value is <code class="literal">unmanaged</code> which means that no management of
+ the context class loader is attempted. A value of <code class="literal">service-provider</code> guarantees that
+ the context class loader will have visibility of all the resources on the class path of
+ bundle exporting the service.</td></tr><tr><td align="center">auto-export</td><td align="center">disabled <code class="literal">(default)</code></td><td align="center">interfaces</td><td align="center">class-hierarchy</td><td align="center">all-classes</td><td align="center">Enables Spring to automatically manage the set of service interfaces advertised for the
+ service. By default this facility is <code class="literal">disabled</code>. A value of <code class="literal">interfaces</code> advertises all
+ of the Java interfaces supported by the exported service. A value of <code class="literal">class-hierarchy</code>
+ advertises all the Java classes in the hierarchy of the exported service. A value of
+ <code class="literal">all-classes</code> advertises all Java interfaces and classes.</td></tr><tr><td align="center">autowire-on-update</td><td colspan="2" align="center">false <code class="literal">(default)</code></td><td colspan="2" align="center">true</td><td align="center">Whether or not the container should autowire the target bean everytime an update occurs.
+ When <code class="literal">true</code> is specified, the container will perform autowire (by name) the bean instance with the
+ newly set properties. In case <code class="literal">update-method</code> attribute is used as well, the autowiring process will
+ take precedence.</td></tr><tr><td align="center">update-method</td><td colspan="2" align="center">none <code class="literal">(default)</code></td><td colspan="2" align="center">someMethod</td><td align="center">The update method to invoke whenever an update occurs in the configuration data. Allows the target
+ bean to process the update information itself. In case <code class="literal">autowire-on-update</code> is also used, the <code class="literal">update-method</code>
+ will be invoked after the autowiring takes place.</td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>Similar to the <code class="literal">service</code> element, a list of interfaces or/and registration listeners can be declared to be notified when a
+ service is being registered/unregistered. For more information on the semantics, please see <a class="xref" href="service-registry.html#service-registry:export:intfs" title="9.1.3.&nbsp;Controlling The Set Of Advertised Service Interfaces For An Exported Service">Section&nbsp;9.1.3, &#8220;Controlling The Set Of Advertised Service Interfaces For
+ An Exported Service&#8221;</a> and
+ <a class="xref" href="service-registry.html#service-registry:export:lifecycle" title="9.1.10.&nbsp;Service Registration And Unregistration Lifecycle">Section&nbsp;9.1.10, &#8220;Service Registration And Unregistration Lifecycle&#8221;</a> chapters.</p>
+
+ <p>Now that the <code class="literal">managed-service-factory</code> options have been explained, let's look at a more complex configuration:</p>
+
+ <div class="programlistingco"><pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"queueTracker"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.xyz.queue.QueueTracker"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgix:managed-service-factory</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"data-msf"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">factory-pid</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.xyz.labX"</span> <span class="co" id="compendium:msf:def.2:fpid"><img src="images/callouts/1.png" alt="(1)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">autowire-on-update</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"true"</span> <span class="co" id="compendium:msf:def.2:us"><img src="images/callouts/2.png" alt="(2)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">update-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"refresh"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong> <span class="co" id="compendium:msf:def.2:um"><img src="images/callouts/3.png" alt="(3)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgix:interfaces&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;value&gt;</strong>java.util.Collection<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/value&gt;</strong> <span class="co" id="compendium:msf:def.2:intfs.1"><img src="images/callouts/4.png" alt="(4)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;value&gt;</strong>java.util.Queue<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/value&gt;</strong> <span class="co" id="compendium:msf:def.2:intfs.2"><img src="images/callouts/4.png" alt="(4)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgix:interfaces&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgix:registration-listener</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"queueTracker"</span> <span class="co" id="compendium:msf:def.2:list.def"><img src="images/callouts/5.png" alt="(5)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">registration-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"track"</span> <span class="co" id="compendium:msf:def.2:list.cm.1"><img src="images/callouts/6.png" alt="(6)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">unregistration-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"untrack"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong> <span class="co" id="compendium:msf:def.2:list.cm.2"><img src="images/callouts/7.png" alt="(7)"></span>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.ResizableQueue"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong> <span class="co" id="compendium:msf:def.2:tmpl"><img src="images/callouts/8.png" alt="(8)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"size"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"100"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"concurrency"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"10"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"fair"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"false"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgix:managed-service-factory&gt;</strong></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p><code class="interfacename">ManagedServiceFactory</code> factory persistent id</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>whether Gemini Blueprint should autowire the bean when a <code class="interfacename">Configuration</code> is updated</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/3.png" alt="3" border="0"></span></p></td><td valign="top" align="left">
+ <p>the method to invoke after autowiring</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/4.png" alt="4" border="0"></span></p></td><td valign="top" align="left">
+ <p>the interfaces under which the nested beans are published as OSGi services</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/5.png" alt="5" border="0"></span></p></td><td valign="top" align="left">
+ <p>listener notified when a service (based on the CM <code class="interfacename">Configuration</code>) is registered/unregistered</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/6.png" alt="6" border="0"></span></p></td><td valign="top" align="left">
+ <p>custom (optional) service registration method</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/7.png" alt="7" border="0"></span></p></td><td valign="top" align="left">
+ <p>custom (optional) service unregistration method</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/8.png" alt="8" border="0"></span></p></td><td valign="top" align="left">
+ <p>bean definition template</p>
+ </td></tr></table></div></div>
+
+ <p>The example above, creates a imaginary <code class="classname">ResizeableQueue</code> instance for each <code class="interfacename">Configuration</code> entry
+ present under the <code class="literal">org.xyz.labX</code> factory pid. Each instance has default values assigned to <code class="literal">size</code>, <code class="literal">concurrency</code>
+ and <code class="literal">fair</code> parameters. However, just like <code class="literal">managed-properties</code>, during the bean creation, the values received from the
+ Configuration Admin will be injected by name, possibly overriding existing settings. Once created and configured, each nested, anonymous bean instance
+ is registered as an OSGi service under the <code class="interfacename">java.util.Collection</code> and <code class="interfacename">java.util.Queue</code>
+ interfaces. The OSGi service lifecycle is monitored by a registration listener, namely the bean <code class="literal">queueTracker</code>.
+ Finally, due to the specified <code class="literal">autowire-on-update</code> and <code class="literal">update-method</code> attributes, any updates executed to each CM configuration
+ will cause the container to autowire the associated bean instance with the newly set properties and after that a
+ <code class="methodname">refresh</code> callback will be invoked on it.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="compendium:cm:dict"></a>11.1.4.&nbsp;Direct Access To Configuration Data</h3></div></div></div>
+
+
+ <p>The simplest way to work directly with the configuration data stored under a given persistent id or factory persistent id,
+ is to register a service that implements either the <code class="interfacename">ManagedService</code> or <code class="interfacename">ManagedServiceFactory</code>
+ interface and specify the pid that you are interested in as a service property (for more information, see the Configuration Admin chapter
+ in the OSGi compendium spec). For example:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.osgi.service.cm.ManagedService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"myManagedService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service-properties&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;entry</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">key</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service.pid"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"my.managed.service.pid"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:service-properties&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:service&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"myManagedService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MyManagedService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+ </div>
+
+ </div>
+ </div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bundles.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="testing.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;10.&nbsp;Working With Bundles&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;12.&nbsp;Testing OSGi based Applications</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/css/highlight.css b/documentation/reference/3.0.0.M01/html/css/highlight.css
new file mode 100644
index 0000000..ffefef7
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/css/highlight.css
@@ -0,0 +1,35 @@
+/*
+ code highlight CSS resemblign the Eclipse IDE default color schema
+ @author Costin Leau
+*/
+
+.hl-keyword {
+ color: #7F0055;
+ font-weight: bold;
+}
+
+.hl-comment {
+ color: #3F5F5F;
+ font-style: italic;
+}
+
+.hl-multiline-comment {
+ color: #3F5FBF;
+ font-style: italic;
+}
+
+.hl-tag {
+ color: #3F7F7F;
+}
+
+.hl-attribute {
+ color: #7F007F;
+}
+
+.hl-value {
+ color: #2A00FF;
+}
+
+.hl-string {
+ color: #2A00FF;
+} \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/css/html.css b/documentation/reference/3.0.0.M01/html/css/html.css
new file mode 100644
index 0000000..dd2ab69
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/css/html.css
@@ -0,0 +1,305 @@
+@IMPORT url("highlight.css");
+
+body {
+ text-align: justify;
+ margin-right: 2em;
+ margin-left: 2em;
+}
+
+a,
+a[accesskey^="h"],
+a[accesskey^="n"],
+a[accesskey^="u"],
+a[accesskey^="p"] {
+ font-family: Verdana, Arial, helvetica, sans-serif;
+ font-size: 12px;
+ color: #003399;
+}
+
+a:active {
+ color: #003399;
+}
+
+a:visited {
+ color: #888888;
+}
+
+p {
+ font-family: Verdana, Arial, sans-serif;
+}
+
+dt {
+ font-family: Verdana, Arial, sans-serif;
+ font-size: 12px;
+}
+
+p, dl, dt, dd, blockquote {
+ color: #000000;
+ margin-bottom: 3px;
+ margin-top: 3px;
+ padding-top: 0;
+}
+
+ol, ul, p {
+ margin-top: 6px;
+ margin-bottom: 6px;
+}
+
+p, blockquote {
+ font-size: 90%;
+}
+
+p.releaseinfo {
+ font-size: 100%;
+ font-weight: bold;
+ font-family: Verdana, Arial, helvetica, sans-serif;
+ padding-top: 10px;
+}
+
+p.pubdate {
+ font-size: 120%;
+ font-weight: bold;
+ font-family: Verdana, Arial, helvetica, sans-serif;
+}
+
+td {
+ font-size: 80%;
+}
+
+td, th, span {
+ color: #000000;
+}
+
+td[width^="40%"] {
+ font-family: Verdana, Arial, helvetica, sans-serif;
+ font-size: 12px;
+ color: #003399;
+}
+
+table[summary^="Navigation header"] tbody tr th[colspan^="3"] {
+ font-family: Verdana, Arial, helvetica, sans-serif;
+}
+
+blockquote {
+ margin-right: 0;
+}
+
+h1, h2, h3, h4, h6 {
+ color: #000000;
+ font-weight: 500;
+ margin-top: 0;
+ padding-top: 14px;
+ font-family: Verdana, Arial, helvetica, sans-serif;
+ margin-bottom: 0;
+}
+
+h2.title {
+ font-weight: 800;
+ margin-bottom: 8px;
+}
+
+h2.subtitle {
+ font-weight: 800;
+ margin-bottom: 20px;
+}
+
+.firstname, .surname {
+ font-size: 12px;
+ font-family: Verdana, Arial, helvetica, sans-serif;
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+ border: 1px black;
+ empty-cells: hide;
+ margin: 10px 0 30px 50px;
+ width: 90%;
+}
+
+div.table {
+ margin: 30px 0 10px 0;
+ border: 1px dashed gray;
+ padding: 10px;
+}
+
+div .table-contents table {
+ border: 1px solid black;
+}
+
+div.table > p.title {
+ padding-left: 10px;
+}
+
+table[summary^="Navigation footer"] {
+ border-collapse: collapse;
+ border-spacing: 0;
+ border: 1px black;
+ empty-cells: hide;
+ margin: 0px;
+ width: 100%;
+}
+
+table[summary^="Note"],
+table[summary^="Warning"],
+table[summary^="Tip"] {
+ border-collapse: collapse;
+ border-spacing: 0;
+ border: 1px black;
+ empty-cells: hide;
+ margin: 10px 0px 10px -20px;
+ width: 100%;
+}
+
+td {
+ padding: 4pt;
+ font-family: Verdana, Arial, helvetica, sans-serif;
+}
+
+div.warning TD {
+ text-align: justify;
+}
+
+h1 {
+ font-size: 150%;
+}
+
+h2 {
+ font-size: 110%;
+}
+
+h3 {
+ font-size: 100%; font-weight: bold;
+}
+
+h4 {
+ font-size: 90%; font-weight: bold;
+}
+
+h5 {
+ font-size: 90%; font-style: italic;
+}
+
+h6 {
+ font-size: 100%; font-style: italic;
+}
+
+tt {
+ font-size: 110%;
+ font-family: "Courier New", Courier, monospace;
+ color: #000000;
+}
+
+.navheader, .navfooter {
+ border: none;
+}
+
+div.navfooter table {
+ border-style: dashed;
+ border-color: gray;
+ border-width: 1px 1px 1px 1px;
+ background-color: #cde48d;
+}
+
+pre {
+ font-size: 110%;
+ padding: 5px;
+ border-style: solid;
+ border-width: 1px;
+ border-color: #CCCCCC;
+ background-color: #f3f5e9;
+}
+
+ul, ol, li {
+ list-style: disc;
+}
+
+hr {
+ width: 100%;
+ height: 1px;
+ background-color: #CCCCCC;
+ border-width: 0;
+ padding: 0;
+}
+
+.variablelist {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ margin: 0;
+}
+
+.term {
+ font-weight:bold;
+}
+
+.mediaobject {
+ padding-top: 30px;
+ padding-bottom: 30px;
+}
+
+.legalnotice {
+ font-family: Verdana, Arial, helvetica, sans-serif;
+ font-size: 12px;
+ font-style: italic;
+}
+
+.sidebar {
+ float: right;
+ margin: 10px 0 10px 30px;
+ padding: 10px 20px 20px 20px;
+ width: 33%;
+ border: 1px solid black;
+ background-color: #F4F4F4;
+ font-size: 14px;
+}
+
+.property {
+ font-family: "Courier New", Courier, monospace;
+}
+
+a code {
+ font-family: Verdana, Arial, monospace;
+ font-size: 12px;
+}
+
+td code {
+ font-size: 110%;
+}
+
+div.note * td,
+div.tip * td,
+div.warning * td,
+div.calloutlist * td {
+ text-align: justify;
+ font-size: 100%;
+}
+
+.programlisting {
+ clear: both;
+}
+
+.programlisting .interfacename,
+.programlisting .literal,
+.programlisting .classname {
+ font-size: 95%;
+}
+
+.title .interfacename,
+.title .literal,
+.title .classname {
+ font-size: 130%;
+}
+
+/* everything in a <lineannotation/> is displayed in a coloured, comment-like font */
+.programlisting * .lineannotation,
+.programlisting * .lineannotation * {
+ color: green;
+}
+
+.question * p {
+ font-size: 100%;
+}
+
+.answer * p {
+ font-size: 100%;
+} \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/eclipse-migration.html b/documentation/reference/3.0.0.M01/html/eclipse-migration.html
new file mode 100644
index 0000000..9d45a01
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/eclipse-migration.html
@@ -0,0 +1,21 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Chapter&nbsp;1.&nbsp;Spring Dynamic Modules becomes Eclipse Gemini Blueprint</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="introduction.html" title="Part&nbsp;I.&nbsp;Introduction"><link rel="prev" href="introduction.html" title="Part&nbsp;I.&nbsp;Introduction"><link rel="next" href="why-Spring DM.html" title="Chapter&nbsp;2.&nbsp;Why Gemini Blueprint?"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="eclipse-migration"></a>Chapter&nbsp;1.&nbsp;Spring Dynamic Modules becomes Eclipse Gemini Blueprint</h2></div></div></div>
+
+
+ <p>
+ In late 2009, as a member of the Gemini project <a class="ulink" href="https://www.eclipse.org/proposals/gemini/" target="_top">proposal</a>,
+ SpringSource <a class="ulink" href="http://spring.io/blog/2009/11/24/gemini-project-proposal-at-eclipse-org/" target="_top">contributed</a> the Spring Dynamic Modules
+ (also known as Spring OSGi) <a class="ulink" href="http://www.springframework.org/osgi" target="_top">project</a>
+ to the Eclipse Foundation. Spring DM v2 code base has been moved to Eclipse.org along with its issue tracker and forum. The project
+ became dual licensed under Apache License and EPL.
+ </p>
+ <p>
+ While the name has changed, the code and its functionality remain the same. Existing Spring DM applications can be easily migrated to Eclipse Gemini Blueprint
+ as mentioned in the migration <a class="ulink" href="https://www.eclipse.org/gemini/blueprint/documentation/migration/" target="_top">guide</a>.
+ </p>
+ <p>While the project name has changed (to Eclipse Gemini Blueprint) and significant efforts have been made to reflect this in the project documentation and resources,
+ there might be places that we have missed; if you find any, please <a class="ulink" href="https://bugs.eclipse.org/bugs/buglist.cgi?product=Gemini.Blueprint" target="_top">report</a> them to us.
+ </p>
+ </div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="introduction.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="why-Spring DM.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part&nbsp;I.&nbsp;Introduction&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;2.&nbsp;Why Gemini Blueprint?</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/faq.html b/documentation/reference/3.0.0.M01/html/faq.html
new file mode 100644
index 0000000..18d625b
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/faq.html
@@ -0,0 +1,22 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Eclipse Gemini Blueprint</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="faq.html" title="Eclipse Gemini Blueprint"><link rel="next" href="spring-osgi-faq.html" title="Chapter&nbsp;1.&nbsp;Frequently Asked Questions"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="book"><div class="titlepage"><div><div><h1 class="title"><a name="d1020e1"></a>Eclipse Gemini Blueprint</h1></div><div><h2 class="subtitle">Frequently Asked Questions</h2></div><div><div class="authorgroup">
+ <div class="author"><h3 class="author"><span class="firstname">Costin</span> <span class="surname">Leau</span></h3><div class="affiliation">SpringSource</div></div>
+ </div></div><div><p class="releaseinfo">3.0.0.M01</p></div><div><p class="copyright">Copyright &copy; 2006 -, 2011 VMware Inc., Oracle Inc.</p></div><div><div class="legalnotice"><a name="d1020e11"></a>
+ <p>Documentation made available under the terms of the Eclipse Public License v1.0
+ and Apache License v2.0 which accompanies this distribution.
+ The Eclipse Public License is available at <a class="ulink" href="http://www.eclipse.org/legal/epl-v10.html" target="_top">http://www.eclipse.org/legal/epl-v10.html</a> and
+ the Apache License v2.0 is available at <a class="ulink" href="http://www.opensource.org/licenses/apache2.0.php" target="_top">http://www.opensource.org/licenses/apache2.0.php</a>.
+ You may elect to redistribute this code under either of these licenses.</p>
+ </div></div></div><hr></div><div class="toc"><dl class="toc"><dt><span class="chapter"><a href="spring-osgi-faq.html">1. Frequently Asked Questions</a></span></dt><dd><dl><dt><span class="section"><a href="spring-osgi-faq.html#eclipse-springdm">1.1. What's the relationship between Spring Dynamic Modules and Gemini Blueprint?</a></span></dt><dt><span class="section"><a href="spring-osgi-faq.html#name-change">1.2. What happened to "Spring OSGi" project name?</a></span></dt><dt><span class="section"><a href="spring-osgi-faq.html#internal-package">1.3. Why aren't there any javadocs on <code class="literal">*.internal.*</code>?</a></span></dt><dt><span class="section"><a href="spring-osgi-faq.html#requirements">1.4. What are Gemini Blueprint requirements?</a></span></dt><dt><span class="section"><a href="spring-osgi-faq.html#other-module-frameworks">1.5. Are there plans to support other dynamic module frameworks (such as the JSR 277 extensions in Java 7)?</a></span></dt><dt><span class="section"><a href="spring-osgi-faq.html#restricted-environments">1.6. Will Gemini Blueprint work in restricted environments (such as small/mobile devices)?</a></span></dt><dt><span class="section"><a href="spring-osgi-faq.html#supported-osgi-platforms">1.7. What OSGi platforms are supported?</a></span></dt><dt><span class="section"><a href="spring-osgi-faq.html#osgi-intro">1.8. Where can I learn about OSGi?</a></span></dt><dt><span class="section"><a href="spring-osgi-faq.html#building-the-sources">1.9. I have problems building the sources. What can I do?</a></span></dt><dt><span class="section"><a href="spring-osgi-faq.html#logging">1.10. How can I use logging in OSGi?</a></span></dt><dt><span class="section"><a href="spring-osgi-faq.html#commons-logging">1.11. If you use the commons-logging API, why rely on SLF4J and
+ not the commons-logging jar?</a></span></dt><dt><span class="section"><a href="spring-osgi-faq.html#getting-commons-logging-to-work">1.12. I have to use commons-logging, what can I do?</a></span></dt><dt><span class="section"><a href="spring-osgi-faq.html#logging-impl-choice">1.13. Why don't you use the OSGi logging service/[insert your favourite
+ logging library in here]?</a></span></dt><dt><span class="section"><a href="spring-osgi-faq.html#osgi-wrapping">1.14. I have to use [insert name] library/framework inside. What can I do?</a></span></dt><dt><span class="section"><a href="spring-osgi-faq.html#jdk-crippled-jta-api">1.15. I keep getting <span class="emphasis"><em>java.lang.NoClassDefFoundError: javax/transaction/...</em></span> when trying to do data access..</a></span></dt><dt><span class="section"><a href="spring-osgi-faq.html#incomplete-osgi-jar">1.16. When doing integration testing I receive <span class="emphasis"><em>java.lang.NoClassDefFoundError: org.osgi.vendor.framework property not set</em></span>... </a></span></dt><dt><span class="section"><a href="spring-osgi-faq.html#auto-export-visibility">1.17. The autoExport option doesn't work properly!</a></span></dt><dt><span class="section"><a href="spring-osgi-faq.html#junit382-serialization">1.18. When using Gemini Blueprint integration testing I get an exception about serialVersionUID. What is the problem?</a></span></dt><dt><span class="section"><a href="spring-osgi-faq.html#pde-errors">1.19. I'm using Eclipse PDE and I started getting some weird exceptions/behaviour. What's the matter?</a></span></dt><dt><span class="section"><a href="spring-osgi-faq.html#upgrade-to-1.1">1.20. I'm upgrading to Spring DM 1.1 but now I get some ClassNotFoundExceptions. What has changed?</a></span></dt><dt><span class="section"><a href="spring-osgi-faq.html#proxy-equality">1.21. I've noticed that objects imported by Gemini Blueprint are not always equal to the raw target service. Why is that?</a></span></dt><dt><span class="section"><a href="spring-osgi-faq.html#static-collections">1.22. My Gemini Blueprint collection doesn't change even though the number of OSGi service changes. What's wrong?</a></span></dt><dt><span class="section"><a href="spring-osgi-faq.html#update-to-1.2">1.23. I have upgraded to Gemini Blueprint but my custom extender/web extender configuration doesn't work anymore. What has changed?</a></span></dt><dt><span class="section"><a href="spring-osgi-faq.html#linkage-error">1.24. I get a <code class="literal">java.lang.LinkageError: loader constraint violation</code> if I use Gemini Blueprint. Things work fine with vanilla OSGi.
+ What's wrong?</a></span></dt><dt><span class="section"><a href="spring-osgi-faq.html#blueprint">1.25. What can I use Gemini Blueprint with the Blueprint Container spec? What's the relationship between the two? Are the they compatible?
+ Are there any differences?</a></span></dt><dt><span class="section"><a href="spring-osgi-faq.html#kf-2.3-boot-delegation">1.26. I'm using Knopflerfish 2.3.x and I have a lot of visibility exception. How can I fix this?</a></span></dt><dt><span class="section"><a href="spring-osgi-faq.html#pde-cycles">1.27. I'm using Gemini Blueprint and Spring jars inside Eclipse PDE but I get an error about cycle dependency errors. What's wrong?</a></span></dt></dl></dd></dl></div>
+
+
+
+
+
+</div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left">&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="spring-osgi-faq.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;1.&nbsp;Frequently Asked Questions</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/get-started.html b/documentation/reference/3.0.0.M01/html/get-started.html
new file mode 100644
index 0000000..7a5d4bb
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/get-started.html
@@ -0,0 +1,83 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Chapter&nbsp;4.&nbsp;Getting Started</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="introduction.html" title="Part&nbsp;I.&nbsp;Introduction"><link rel="prev" href="requirements.html" title="Chapter&nbsp;3.&nbsp;Requirements"><link rel="next" href="what-is-new.html" title="Chapter&nbsp;5.&nbsp;What is new?"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="get-started"></a>Chapter&nbsp;4.&nbsp;Getting Started</h2></div></div></div>
+
+
+ <p>Learning a new framework is not always straightforward. In this section, we (the Spring DM/Gemini Blueprint team)
+ tried to provide, what we think is, an easy to follow guide for starting with Gemini Blueprint.
+ Of course, feel free to create your own learning 'path' as you see fit and, if possible, please report back
+ any improvements to the documentation that can help others.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="get-started:first-steps"></a>4.1.&nbsp;First Steps</h2></div></div></div>
+
+
+ <p>As explained in <a class="xref" href="why-Spring DM.html" title="Chapter&nbsp;2.&nbsp;Why Gemini Blueprint?">Chapter&nbsp;2, <i>Why Gemini Blueprint?</i></a>, Gemini Blueprint provides integration between
+ Spring framework and OSGi. Thus, it is important to become acquainted with both of these frameworks (libraries or
+ environments depending on how you want to name them). Throughout the Gemini Blueprint documentation, each section provides
+ links to resources relevant however, it is best to become familiar with these topics beforehand.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="get-started:first-steps:spring"></a>4.1.1.&nbsp;Knowing Spring</h3></div></div></div>
+
+ <p>Gemini Blueprint uses heavily Spring framework's <a class="ulink" href="http://docs.spring.io/spring/docs/4.3.x/spring-framework-reference/html/overview.html#overview-core-container" target="_top">core</a> functionalty,
+ such as the <a class="ulink" href="http://docs.spring.io/spring/docs/4.3.x/spring-framework-reference/html/beans.html#beans-introduction" target="_top">IoC</a> container,
+ <a class="ulink" href="http://docs.spring.io/spring/docs/4.3.x/spring-framework-reference/html/resources.html" target="_top">resource</a> abstraction and
+ <a class="ulink" href="http://docs.spring.io/spring/docs/4.3.x/spring-framework-reference/html/aop.html" target="_top">AOP</a> infrastructure. While it is not important
+ to know the Spring framework APIs, understanding the concepts behind them is. At a minimum, the idea behind IoC should be familiar.
+ That being said, the more knowledge you have about Spring framework, the faster you will pick Gemini Blueprint.
+ Besides the comprehensive documentation that explains the Spring Framework in detail,
+ there are a lot of articles, blog entries and books on the topic - take a look at the Spring framework
+ <a class="ulink" href="http://projects.spring.io/spring-framework/" target="_top">home page</a> for more information. In general, this should be the starting point for
+ OSGi (or Eclipse plugin) developers wanting to try Gemini Blueprint.</p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="get-started:first-steps:osgi"></a>4.1.2.&nbsp;Knowing OSGi</h3></div></div></div>
+
+ <p>Java developers, new to OSGi, can start by reading the OSGi Alliance <a class="ulink" href="https://www.osgi.org/developer/where-to-start/" target="_top">introduction</a>,
+ the OSGi <a class="ulink" href="https://www.osgi.org/developer/specifications/" target="_top">specifications</a> or one of the articles/blogs
+ available on the internet.
+ </p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="get-started:first-steps:blueprint"></a>4.1.3.&nbsp;Quick start - OSGi 5.x Blueprint Container</h3></div></div></div>
+
+ <p>As an alternative to the recommended Spring documentation, if OSGi 5.x is an option, one can read the Blueprint Container specification
+ for a quick introduction to dependency injection and Gemini Blueprint functionality. Note that Blueprint is a subset of Spring and Gemini Blueprint and we recommend
+ the official documentation to get access to the whole set of features.
+ </p>
+ </div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="get-started:help"></a>4.2.&nbsp;Need Help?</h2></div></div></div>
+
+
+ <p>If you encounter issues or you are just looking for advice, feel free to use one of the links below:</p>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="get-started:help:community"></a>4.2.1.&nbsp;Community Support</h3></div></div></div>
+
+ <p>The Gemini Blueprint <a class="ulink" href="http://www.eclipse.org/forums/index.php/f/153/" target="_top">forum</a>.</p>
+ <p>The Gemini Blueprint GitHub <a class="ulink" href="https://github.com/eclipse/gemini.blueprint" target="_top">mirror</a>.</p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="get-started:help:professional"></a>4.2.2.&nbsp;Professional Support</h3></div></div></div>
+
+ <p>Professional, from-the-source support, with guaranteed response time, is available from <a class="ulink" href="http://spring.io/" target="_top">Pivotal</a>,
+ the company behind Gemini Blueprint and Spring.
+ </p>
+ </div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="get-started:up-to-date"></a>4.3.&nbsp;Following Development</h2></div></div></div>
+
+
+ <p>For information on the Gemini Blueprint source code repository, nightly builds and snapshot artifacts please see the Gemini Blueprint home
+ <a class="ulink" href="https://www.eclipse.org/gemini/blueprint/" target="_top">page</a>.
+ </p>
+ <p>You can help make Gemini Blueprint best serve the needs of the Spring community by interacting with developers through the Spring Community
+ <a class="ulink" href="http://spring.io/questions" target="_top">stack overflow</a>.</p>
+ <p>If you encounter a bug or want to suggest an improvement,
+ please create a ticket on the Gemini Blueprint issue <a class="ulink" href="https://jira.spring.io/" target="_top">tracker</a>.</p>
+ <p>To stay up to date with the latest news and announcements in the Spring eco system, subscribe to the
+ Spring Community <a class="ulink" href="http://www.spring.io/" target="_top">Portal</a>.</p>
+ <p>Lastly, you can follow the project team on Twitter
+ (<a class="ulink" href="https://twitter.com/adriancolyer" target="_top">Adrian</a>, <a class="ulink" href="https://twitter.com/costinl" target="_top">Costin</a>, <a class="ulink" href="https://twitter.com/deploynix" target="_top">Olaf</a>)</p>
+ </div>
+
+</div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="requirements.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="what-is-new.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;3.&nbsp;Requirements&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;5.&nbsp;What is new?</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/images/admons/blank.png b/documentation/reference/3.0.0.M01/html/images/admons/blank.png
new file mode 100644
index 0000000..764bf4f
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/admons/blank.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/admons/caution.gif b/documentation/reference/3.0.0.M01/html/images/admons/caution.gif
new file mode 100644
index 0000000..d9f5e5b
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/admons/caution.gif
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/admons/caution.png b/documentation/reference/3.0.0.M01/html/images/admons/caution.png
new file mode 100644
index 0000000..5b7809c
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/admons/caution.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/admons/draft.png b/documentation/reference/3.0.0.M01/html/images/admons/draft.png
new file mode 100644
index 0000000..0084708
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/admons/draft.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/admons/home.gif b/documentation/reference/3.0.0.M01/html/images/admons/home.gif
new file mode 100644
index 0000000..6784f5b
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/admons/home.gif
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/admons/home.png b/documentation/reference/3.0.0.M01/html/images/admons/home.png
new file mode 100644
index 0000000..cbb711d
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/admons/home.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/admons/important.gif b/documentation/reference/3.0.0.M01/html/images/admons/important.gif
new file mode 100644
index 0000000..6795d9a
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/admons/important.gif
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/admons/important.png b/documentation/reference/3.0.0.M01/html/images/admons/important.png
new file mode 100644
index 0000000..ad57f6f
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/admons/important.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/admons/next.gif b/documentation/reference/3.0.0.M01/html/images/admons/next.gif
new file mode 100644
index 0000000..aa1516e
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/admons/next.gif
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/admons/next.png b/documentation/reference/3.0.0.M01/html/images/admons/next.png
new file mode 100644
index 0000000..45835bf
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/admons/next.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/admons/note.gif b/documentation/reference/3.0.0.M01/html/images/admons/note.gif
new file mode 100644
index 0000000..f329d35
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/admons/note.gif
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/admons/note.png b/documentation/reference/3.0.0.M01/html/images/admons/note.png
new file mode 100644
index 0000000..ad57f6f
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/admons/note.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/admons/prev.gif b/documentation/reference/3.0.0.M01/html/images/admons/prev.gif
new file mode 100644
index 0000000..64ca8f3
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/admons/prev.gif
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/admons/prev.png b/documentation/reference/3.0.0.M01/html/images/admons/prev.png
new file mode 100644
index 0000000..cf24654
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/admons/prev.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/admons/tip.gif b/documentation/reference/3.0.0.M01/html/images/admons/tip.gif
new file mode 100644
index 0000000..823f2b4
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/admons/tip.gif
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/admons/tip.png b/documentation/reference/3.0.0.M01/html/images/admons/tip.png
new file mode 100644
index 0000000..ad57f6f
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/admons/tip.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/admons/toc-blank.png b/documentation/reference/3.0.0.M01/html/images/admons/toc-blank.png
new file mode 100644
index 0000000..6ffad17
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/admons/toc-blank.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/admons/toc-minus.png b/documentation/reference/3.0.0.M01/html/images/admons/toc-minus.png
new file mode 100644
index 0000000..abbb020
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/admons/toc-minus.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/admons/toc-plus.png b/documentation/reference/3.0.0.M01/html/images/admons/toc-plus.png
new file mode 100644
index 0000000..941312c
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/admons/toc-plus.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/admons/up.gif b/documentation/reference/3.0.0.M01/html/images/admons/up.gif
new file mode 100644
index 0000000..aabc2d0
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/admons/up.gif
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/admons/up.png b/documentation/reference/3.0.0.M01/html/images/admons/up.png
new file mode 100644
index 0000000..07634de
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/admons/up.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/admons/warning.gif b/documentation/reference/3.0.0.M01/html/images/admons/warning.gif
new file mode 100644
index 0000000..c6acdec
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/admons/warning.gif
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/admons/warning.png b/documentation/reference/3.0.0.M01/html/images/admons/warning.png
new file mode 100644
index 0000000..ef3e10f
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/admons/warning.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/bundle-states.png b/documentation/reference/3.0.0.M01/html/images/bundle-states.png
new file mode 100644
index 0000000..323cdc2
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/bundle-states.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/callouts/1.png b/documentation/reference/3.0.0.M01/html/images/callouts/1.png
new file mode 100644
index 0000000..7d47343
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/callouts/1.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/callouts/10.png b/documentation/reference/3.0.0.M01/html/images/callouts/10.png
new file mode 100644
index 0000000..997bbc8
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/callouts/10.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/callouts/11.png b/documentation/reference/3.0.0.M01/html/images/callouts/11.png
new file mode 100644
index 0000000..ce47dac
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/callouts/11.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/callouts/12.png b/documentation/reference/3.0.0.M01/html/images/callouts/12.png
new file mode 100644
index 0000000..31daf4e
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/callouts/12.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/callouts/13.png b/documentation/reference/3.0.0.M01/html/images/callouts/13.png
new file mode 100644
index 0000000..14021a8
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/callouts/13.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/callouts/14.png b/documentation/reference/3.0.0.M01/html/images/callouts/14.png
new file mode 100644
index 0000000..64014b7
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/callouts/14.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/callouts/15.png b/documentation/reference/3.0.0.M01/html/images/callouts/15.png
new file mode 100644
index 0000000..0d65765
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/callouts/15.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/callouts/2.png b/documentation/reference/3.0.0.M01/html/images/callouts/2.png
new file mode 100644
index 0000000..5d09341
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/callouts/2.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/callouts/3.png b/documentation/reference/3.0.0.M01/html/images/callouts/3.png
new file mode 100644
index 0000000..ef7b700
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/callouts/3.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/callouts/4.png b/documentation/reference/3.0.0.M01/html/images/callouts/4.png
new file mode 100644
index 0000000..adb8364
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/callouts/4.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/callouts/5.png b/documentation/reference/3.0.0.M01/html/images/callouts/5.png
new file mode 100644
index 0000000..4d7eb46
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/callouts/5.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/callouts/6.png b/documentation/reference/3.0.0.M01/html/images/callouts/6.png
new file mode 100644
index 0000000..0ba694a
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/callouts/6.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/callouts/7.png b/documentation/reference/3.0.0.M01/html/images/callouts/7.png
new file mode 100644
index 0000000..472e96f
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/callouts/7.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/callouts/8.png b/documentation/reference/3.0.0.M01/html/images/callouts/8.png
new file mode 100644
index 0000000..5e60973
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/callouts/8.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/callouts/9.png b/documentation/reference/3.0.0.M01/html/images/callouts/9.png
new file mode 100644
index 0000000..a0676d2
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/callouts/9.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/deadlock.png b/documentation/reference/3.0.0.M01/html/images/deadlock.png
new file mode 100644
index 0000000..fd49b83
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/deadlock.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/i21-banner-rhs.jpg b/documentation/reference/3.0.0.M01/html/images/i21-banner-rhs.jpg
new file mode 100644
index 0000000..8b24a77
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/i21-banner-rhs.jpg
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/pde/find-install.png b/documentation/reference/3.0.0.M01/html/images/pde/find-install.png
new file mode 100644
index 0000000..ace425f
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/pde/find-install.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/pde/preferences.png b/documentation/reference/3.0.0.M01/html/images/pde/preferences.png
new file mode 100644
index 0000000..3612ad0
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/pde/preferences.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/pde/select-pde-1.png b/documentation/reference/3.0.0.M01/html/images/pde/select-pde-1.png
new file mode 100644
index 0000000..b729526
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/pde/select-pde-1.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/pde/select-pde-2.png b/documentation/reference/3.0.0.M01/html/images/pde/select-pde-2.png
new file mode 100644
index 0000000..17d887d
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/pde/select-pde-2.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/pde/select-plugins-view.png b/documentation/reference/3.0.0.M01/html/images/pde/select-plugins-view.png
new file mode 100644
index 0000000..e0ddaeb
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/pde/select-plugins-view.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/pde/show-plugins.png b/documentation/reference/3.0.0.M01/html/images/pde/show-plugins.png
new file mode 100644
index 0000000..c91089b
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/pde/show-plugins.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/pde/spring-osgi-plugin.png b/documentation/reference/3.0.0.M01/html/images/pde/spring-osgi-plugin.png
new file mode 100644
index 0000000..c33fc1f
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/pde/spring-osgi-plugin.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/pde/springide-site-select.png b/documentation/reference/3.0.0.M01/html/images/pde/springide-site-select.png
new file mode 100644
index 0000000..27cf0dc
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/pde/springide-site-select.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/pde/springide-site.png b/documentation/reference/3.0.0.M01/html/images/pde/springide-site.png
new file mode 100644
index 0000000..da07781
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/pde/springide-site.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/pde/target-select.png b/documentation/reference/3.0.0.M01/html/images/pde/target-select.png
new file mode 100644
index 0000000..28979ed
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/pde/target-select.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/s2-banner-rhs.png b/documentation/reference/3.0.0.M01/html/images/s2-banner-rhs.png
new file mode 100644
index 0000000..a9f6d95
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/s2-banner-rhs.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/s2_box_logo.png b/documentation/reference/3.0.0.M01/html/images/s2_box_logo.png
new file mode 100644
index 0000000..8c778a5
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/s2_box_logo.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/spring-osgi-model.png b/documentation/reference/3.0.0.M01/html/images/spring-osgi-model.png
new file mode 100644
index 0000000..8e958db
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/spring-osgi-model.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/start-diagram.png b/documentation/reference/3.0.0.M01/html/images/start-diagram.png
new file mode 100644
index 0000000..9dcddce
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/start-diagram.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/stop-diagram.png b/documentation/reference/3.0.0.M01/html/images/stop-diagram.png
new file mode 100644
index 0000000..6e72b9f
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/stop-diagram.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/visibility.png b/documentation/reference/3.0.0.M01/html/images/visibility.png
new file mode 100644
index 0000000..47d306e
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/visibility.png
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/images/xdev-spring_logo.jpg b/documentation/reference/3.0.0.M01/html/images/xdev-spring_logo.jpg
new file mode 100644
index 0000000..622962e
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/images/xdev-spring_logo.jpg
Binary files differ
diff --git a/documentation/reference/3.0.0.M01/html/index.html b/documentation/reference/3.0.0.M01/html/index.html
new file mode 100644
index 0000000..d399174
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/index.html
@@ -0,0 +1,31 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Eclipse Gemini Blueprint Reference Guide</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="next" href="preface.html" title="Preface"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="book"><div class="titlepage"><div><div><h1 class="title"><a name="d21e1"></a>Eclipse Gemini Blueprint Reference Guide</h1></div><div><div class="authorgroup">
+ <div class="author"><h3 class="author"><span class="firstname">Adrian M</span> <span class="surname">Colyer</span></h3><div class="affiliation">SpringSource, division of VMware</div></div>
+ <div class="author"><h3 class="author"><span class="firstname">Hal</span> <span class="surname">Hildebrand</span></h3><div class="affiliation">Oracle</div></div>
+ <div class="author"><h3 class="author"><span class="firstname">Costin</span> <span class="surname">Leau</span></h3><div class="affiliation">SpringSource, division of VMware</div></div>
+ <div class="author"><h3 class="author"><span class="firstname">Andy</span> <span class="surname">Piper</span></h3><div class="affiliation">BEA</div></div>
+ <div class="author"><h3 class="author"><span class="firstname">Olaf</span> <span class="surname">Otto</span></h3><div class="affiliation">Unic AG</div></div>
+ </div></div><div><p class="releaseinfo">3.0.0.M01</p></div><div><p class="copyright">Copyright &copy; 2006 -, 2011 VMware Inc., Oracle Inc.</p></div><div><div class="legalnotice"><a name="d21e26"></a>
+
+ <p>Documentation made available under the terms of the Eclipse Public License v1.0
+ and Apache License v2.0 which accompanies this distribution.
+ The Eclipse Public License is available at <a class="ulink" href="http://www.eclipse.org/legal/epl-v10.html" target="_top">http://www.eclipse.org/legal/epl-v10.html</a> and
+ the Apache License v2.0 is available at <a class="ulink" href="http://www.opensource.org/licenses/apache2.0.php" target="_top">http://www.opensource.org/licenses/apache2.0.php</a>.
+ You may elect to redistribute this code under either of these licenses.</p>
+ </div></div></div><hr></div><div class="toc"><dl class="toc"><dt><span class="preface"><a href="preface.html">Preface</a></span></dt><dt><span class="part"><a href="introduction.html">I. Introduction</a></span></dt><dd><dl><dt><span class="chapter"><a href="eclipse-migration.html">1. Spring Dynamic Modules becomes Eclipse Gemini Blueprint</a></span></dt><dt><span class="chapter"><a href="why-Spring DM.html">2. Why Gemini Blueprint?</a></span></dt><dt><span class="chapter"><a href="requirements.html">3. Requirements</a></span></dt><dt><span class="chapter"><a href="get-started.html">4. Getting Started</a></span></dt><dd><dl><dt><span class="section"><a href="get-started.html#get-started:first-steps">4.1. First Steps</a></span></dt><dd><dl><dt><span class="section"><a href="get-started.html#get-started:first-steps:spring">4.1.1. Knowing Spring</a></span></dt><dt><span class="section"><a href="get-started.html#get-started:first-steps:osgi">4.1.2. Knowing OSGi</a></span></dt><dt><span class="section"><a href="get-started.html#get-started:first-steps:blueprint">4.1.3. Quick start - OSGi 5.x Blueprint Container</a></span></dt></dl></dd><dt><span class="section"><a href="get-started.html#get-started:help">4.2. Need Help?</a></span></dt><dd><dl><dt><span class="section"><a href="get-started.html#get-started:help:community">4.2.1. Community Support</a></span></dt><dt><span class="section"><a href="get-started.html#get-started:help:professional">4.2.2. Professional Support</a></span></dt></dl></dd><dt><span class="section"><a href="get-started.html#get-started:up-to-date">4.3. Following Development</a></span></dt></dl></dd><dt><span class="chapter"><a href="what-is-new.html">5. What is new?</a></span></dt><dd><dl><dt><span class="section"><a href="what-is-new.html#gemini-blueprint-3.0.0.M01">5.1. Gemini Blueprint 3.0.x</a></span></dt><dd><dl><dt><span class="section"><a href="what-is-new.html#gemini-blueprint-3.0.x:spring-5.x">5.1.1. Spring 5.x</a></span></dt></dl></dd><dt><span class="section"><a href="what-is-new.html#gemini-blueprint-2.1.0">5.2. Gemini Blueprint 2.1.0+</a></span></dt><dd><dl><dt><span class="section"><a href="what-is-new.html#gemini-blueprint-2.1.0.x:jdk8">5.2.1. Java 8</a></span></dt><dt><span class="section"><a href="what-is-new.html#gemini-blueprint-2.1.x:spring-4.3.x">5.2.2. Spring 4.3.x</a></span></dt><dt><span class="section"><a href="what-is-new.html#gemini-blueprint-2.1.x:gemini-blueprint-extensions">5.2.3. Gemini Blueprint Extensions</a></span></dt></dl></dd><dt><span class="section"><a href="what-is-new.html#gemini-blueprint-2.0.0">5.3. Gemini Blueprint 2.0.0+</a></span></dt><dd><dl><dt><span class="section"><a href="what-is-new.html#gemini-blueprint-2.0.0.x:blueprint">5.3.1. OSGi 5.x Blueprint Reference Implementation (RI)</a></span></dt><dt><span class="section"><a href="what-is-new.html#gemini-blueprint-2.0.0.x:jdk5">5.3.2. Java 7</a></span></dt><dt><span class="section"><a href="what-is-new.html#gemini-blueprint-2.0.x:spring-4.2.x">5.3.3. Spring 4.2.x</a></span></dt></dl></dd><dt><span class="section"><a href="what-is-new.html#gemini-blueprint-2.0.x">5.4. Gemini Blueprint 1.x</a></span></dt><dd><dl><dt><span class="section"><a href="what-is-new.html#gemini-blueprint-2.0.x:blueprint">5.4.1. OSGi 4.2 Blueprint Reference Implementation (RI)</a></span></dt><dt><span class="section"><a href="what-is-new.html#gemini-blueprint-2.0.x:jdk5">5.4.2. Java 5</a></span></dt><dt><span class="section"><a href="what-is-new.html#gemini-blueprint-2.0.x:spring-3.x">5.4.3. Spring 3.x</a></span></dt><dt><span class="section"><a href="what-is-new.html#gemini-blueprint-2.0.x:imports">5.4.4. Service Importer Improvements</a></span></dt><dt><span class="section"><a href="what-is-new.html#gemini-blueprint-2.0.x:security">5.4.5. Java 2 Security Integration</a></span></dt></dl></dd><dt><span class="section"><a href="what-is-new.html#gemini-blueprint-1.2.x">5.5. Spring DM 1.2.x</a></span></dt><dd><dl><dt><span class="section"><a href="what-is-new.html#gemini-blueprint-1.2.x:security">5.5.1. Java 2 Security Integration</a></span></dt><dt><span class="section"><a href="what-is-new.html#gemini-blueprint-1.2.x:compendium">5.5.2. Compendium Services Support</a></span></dt><dt><span class="section"><a href="what-is-new.html#gemini-blueprint-1.2.x:sym-name-change">5.5.3. Changed Spring DM Symbolic Names</a></span></dt><dt><span class="section"><a href="what-is-new.html#gemini-blueprint-1.2.x:ebr-usage">5.5.4. Usage of SpringSource Enterprise Bundle Repository (EBR)</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="reference.html">II. Reference Documentation</a></span></dt><dd><dl><dt><span class="chapter"><a href="blueprint.html">6. OSGi 4.2 Blueprint Container</a></span></dt><dd><dl><dt><span class="section"><a href="blueprint.html#blueprint:requirements">6.1. Blueprint Requirements</a></span></dt><dt><span class="section"><a href="blueprint.html#blueprint:differences">6.2. Blueprint/Gemini Blueprint Differences</a></span></dt><dd><dl><dt><span class="section"><a href="blueprint.html#blueprint:differences:xml">6.2.1. XML Declarations</a></span></dt><dt><span class="section"><a href="blueprint.html#blueprint:differences:container">6.2.2. Container Capabilities</a></span></dt></dl></dd><dt><span class="section"><a href="blueprint.html#blueprint:using">6.3. Using Blueprint</a></span></dt></dl></dd><dt><span class="chapter"><a href="bnd-app-ctx.html">7. Bundles and Application Contexts</a></span></dt><dd><dl><dt><span class="section"><a href="bnd-app-ctx.html#bnd-app-ctx:extender">7.1. The Gemini Blueprint Extender Bundle</a></span></dt><dt><span class="section"><a href="bnd-app-ctx.html#bnd-app-ctx:app-creation">7.2. Application Context Creation</a></span></dt><dd><dl><dt><span class="section"><a href="bnd-app-ctx.html#bnd-app-ctx:app-creation:mandatory-deps">7.2.1. Mandatory Service Dependencies</a></span></dt><dt><span class="section"><a href="bnd-app-ctx.html#bnd-app-ctx:app-creation:app-ctx-publication">7.2.2. Application Context Service Publication</a></span></dt></dl></dd><dt><span class="section"><a href="bnd-app-ctx.html#bnd-app-ctx:bnd-lifecycle">7.3. Bundle Lifecycle</a></span></dt><dt><span class="section"><a href="bnd-app-ctx.html#bnd-app-ctx:osgi-resource">7.4. The Resource Abstraction</a></span></dt><dt><span class="section"><a href="bnd-app-ctx.html#bnd-app-ctx:bundle-scope">7.5. Bundle Scope</a></span></dt><dt><span class="section"><a href="bnd-app-ctx.html#bnd-app-ctx:access-bnd-ctx">7.6. Accessing the BundleContext</a></span></dt><dt><span class="section"><a href="bnd-app-ctx.html#bnd-app-ctx:app-destruction">7.7. Application Context Destruction</a></span></dt><dt><span class="section"><a href="bnd-app-ctx.html#bnd-app-ctx:access-bnd-ctx:stop-extender">7.8. Stopping the Extender Bundle</a></span></dt></dl></dd><dt><span class="chapter"><a href="app-deploy.html">8. Packaging and Deploying Spring-based OSGi applications</a></span></dt><dd><dl><dt><span class="section"><a href="app-deploy.html#app-deploy:headers">8.1. Bundle Format And Manifest Headers</a></span></dt><dt><span class="section"><a href="app-deploy.html#app-deploy:headers:blueprint">8.2. Blueprint Manifest Configuration Comparison</a></span></dt><dt><span class="section"><a href="app-deploy.html#app-deploy:extender-configuration">8.3. Extender Configuration Options</a></span></dt><dd><dl><dt><span class="section"><a href="app-deploy.html#app-deploy:extender-configuration:events">8.3.1. Listening To Extender Events</a></span></dt></dl></dd><dt><span class="section"><a href="app-deploy.html#app-deploy:required-libraries">8.4. Required Spring Framework And Gemini Blueprint
+ Bundles</a></span></dt><dt><span class="section"><a href="app-deploy.html#app-deploy:optional-libraries">8.5. Optional Gemini Blueprint Bundles</a></span></dt><dt><span class="section"><a href="app-deploy.html#app-deploy:spring-namespaces">8.6. Spring XML Authoring Support</a></span></dt><dt><span class="section"><a href="app-deploy.html#app-deploy:imports-exports">8.7. Importing and Exporting Packages</a></span></dt><dt><span class="section"><a href="app-deploy.html#app-deploy:ext-libs">8.8. Considerations When Using External Libraries</a></span></dt><dt><span class="section"><a href="app-deploy.html#app-deploy:troubleshooting">8.9. Diagnosing Problems</a></span></dt></dl></dd><dt><span class="chapter"><a href="service-registry.html">9. The Service Registry</a></span></dt><dd><dl><dt><span class="section"><a href="service-registry.html#service-registry:export">9.1. Exporting A Spring Bean As An OSGi Service</a></span></dt><dd><dl><dt><span class="section"><a href="service-registry.html#service-registry:export:registration">9.1.1. Using The Service Registration</a></span></dt><dt><span class="section"><a href="service-registry.html#service-registry:export:service-factory">9.1.2. <code class="interfacename">org.osgi.framework.ServiceFactory</code> Support</a></span></dt><dt><span class="section"><a href="service-registry.html#service-registry:export:intfs">9.1.3. Controlling The Set Of Advertised Service Interfaces For
+ An Exported Service</a></span></dt><dd><dl><dt><span class="section"><a href="service-registry.html#service-registry:export:auto-export">9.1.3.1. Detecting The Advertised Interfaces At Runtime</a></span></dt></dl></dd><dt><span class="section"><a href="service-registry.html#service-registry:export:props">9.1.4. Controlling The Set Of Advertised Properties For An
+ Exported Service</a></span></dt><dt><span class="section"><a href="service-registry.html#service-registry:export:depends-on">9.1.5. The depends-on Attribute</a></span></dt><dt><span class="section"><a href="service-registry.html#service-registry:export:ccl">9.1.6. The context-class-loader Attribute</a></span></dt><dt><span class="section"><a href="service-registry.html#service-registry:export:ranking">9.1.7. The <code class="literal">ranking</code> Attribute</a></span></dt><dt><span class="section"><a href="service-registry.html#service-registry:export:cache">9.1.8. The <code class="literal">cache-target</code> Attribute</a></span></dt><dt><span class="section"><a href="service-registry.html#service-registry:export:service:attributes">9.1.9. <code class="literal">service</code> Element Attributes</a></span></dt><dt><span class="section"><a href="service-registry.html#service-registry:export:lifecycle">9.1.10. Service Registration And Unregistration Lifecycle</a></span></dt><dd><dl><dt><span class="section"><a href="service-registry.html#service-registry:export:lifecycle:interface">9.1.10.1. Using <code class="interfacename">OsgiServiceRegistrationListener</code> Interface</a></span></dt><dt><span class="section"><a href="service-registry.html#service-registry:export:blueprint">9.1.10.2. Blueprint <code class="literal">service</code> Comparison</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="service-registry.html#service-registry:refs">9.2. Defining References To OSGi Services</a></span></dt><dd><dl><dt><span class="section"><a href="service-registry.html#service-registry:annotations-vs-xml-declarations">9.2.1. Referencing services via the @ServiceReference annotation</a></span></dt><dt><span class="section"><a href="service-registry.html#service-registry:refs:availability">9.2.2. Imported Service Availability</a></span></dt><dd><dl><dt><span class="section"><a href="service-registry.html#service-registry:refs:availability:startup">9.2.2.1. Mandatory Services and Application Startup</a></span></dt><dt><span class="section"><a href="service-registry.html#service-registry:export-import-relationship">9.2.2.2. Relationship Between The Service Exporter And Service Importer</a></span></dt></dl></dd><dt><span class="section"><a href="service-registry.html#service-registry:refs:singular">9.2.3. Referencing An Individual Service</a></span></dt><dd><dl><dt><span class="section"><a href="service-registry.html#service-registry:refs:singular:interface">9.2.3.1. Controlling The Set Of Advertised Interfaces For The Imported Service</a></span></dt><dt><span class="section"><a href="service-registry.html#service-registry:refs:singular:filter">9.2.3.2. The <code class="literal">filter</code> Attribute</a></span></dt><dt><span class="section"><a href="service-registry.html#service-registry:refs:singular:bean-name">9.2.3.3. The <code class="literal">bean-name</code> Attribute</a></span></dt><dt><span class="section"><a href="service-registry.html#service-registry:refs:singular:cardinality">9.2.3.4. The <code class="literal">availability</code> Attribute</a></span></dt><dt><span class="section"><a href="service-registry.html#service-registry:refs:singular:depends-on">9.2.3.5. The <code class="literal">depends-on</code> Attribute</a></span></dt><dt><span class="section"><a href="service-registry.html#service-registry:refs:singular:tccl">9.2.3.6. The <code class="literal">context-class-loader</code> Attribute</a></span></dt><dt><span class="section"><a href="service-registry.html#service-registry:refs:singular:sticky">9.2.3.7. The <code class="literal">sticky</code> Attribute</a></span></dt><dt><span class="section"><a href="service-registry.html#service-registry:refs:singular:reference:attributes">9.2.3.8. <code class="literal">reference</code> Element Attributes</a></span></dt><dt><span class="section"><a href="service-registry.html#service-registry:refs:singular:dynamics">9.2.3.9. <code class="literal">reference</code> And OSGi Service Dynamics</a></span></dt><dt><span class="section"><a href="service-registry.html#service-registry:refs:singular:property-editor">9.2.3.10. Getting A Hold Of The Managed Service Reference</a></span></dt></dl></dd><dt><span class="section"><a href="service-registry.html#service-registry:refs:collection">9.2.4. Referencing A Collection Of Services</a></span></dt><dd><dl><dt><span class="section"><a href="service-registry.html#service-registry:refs:collection:greedy-proxying">9.2.4.1. Greedy Proxying</a></span></dt><dt><span class="section"><a href="service-registry.html#service-registry:refs:collection:member-type">9.2.4.2. Member Type</a></span></dt><dt><span class="section"><a href="service-registry.html#service-registry:refs:collection:attributes">9.2.4.3. Collection (<code class="literal">list</code> And <code class="literal">set</code>) Element Attributes</a></span></dt><dt><span class="section"><a href="service-registry.html#service-registry:refs:collection:dynamics">9.2.4.4. <code class="literal">list</code> / <code class="literal">set</code> And OSGi Service Dynamics</a></span></dt><dt><span class="section"><a href="service-registry.html#service-registry:refs:collection:iterator">9.2.4.5. <code class="interfacename">Iterator</code> Contract And Service Collections</a></span></dt></dl></dd><dt><span class="section"><a href="service-registry.html#service-registry:refs:dynamics">9.2.5. Dealing With The Dynamics Of OSGi Imported Services</a></span></dt><dt><span class="section"><a href="service-registry.html#service-registry:refs:blueprint">9.2.6. Blueprint <code class="literal">reference</code> Comparison</a></span></dt></dl></dd><dt><span class="section"><a href="service-registry.html#service-registry:refs:listener-and-proxies">9.3. Listener And Service Proxies</a></span></dt><dt><span class="section"><a href="service-registry.html#service-registry:refs:invoker-bundle-context">9.4. Accessing The Caller <code class="interfacename">BundleContext</code></a></span></dt><dt><span class="section"><a href="service-registry.html#service-registry:refs:listener-best-practices">9.5. Exporter/Importer Listener Best Practices</a></span></dt><dd><dl><dt><span class="section"><a href="service-registry.html#service-registry:refs:listener-best-practices:cycles">9.5.1. Listener And Cyclic Dependencies</a></span></dt></dl></dd><dt><span class="section"><a href="service-registry.html#service-registry:refs:global-defaults">9.6. Service Importer Global Defaults</a></span></dt></dl></dd><dt><span class="chapter"><a href="bundles.html">10. Working With Bundles</a></span></dt><dt><span class="chapter"><a href="compendium.html">11. Compendium Services</a></span></dt><dd><dl><dt><span class="section"><a href="compendium.html#compendium:cm">11.1. Configuration Admin</a></span></dt><dd><dl><dt><span class="section"><a href="compendium.html#compendium:cm:props">11.1.1. Exposing Configuration Admin Entries As <code class="classname">Properties</code></a></span></dt><dt><span class="section"><a href="compendium.html#compendium:cm:managed-properties">11.1.2. Managed Properties</a></span></dt><dd><dl><dt><span class="section"><a href="compendium.html#compendium:cm:managed-properties:update">11.1.2.1. Configuration Admin Runtime Updates</a></span></dt></dl></dd><dt><span class="section"><a href="compendium.html#compendium:cm:managed-service-factories">11.1.3. Managed Service Factories</a></span></dt><dt><span class="section"><a href="compendium.html#compendium:cm:dict">11.1.4. Direct Access To Configuration Data</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="testing.html">12. Testing OSGi based Applications</a></span></dt><dd><dl><dt><span class="section"><a href="testing.html#testing:mocks">12.1. OSGi Mocks</a></span></dt><dt><span class="section"><a href="testing.html#testing:integration">12.2. Integration Testing</a></span></dt><dd><dl><dt><span class="section"><a href="testing.html#testing:integration:simple-test">12.2.1. Creating A Simple OSGi Integration Test</a></span></dt><dt><span class="section"><a href="testing.html#testing:integration:provisioning">12.2.2. Installing Test Prerequisites</a></span></dt><dt><span class="section"><a href="testing.html#testing:integration:advanced-topics">12.2.3. Advanced Testing Framework Topics</a></span></dt><dd><dl><dt><span class="section"><a href="testing.html#testing:integration:customize-manifest">12.2.3.1. Customizing The Test Manifest</a></span></dt><dt><span class="section"><a href="testing.html#testing:integration:specify-test-jar-content">12.2.3.2. Customizing Test Bundle Content</a></span></dt><dt><span class="section"><a href="testing.html#testing:integration:understanding-manifest-creator">12.2.3.3. Understanding The <code class="code">MANIFEST.MF</code> Generation</a></span></dt></dl></dd><dt><span class="section"><a href="testing.html#testing:integration:appContext">12.2.4. Creating An OSGi Application Context</a></span></dt><dt><span class="section"><a href="testing.html#testing:integration:specify-platform">12.2.5. Specifying The OSGi Platform To Use</a></span></dt><dt><span class="section"><a href="testing.html#testing:integration:specify-test-wait-time">12.2.6. Waiting For The Test Dependencies</a></span></dt><dt><span class="section"><a href="testing.html#testing:integration:performance">12.2.7. Testing Framework Performance</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="resources.html">III. Other Resources</a></span></dt><dd><dl><dt><span class="chapter"><a href="links.html">13. Useful Links</a></span></dt></dl></dd><dt><span class="part"><a href="appendixes.html">IV. Appendixes</a></span></dt><dd><dl><dt><span class="appendix"><a href="appendix-security.html">A. Security Integration</a></span></dt><dt><span class="appendix"><a href="appendix-pde-integration.html">B. Eclipse Plug-in Development integration</a></span></dt><dt><span class="appendix"><a href="appendix-tips.html">C. Useful OSGi tips</a></span></dt><dd><dl><dt><span class="section"><a href="appendix-tips.html#appendix-tips:fragments">C.1. OSGi Fragments</a></span></dt></dl></dd><dt><span class="appendix"><a href="appendix-roadmap.html">D. Roadmap</a></span></dt><dd><dl><dt><span class="section"><a href="appendix-roadmap.html#d21e3346">D.1. Start Level Integration</a></span></dt></dl></dd><dt><span class="appendix"><a href="appendix-osgi-repo.html">E. Gemini Blueprint OSGi Repository</a></span></dt><dd><dl><dt><span class="section"><a href="appendix-osgi-repo.html#appendix-osgi-repo:old-repo">E.1. Gemini Blueprint Temporary OSGi Repository</a></span></dt><dd><dl><dt><span class="section"><a href="appendix-osgi-repo.html#appendix-osgi-repo:conventions">E.1.1. Repository Conventions</a></span></dt><dt><span class="section"><a href="appendix-osgi-repo.html#appendix-osgi-repo:browsing">E.1.2. Browsing The Repository Content</a></span></dt><dt><span class="section"><a href="appendix-osgi-repo.html#appendix-osgi-repo:maven">E.1.3. Using The Repository With Maven</a></span></dt><dt><span class="section"><a href="appendix-osgi-repo.html#appendix-osgi-repo:ant">E.1.4. Using The Repository With Ant/Ivy</a></span></dt></dl></dd></dl></dd><dt><span class="appendix"><a href="appendix-schema.html">F. Gemini Blueprint Schema</a></span></dt><dt><span class="appendix"><a href="appendix-ack.html">G. Acknowledgments</a></span></dt></dl></dd></dl></div>
+
+
+
+
+
+
+
+
+
+
+</div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left">&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="preface.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;Preface</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/introduction.html b/documentation/reference/3.0.0.M01/html/introduction.html
new file mode 100644
index 0000000..9be2010
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/introduction.html
@@ -0,0 +1,32 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Part&nbsp;I.&nbsp;Introduction</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="prev" href="preface.html" title="Preface"><link rel="next" href="eclipse-migration.html" title="Chapter&nbsp;1.&nbsp;Spring Dynamic Modules becomes Eclipse Gemini Blueprint"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="part"><div class="titlepage"><div><div><h1 class="title"><a name="introduction"></a>Part&nbsp;I.&nbsp;Introduction</h1></div></div></div>
+
+
+
+ <div class="partintro"><div></div>
+ <p>
+ </p><p>This document is the reference guide for Gemini Blueprint. It explains the relationship
+ between Gemini Blueprint and the OSGi 4.2 Blueprint specification, defines Gemini Blueprint
+ concepts and semantics, the syntax for the <a class="ulink" href="http://www.osgi.org" target="_top">
+ OSGi Service Platform</a> based namespaces, the Gemini Blueprint extender bundle
+ and the OSGi manifest header entries defined by Gemini Blueprint.</p><p>
+
+ </p><p>For an introduction to OSGi or Spring, or Gemini Blueprint examples, please refer to
+ <a class="xref" href="get-started.html" title="Chapter&nbsp;4.&nbsp;Getting Started">Chapter&nbsp;4, <i>Getting Started</i></a> - this documentation refers only to Gemini Blueprint and assumes the user is familiar
+ with OSGi and Spring concepts.</p><p>
+
+ </p><p><span class="emphasis"><em>Note: OSGi is a trademark of the OSGi Alliance. Project
+ name is pending final approval from the Alliance.</em></span></p><p>
+
+ </p>
+
+ </div>
+
+
+
+
+
+
+ </div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="preface.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="eclipse-migration.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Preface&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;1.&nbsp;Spring Dynamic Modules becomes Eclipse Gemini Blueprint</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/issues.html b/documentation/reference/3.0.0.M01/html/issues.html
new file mode 100644
index 0000000..e5b6950
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/issues.html
@@ -0,0 +1,20 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Eclipse Gemini Blueprint</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="issues.html" title="Eclipse Gemini Blueprint"><link rel="next" href="preface.html" title="Preface"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="book"><div class="titlepage"><div><div><h1 class="title"><a name="d5e1"></a>Eclipse Gemini Blueprint</h1></div><div><h2 class="subtitle">Known Issues</h2></div><div><div class="authorgroup">
+ <div class="author"><h3 class="author"><span class="firstname">Costin</span> <span class="surname">Leau</span></h3><div class="affiliation">SpringSource, division of VMware</div></div>
+ </div></div><div><p class="releaseinfo">3.0.0.M01</p></div><div><p class="copyright">Copyright &copy; 2006 -, 2011 VMware Inc., Oracle Inc.</p></div><div><div class="legalnotice"><a name="d5e11"></a>
+ <p>Documentation made available under the terms of the Eclipse Public License v1.0
+ and Apache License v2.0 which accompanies this distribution.
+ The Eclipse Public License is available at <a class="ulink" href="http://www.eclipse.org/legal/epl-v10.html" target="_top">http://www.eclipse.org/legal/epl-v10.html</a> and
+ the Apache License v2.0 is available at <a class="ulink" href="http://www.opensource.org/licenses/apache2.0.php" target="_top">http://www.opensource.org/licenses/apache2.0.php</a>.
+ You may elect to redistribute this code under either of these licenses.</p>
+ </div></div></div><hr></div><div class="toc"><dl class="toc"><dt><span class="preface"><a href="preface.html">Preface</a></span></dt><dt><span class="chapter"><a href="known-issues.html">1. Known Issues</a></span></dt><dd><dl><dt><span class="section"><a href="known-issues.html#OSGI-237">1.1. Publishing prototypes as OSGi services</a></span></dt></dl></dd></dl></div>
+
+
+
+
+
+
+
+</div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left">&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="preface.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;Preface</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/known-issues.html b/documentation/reference/3.0.0.M01/html/known-issues.html
new file mode 100644
index 0000000..88f7784
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/known-issues.html
@@ -0,0 +1,18 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Chapter&nbsp;1.&nbsp;Known Issues</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="issues.html" title="Eclipse Gemini Blueprint"><link rel="up" href="issues.html" title="Eclipse Gemini Blueprint"><link rel="prev" href="preface.html" title="Preface"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="known-issues"></a>Chapter&nbsp;1.&nbsp;Known Issues</h1></div></div></div>
+
+
+ <p>As a side note, it worth pointing out that the issues below are not really bugs but rather improvements.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="OSGI-237"></a>1.1.&nbsp;Publishing prototypes as OSGi services</h2></div></div></div>
+
+ <p>Due to the way OSGi platform deals with OSGi services (it caches the instance and returns it every time), prototypes are not fully supported.
+ Spring DM publishes a proxy that on each call, delegates back to the target application context for retrieving the instance. While with other beans
+ this works, in case of prototypes, this results in one-instance-per-invocation which is incorrect. Additional functionality needs to be added
+ to fully support prototypes even though, as pointed out, this involves a knowledge between Client/Server regarding the publication contract.</p>
+ <p>See <a class="ulink" href="http://jira.springframework.org/browse/OSGI-237" target="_top">OSGI-237</a></p>
+ </div>
+
+ </div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="preface.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="issues.html">Home</a></td><td width="40%" align="right">&nbsp;</td></tr><tr><td width="40%" align="left" valign="top">Preface&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/links.html b/documentation/reference/3.0.0.M01/html/links.html
new file mode 100644
index 0000000..bd73dde
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/links.html
@@ -0,0 +1,19 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Chapter&nbsp;13.&nbsp;Useful Links</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="resources.html" title="Part&nbsp;III.&nbsp;Other Resources"><link rel="prev" href="resources.html" title="Part&nbsp;III.&nbsp;Other Resources"><link rel="next" href="appendixes.html" title="Part&nbsp;IV.&nbsp;Appendixes"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="links"></a>Chapter&nbsp;13.&nbsp;Useful Links</h2></div></div></div>
+
+
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><span class="emphasis"><em>Eclipse Gemini Blueprint Home Page</em></span> - <a class="ulink" href="http://www.eclipse.org/gemini/blueprint/" target="_top">here</a></li><li class="listitem"><span class="emphasis"><em>SpringSource OSGi blog</em></span> - <a class="ulink" href="http://blog.springsource.com/category/osgi/" target="_top">here</a></li><li class="listitem"><span class="emphasis"><em>Spring DM Demos</em></span> - <a class="ulink" href="http://www.springframework.org/osgi/demos" target="_top">here</a></li><li class="listitem"><span class="emphasis"><em>Getting Started with OSGi</em></span> - by Neil Bartlett
+ <a class="ulink" href="http://neilbartlett.name/blog/osgi-articles/" target="_top">here</a> and
+ <a class="ulink" href="http://www.eclipse.org/resources/?author=Neil%20Bartlett" target="_top">here</a>.
+ </li><li class="listitem"><span class="emphasis"><em>Equinox Documents</em></span> -
+ <a class="ulink" href="http://www.eclipse.org/equinox/documents/" target="_top">here</a>
+ </li><li class="listitem"><span class="emphasis"><em>Felix-related presentations</em></span> - various
+ <a class="ulink" href="http://felix.apache.org/site/presentations.html" target="_top">presentations</a>
+ hosted by Apache Felix project.
+ </li><li class="listitem"><span class="emphasis"><em>Launching Gemini Blueprint using pax-runner</em></span> -
+ <a class="ulink" href="http://wiki.ops4j.org/confluence/display/ops4j/Pax+Runner+-+Screencast+-+Spring+OSGi" target="_top">
+ screencast</a>
+ </li><li class="listitem"><span class="emphasis"><em>OSGi Alliance Blog</em></span> - <a class="ulink" href="http://www.osgi.org/blog/" target="_top">here</a></li></ul></div>
+</div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="resources.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="appendixes.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part&nbsp;III.&nbsp;Other Resources&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;Part&nbsp;IV.&nbsp;Appendixes</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/preface.html b/documentation/reference/3.0.0.M01/html/preface.html
new file mode 100644
index 0000000..5108826
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/preface.html
@@ -0,0 +1,32 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Preface</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="prev" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="next" href="introduction.html" title="Part&nbsp;I.&nbsp;Introduction"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="preface"><div class="titlepage"><div><div><h1 class="title"><a name="preface"></a>Preface</h1></div></div></div>
+
+ <p>
+ Application development has seen significant changes in the last years, moving towards a simpler, more agile,
+ POJO-based programming model in order to keep a fast pace. Dependency injection and Aspect Oriented Programming,
+ which were once <span class="emphasis"><em>bleeding edge</em></span> ideas, are used on a daily basis by most developers to manage
+ and simplify the complexity of their applications.</p>
+
+ <p>However, in terms of deployment, things have remained mainly unchanged. Even though code bases are divided into
+ modules, whether logical, conceptual or physical, at runtime they are seen as one monolithic application in which,
+ making a change (be it large or small), requires a restart. <a class="ulink" href="http://www.osgi.org" target="_top">OSGi</a> aims
+ to change this by allowing applications to be divided into <span class="emphasis"><em>modules</em></span> that can have different
+ life cycles, dependencies and still exist as a whole.</p>
+
+ <p>Eclipse Gemini Blueprint (formerly Spring Dynamic Modules) focuses on integrating Spring Framework's powerful, non-invasive programming model and
+ concepts with the dynamics and modularity of the OSGi platform. It allows transparent exporting and importing of OSGi
+ services, life cycle management and control. Moreover, the Spring DM model was standardized in OSGi r4.2, in the form
+ of the <a class="ulink" href="http://www.osgi.org/Specifications/Drafts" target="_top">Blueprint</a> Container for which Eclipse Gemini Blueprint
+ serves as the reference implementation (RI).
+ </p>
+ <p>
+ While every effort has been made to ensure that this documentation is comprehensive and there are no errors,
+ nevertheless some topics might require more explanation and some typos might have crept in. If you do spot any
+ mistakes or even more serious errors and you can spare a few cycles during lunch, please do bring the error
+ to the attention of the Eclipse Gemini Blueprint team by raising an
+ <a class="ulink" href="https://bugs.eclipse.org/bugs/buglist.cgi?product=Gemini.Blueprint" target="_top">issue</a>. Thank you.
+ </p>
+
+</div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="index.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="introduction.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Eclipse Gemini Blueprint Reference Guide&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;Part&nbsp;I.&nbsp;Introduction</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/reference.html b/documentation/reference/3.0.0.M01/html/reference.html
new file mode 100644
index 0000000..c1de884
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/reference.html
@@ -0,0 +1,59 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Part&nbsp;II.&nbsp;Reference Documentation</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="prev" href="what-is-new.html" title="Chapter&nbsp;5.&nbsp;What is new?"><link rel="next" href="blueprint.html" title="Chapter&nbsp;6.&nbsp;OSGi 4.2 Blueprint Container"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="part"><div class="titlepage"><div><div><h1 class="title"><a name="reference"></a>Part&nbsp;II.&nbsp;Reference Documentation</h1></div></div></div>
+
+
+ <div class="partintro"><div><div><div><h1 class="title"><a name="d21e232"></a>Document structure</h1></div></div></div>
+
+
+ <p>This part of the reference documentation explains the core functionality
+ offered by Gemini Blueprint.</p>
+
+ <p><a class="xref" href="blueprint.html" title="Chapter&nbsp;6.&nbsp;OSGi 4.2 Blueprint Container">Chapter&nbsp;6, <i>OSGi 4.2 Blueprint Container</i></a> describes the relationship between Spring DM and OSGi 4.2
+ Blueprint Container specification (part of the Compendium Services) and the similiarities and
+ differences between them.</p>
+
+ <p><a class="xref" href="bnd-app-ctx.html" title="Chapter&nbsp;7.&nbsp;Bundles and Application Contexts">Chapter&nbsp;7, <i>Bundles and Application Contexts</i></a> describes the relationship between an OSGi Bundle and a
+ Spring Application Context,
+ and introduces the Spring Extender Bundle support for instantiating
+ application contexts automatically.</p>
+
+ <p><a class="xref" href="app-deploy.html" title="Chapter&nbsp;8.&nbsp;Packaging and Deploying Spring-based OSGi applications">Chapter&nbsp;8, <i>Packaging and Deploying Spring-based OSGi applications</i></a> describes how to deploy the Spring Framework jar files in
+ an OSGi environment, and how to reference external APIs from your
+ application bundles should you need to do so. This chapter also explains
+ some of the issues to be aware of when using existing enterprise
+ libraries not designed for OSGi in an OSGi environment.</p>
+
+ <p><a class="xref" href="service-registry.html" title="Chapter&nbsp;9.&nbsp;The Service Registry">Chapter&nbsp;9, <i>The Service Registry</i></a> describes how to export Spring
+ beans as services in the OSGi service registry, and how to inject
+ references to OSGi services into beans. This chapter also defines how
+ the dynamic life-cycle of OSGi services and bundles is supported.</p>
+
+ <p><a class="xref" href="bundles.html" title="Chapter&nbsp;10.&nbsp;Working With Bundles">Chapter&nbsp;10, <i>Working With Bundles</i></a> describes how to declare a bean
+ that represents an OSGi bundle, including support for installing new
+ bundles into the OSGi platform.</p>
+
+ <p><a class="xref" href="compendium.html" title="Chapter&nbsp;11.&nbsp;Compendium Services">Chapter&nbsp;11, <i>Compendium Services</i></a> describes the support provided
+ for the <a class="ulink" href="http://www2.osgi.org/Release4/Download" target="_top">OSGi
+ Compendium Services</a>, specifically the Configuration Admin
+ service.</p>
+
+ <p><a class="xref" href="testing.html" title="Chapter&nbsp;12.&nbsp;Testing OSGi based Applications">Chapter&nbsp;12, <i>Testing OSGi based Applications</i></a> explains the
+ integration testing support provided by Gemini Blueprint. This
+ support enables you to write simple JUnit integration tests that can
+ start up an OSGi environment, install the bundles needed for the
+ integration test, execute the test case(s) inside of OSGi, and return
+ the results to the runner. This makes it easy to integrate OSGi
+ integration testing into any environment that can work with
+ JUnit.</p>
+
+ </div>
+
+
+
+
+
+
+
+ </div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="what-is-new.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="blueprint.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;5.&nbsp;What is new?&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;6.&nbsp;OSGi 4.2 Blueprint Container</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/requirements.html b/documentation/reference/3.0.0.M01/html/requirements.html
new file mode 100644
index 0000000..f06f0b3
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/requirements.html
@@ -0,0 +1,22 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Chapter&nbsp;3.&nbsp;Requirements</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="introduction.html" title="Part&nbsp;I.&nbsp;Introduction"><link rel="prev" href="why-Spring DM.html" title="Chapter&nbsp;2.&nbsp;Why Gemini Blueprint?"><link rel="next" href="get-started.html" title="Chapter&nbsp;4.&nbsp;Getting Started"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="requirements"></a>Chapter&nbsp;3.&nbsp;Requirements</h2></div></div></div>
+
+
+ <p>Gemini Blueprint 2.x binaries require JDK level 7.0 or above,
+ and <a class="ulink" href="http://www2.osgi.org/Specifications/HomePage?section=2" target="_top">OSGi
+ R5.x</a> (though R4.1 and even R4.0 might work) or above. For JDK &lt; 1.7, consider using Gemini Blueprint 1.x.
+ For JDK &lt; 1.5, consider using Spring Dynamic Modules 1.x.
+ </p>
+ <p>
+ Bundles deployed for use with Gemini Blueprint should specify
+ <code class="literal">"Bundle-ManifestVersion: 2"</code> in their manifest (require OSGi R4 behaviour).
+ Note that for OSGi 4.2 specific functionality (such as the Blueprint Container),
+ an appropriate container needs to be used.
+ </p>
+ <p>
+ We test against <a class="ulink" href="http://www.eclipse.org/equinox/" target="_top">Equinox</a> and <a class="ulink" href="http://felix.apache.org/" target="_top">Felix</a> as part of our
+ release process.
+ </p>
+ </div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="why-Spring DM.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="get-started.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;2.&nbsp;Why Gemini Blueprint?&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;4.&nbsp;Getting Started</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/resources.html b/documentation/reference/3.0.0.M01/html/resources.html
new file mode 100644
index 0000000..d476dcb
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/resources.html
@@ -0,0 +1,16 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Part&nbsp;III.&nbsp;Other Resources</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="prev" href="testing.html" title="Chapter&nbsp;12.&nbsp;Testing OSGi based Applications"><link rel="next" href="links.html" title="Chapter&nbsp;13.&nbsp;Useful Links"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="part"><div class="titlepage"><div><div><h1 class="title"><a name="resources"></a>Part&nbsp;III.&nbsp;Other Resources</h1></div></div></div>
+
+ <div class="partintro"><div></div>
+ <p>
+ In addition to this reference documentation, there are a number of
+ other resources that may help you learn how to use OSGi and Eclipse Gemini Blueprint.
+ These additional, third-party resources are enumerated in this
+ section.
+ </p>
+ </div>
+
+
+ </div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="testing.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="links.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;12.&nbsp;Testing OSGi based Applications&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;13.&nbsp;Useful Links</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/service-registry.html b/documentation/reference/3.0.0.M01/html/service-registry.html
new file mode 100644
index 0000000..479dfa6
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/service-registry.html
@@ -0,0 +1,1789 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Chapter&nbsp;9.&nbsp;The Service Registry</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="reference.html" title="Part&nbsp;II.&nbsp;Reference Documentation"><link rel="prev" href="app-deploy.html" title="Chapter&nbsp;8.&nbsp;Packaging and Deploying Spring-based OSGi applications"><link rel="next" href="bundles.html" title="Chapter&nbsp;10.&nbsp;Working With Bundles"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="service-registry"></a>Chapter&nbsp;9.&nbsp;The Service Registry</h2></div></div></div>
+
+
+ <p>The OSGi service registry enables a bundle to publish objects to a
+ shared registry, advertised via a given set of Java interfaces. Published
+ services also have service properties associated with them in the
+ registry. The registry is a crucial feature of OSGi, facilitating decoupling
+ between bundles by promoting a dynamic collaborative model based on
+ a service-oriented paradigm (publish/find/bind).</p>
+
+ <p>Gemini Blueprint integrates tightly with the service registry, allowing
+ clients to publish, find and bind services in a POJO-friendly manner, without coupling
+ themselves to the OSGi API.</p>
+ <p>By using the <code class="literal">osgi</code> namespace for Spring (see
+ <a class="xref" href="appendix-schema.html" title="Appendix&nbsp;F.&nbsp;Gemini Blueprint Schema">Appendix&nbsp;F, <i>Gemini Blueprint Schema</i></a>) one can be indicate what Spring beans to export
+ as OSGi services (and how) and to define the criteria and the manner in which
+ services available in the OSGi registry are imported as beans.
+ </p>
+
+ <p>
+ Just like the rest of the namespaces, the <code class="literal">osgi</code> namespace can be embedded
+ or nested inside another top-level namespace (typically the Spring <code class="literal">beans</code>
+ namespace) or be made the default namespace.</p>
+
+ <p>The following example shows the use of the <code class="literal">osgi</code>
+ namespace within the familiar Spring beans element:</p>
+
+ <div class="programlistingco"><pre class="programlisting"><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-directive">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans"</span> <span class="co" id="service-registry.xml.ns.default.beans"><img src="images/callouts/1.png" alt="(1)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:xsi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:osgi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint"</span> <span class="co" id="service-registry.xml.ns.default.beans.osgi"><img src="images/callouts/2.png" alt="(2)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xsi:schemaLocation</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans.xsd</span> <span class="co" id="service-registry.xml.ns.default.beans.beans.25"><img src="images/callouts/3.png" alt="(3)"></span><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">
+ http://www.eclipse.org/gemini/blueprint/schema/blueprint
+ http://www.eclipse.org/gemini/blueprint/schema/blueprint/gemini-blueprint.xsd"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"simpleServiceOsgi"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"simpleService"</span> <span class="co" id="service-registry.xml.ns.default.beans.osgi.service"><img src="images/callouts/4.png" alt="(4)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.xyz.MyService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/beans&gt;</strong></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p>Use Spring Framework <code class="literal">beans</code> schema as the default namespace.
+ </p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>Import Gemini Blueprint schema and associate a prefix with its namespace (<code class="literal">osgi</code> in this example).
+ </p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/3.png" alt="3" border="0"></span></p></td><td valign="top" align="left">
+ <p>Make sure to import Spring beans schema version <span class="emphasis"><em>3.0</em></span> or higher.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/4.png" alt="4" border="0"></span></p></td><td valign="top" align="left">
+ <p>Use Gemini Blueprint elements using the declared namespace prefix (in this example <code class="literal">osgi</code>).</p>
+ </td></tr></table></div></div>
+
+ <p>Spring DM users can still use its namespace which is still supported by the Gemini Blueprint bundles. So the above configuration becomes:</p>
+
+ <div class="programlistingco"><pre class="programlisting"><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-directive">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans"</span> <span class="co" id="service-registry.xml.ns.default.old.beans"><img src="images/callouts/1.png" alt="(1)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:xsi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:osgi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/osgi"</span> <span class="co" id="service-registry.xml.ns.default.old.beans.osgi"><img src="images/callouts/2.png" alt="(2)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xsi:schemaLocation</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans.xsd</span> <span class="co" id="service-registry.xml.ns.default.old.beans.beans.25"><img src="images/callouts/3.png" alt="(3)"></span><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">
+ http://www.springframework.org/schema/osgi
+ http://www.springframework.org/schema/osgi/spring-osgi.xsd"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"simpleServiceOsgi"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"simpleService"</span> <span class="co" id="service-registry.xml.ns.default.old.beans.osgi.service"><img src="images/callouts/4.png" alt="(4)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.xyz.MyService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/beans&gt;</strong></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p>Use Spring Framework <code class="literal">beans</code> schema as the default namespace.
+ </p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>Import Gemini Blueprint schema and associate a prefix with its namespace (<code class="literal">osgi</code> in this example).
+ </p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/3.png" alt="3" border="0"></span></p></td><td valign="top" align="left">
+ <p>Make sure to import Spring beans schema version <span class="emphasis"><em>3.0</em></span>.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/4.png" alt="4" border="0"></span></p></td><td valign="top" align="left">
+ <p>Use Gemini Blueprint elements using the declared namespace prefix (in this example <code class="literal">osgi</code>).</p>
+ </td></tr></table></div></div>
+
+ <p>Through-out this documentation both the Gemini Blueprint and Spring DM namespaces will be used interchangeably - in fact, at a close look one will notice the two are identical (except for the
+ schema location declaration). As much as possible, new apps should use the Gemini Blueprint namespace as the Spring DM ones while supported, are being deprecated.</p>
+
+ <p>Using the OSGi namespace as a top-level namespace, the same service
+ would be declared as follows:</p>
+
+ <div class="programlistingco"><pre class="programlisting"><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-directive">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans:beans</strong> <span class="co" id="service-registry.xml.ns.default.osgi.beans.root.element.1"><img src="images/callouts/1.png" alt="(1)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint"</span> <span class="co" id="service-registry.xml.ns.default.osgi"><img src="images/callouts/2.png" alt="(2)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:xsi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:beans</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans"</span> <span class="co" id="service-registry.xml.ns.default.osgi.beans"><img src="images/callouts/3.png" alt="(3)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xsi:schemaLocation</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint
+ http://www.eclipse.org/gemini/blueprint/schema/blueprint/gemini-blueprint.xsd
+ http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans.xsd"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong> <span class="co" id="service-registry.xml.ns.default.osgi.beans.25"><img src="images/callouts/4.png" alt="(4)"></span>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"simpleServiceOsgi"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"simpleService"</span> <span class="co" id="service-registry.xml.ns.default.osgi.service"><img src="images/callouts/5.png" alt="(5)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.xyz.MyService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/beans:beans&gt;</strong> <span class="co" id="service-registry.xml.ns.default.osgi.beans.root.element.2"><img src="images/callouts/1.png" alt="(1)"></span>
+</pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p><code class="literal">beans</code> root element has to be prefixed with Spring Framework beans schema prefix (<code class="literal">beans</code> in this example).
+ </p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>Use Gemini Blueprint schema as the default namespace.
+ </p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/3.png" alt="3" border="0"></span></p></td><td valign="top" align="left">
+ <p>Import Spring Framework <code class="literal">beans</code> schema and associate a prefix with its namespace (<code class="literal">beans</code> in this example).
+ </p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/4.png" alt="4" border="0"></span></p></td><td valign="top" align="left">
+ <p>Make sure to import Spring beans schema version <span class="emphasis"><em>2.5</em></span>.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/5.png" alt="5" border="0"></span></p></td><td valign="top" align="left">
+ <p>Use Gemini Blueprint elements without any prefix.</p>
+ </td></tr></table></div></div>
+
+ <p>Using the OSGi namespace as a top-level namespace is particularly
+ convenient when following the configuration <a class="link" href="app-deploy.html#app-deploy:headers:xml:tip" title="Tip">recommendation</a> from the previous section,
+ to use a dedicated configuration file for all OSGi-related declarations.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="service-registry:export"></a>9.1.&nbsp;Exporting A Spring Bean As An OSGi Service</h2></div></div></div>
+
+
+ <p>The <code class="literal">service</code> element is used to define a bean
+ representing an exported OSGi service. There are no requirements for
+ the class or object being exported - practically any bean can be exported.
+ At a minimum you must specify the bean to be exported, and the
+ <span class="emphasis"><em>service interface</em></span> that the service advertises.</p>
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">The publication <span class="emphasis"><em>interface</em></span> is used by service consumers, to identify the service. A service instance must implement the interface
+ - specifying a non-implemented interface results in an error. The term <span class="emphasis"><em>interface</em></span> is used in an abstract form; in practice any Java
+ interface or class, implemented or extended by the service instance can be specified.</td></tr></table></div>
+
+ <p>For example, the declaration</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beanToPublish"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MessageService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+
+ <p>exports the bean with name <code class="literal">beanToPublish</code> with
+ interface <code class="literal">com.xyz.MessageService</code>. The published
+ service will have a service property with the name
+ <code class="literal">org.eclipse.gemini.blueprint.bean.name</code> set to the name of
+ the target bean being registered (<code class="literal">beanToPublish</code> in
+ this case).</p>
+
+ <p>As an alternative to exporting a named bean, the bean to be
+ exported to the service registry may be defined as an anonymous inner
+ bean of the service element. Typically the top-level namespace would be
+ the <code class="literal">beans</code> namespace when using this style:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MessageService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"SomeClass"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ ...
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:service&gt;</strong></pre>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:registration"></a>9.1.1.&nbsp;Using The Service Registration</h3></div></div></div>
+
+ <p>Each <code class="literal">service</code> declaration, provides control access to the exported service.
+ The declaration returns an element of type <code class="interfacename">org.osgi.framework.ServiceRegistration</code> which can be
+ used to read or even modify the properties published for the OSGi service. Since DM 2.X, the definition
+ has been aligned with the Blueprint spec and unregistration of the service is not possible any more (an exception is thrown
+ if the <code class="methodname">unregister</code> is called). Additionally, the returned service registration will track
+ the service being registered (if multiple registration occur, these will be reflected in the returned registration object).
+ See <a class="xref" href="service-registry.html#service-registry:export-import-relationship" title="9.2.2.2.&nbsp;Relationship Between The Service Exporter And Service Importer">Section&nbsp;9.2.2.2, &#8220;Relationship Between The Service Exporter And Service Importer&#8221;</a> for more information on when registration/unregistration of
+ exported services can occur.</p>
+
+ <p>To use the service registration, simply inject the service bean definition into the relevant class; the example below
+ shows one way of updating the service properties from Java:
+ </p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"myServiceRegistration"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beanToPublish"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MessageService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"propUpdater"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.ServicePropertiesUpdater"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"serviceRegistration ref="</span><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">myServiceRegistration"/&gt;</span>
+<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">&lt;/bean&gt;</span></pre>
+
+ <p>Where <code class="classname">ServicePropertiesUpdater</code> can have the following definition:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">class</strong> ServicePropertiesUpdater <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">implements</strong> BeanNameAware {
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">private</strong> ServiceRegistration serviceRegistration;
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">private</strong> String beanName;
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> setServiceRegistration(ServiceRegistration serviceRegistration) {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">this</strong>.serviceRegistration = serviceRegistration;
+ }
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> setBeanName(String beanName) {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">this</strong>.beanName = beanName;
+ }
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> update() {
+ ServiceReference reference = serviceRegistration.getReference();
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">// get current properties</em>
+ Dictionary dictionary = OsgiServiceReferenceUtils.getServiceProperties(reference);
+ dictionary.put(<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"last-update"</em></strong>, <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">new</strong> Date());
+ dictionary.put(<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"updated-by"</em></strong>, beanName);
+ dictionary.put(<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"user.name"</em></strong>, System.getProperties().getProperty(<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"java.version"</em></strong>));
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">// update properties</em>
+ serviceRegistration.setProperties(dictionary);
+ }
+}</pre>
+
+ <p>Each time the update() method is called, the service properties are retrived, new ones are added and finally the service
+ registration updated.</p>
+ </div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:service-factory"></a>9.1.2.&nbsp;<code class="interfacename">org.osgi.framework.ServiceFactory</code> Support</h3></div></div></div>
+
+ <p>OSGi Service Platform Core Specification allows services not just to be registered directly,
+ but also to be created on demand, through the <code class="interfacename">org.osgi.framework.ServiceFactory</code>
+ interface (see section 5.6). Gemini Blueprint/Spring DM recognizes this OSGi interface and honours its contract,
+ by forwarding each new bundle request, to the backing bean implementing the aforementioned interface.</p>
+
+ <p> As an alternative to implementing the OSGi API, one can use the <code class="literal">bundle</code> scope, introduced
+ by Gemini Blueprint/Spring DM which offers a <span class="emphasis"><em>instance-per-bundle</em></span> contract (see <a class="xref" href="bnd-app-ctx.html#bnd-app-ctx:bundle-scope" title="7.5.&nbsp;Bundle Scope">Section&nbsp;7.5, &#8220;Bundle Scope&#8221;</a>
+ for more information). To declare a bean with <code class="literal">bundle</code> scope
+ simply use the <code class="literal">scope</code> attribute of the
+ <code class="literal">bean</code> element:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beanToBeExported"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MessageService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beanToBeExported"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">scope</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"bundle"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MessageServiceImpl"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:intfs"></a>9.1.3.&nbsp;Controlling The Set Of Advertised Service Interfaces For
+ An Exported Service</h3></div></div></div>
+
+
+ <p>The OSGi Service Platform Core Specification defines the term
+ <span class="emphasis"><em>service interface</em></span> to represent the specification
+ of a service's public methods. Typically this will be a Java
+ interface, but the specification also supports registering service
+ objects under a class name, so the phrase <span class="emphasis"><em>service
+ interface</em></span> can be interpreted as referring to either an
+ interface or a class.</p>
+
+ <p>There are several options for specifying the service
+ interface(s) under which the exported service is registered. The
+ simplest mechanism, shown above, is to use the
+ <code class="literal">interface</code> attribute to specify a fully-qualified
+ interface name. To register a service under multiple interfaces the
+ nested <code class="literal">interfaces</code> element can be used in place of
+ the <code class="literal">interface</code> attribute.</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beanToBeExported"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:interfaces&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;value&gt;</strong>com.xyz.MessageService<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/value&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;value&gt;</strong>com.xyz.MarkerInterface<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/value&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:interfaces&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:service&gt;</strong></pre>
+
+ <p>It is illegal to use both <code class="literal">interface</code> attribute and
+ <code class="literal">interfaces</code> element at the same time - use only one of them.
+ </p>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:export:auto-export"></a>9.1.3.1.&nbsp;Detecting The Advertised Interfaces At Runtime</h4></div></div></div>
+
+ <div class="sidebar"><div class="titlepage"><div><div><p class="title"><b>Hierarchy visibility</b></p></div></div></div>
+
+
+ <p>Note that when using <code class="literal">auto-export</code>, only types visible to the
+ bundle exporting the service are registered. For example, a
+ super-interface <code class="literal">SI</code> would not be exported as a
+ supported service interface even when using
+ <code class="literal">auto-export="interfaces"</code> if <code class="literal">SI</code>
+ was not on the exporting bundle's classpath.</p>
+
+ <p>Even if exported service class does implement <code class="literal">SI</code> transitively based
+ on its parent, if the declaring bundle doesn't import the
+ interface, the class is unknown to the exported service. While this
+ might seem counter intuitive, it is actually one of the most powerful features of OSGi
+ which give the bundle authors control over the class visibility and path.
+ </p>
+
+ <p>Please see the FAQ for a more detailed explanation.</p>
+ </div>
+
+ <p>Using the <code class="literal">auto-export</code> attribute you can avoid
+ the need to explicitly declare the service interfaces at all by analyzing the
+ object class hierarchy and its interfaces.</p>
+ <p>
+ The <code class="literal">auto-export</code> attribute can have one of four
+ values:</p>
+
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <p><code class="literal">disabled</code> : the default value; no auto-detected of service
+ interfaces is undertaken and the <code class="literal">interface</code>
+ attribute or <code class="literal">interfaces</code> element must be used
+ instead.</p>
+ </li><li class="listitem">
+ <p><code class="literal">interfaces</code> : the service will be registered using all of the
+ Java interface types implemented by the bean to be exported</p>
+ </li><li class="listitem">
+ <p><code class="literal">class-hierarchy</code> : the service will be registered using the
+ exported bean's implementation type and super-types</p>
+ </li><li class="listitem">
+ <p><code class="literal">all-classes</code> : the service will be registered using the exported
+ bean's implementation type and super-types plus all interfaces
+ implemented by the bean.</p>
+ </li></ul></div>
+
+ <p>
+ <code class="literal">auto-export</code> and <code class="literal">interface(s)</code> option are not exclusive; both
+ can be used at the same time for fine grained control over the advertised interfaces if there is such
+ a need. However, the former option should be enough for most cases.
+ </p>
+ <p>For example, to automatically register a bean under all of the
+ interfaces that it supports you would declare:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beanToBeExported"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">auto-export</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"interfaces"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+
+ <p>Given the interface hierarchy:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">interface</strong> SuperInterface {}
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">interface</strong> SubInterface <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">extends</strong> SuperInterface {}</pre>
+
+ <p>then a service registered as supporting the
+ <code class="literal">SubInterface</code> interface is <span class="emphasis"><em>not</em></span>
+ considered a match in OSGi when a lookup is done for services
+ supporting the <code class="literal">SuperInterface</code> interface. For this
+ reason it is a best practice to export all interfaces supported by the
+ service being registered explicitly, using either the
+ <code class="literal">interfaces</code> element or
+ <code class="literal">auto-export="interfaces"</code>.</p>
+
+ </div>
+ </div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:props"></a>9.1.4.&nbsp;Controlling The Set Of Advertised Properties For An
+ Exported Service</h3></div></div></div>
+
+
+ <p>As previously described, an exported service is always
+ registered with the service property
+ <code class="literal">org.eclipse.gemini.blueprint.bean.name</code> set to the name
+ of the bean being exported. Since DM 2.x, the bean name is also published
+ under <code class="literal">osgi.service.blueprint.compname</code> (introduced by
+ the OSGi 4.2 Blueprint spec).
+ Additional service properties can be
+ specified using the nested <code class="literal">service-properties</code>
+ element. The <code class="literal">service-properties</code> element contains
+ key-value pairs to be included in the advertised properties of the
+ service. The key must be a string value, and the value must be a type
+ recognized by OSGi Filters. See section 5.5 of the OSGi Service
+ Platform Core Specification for details of how property values are
+ matched against filter expressions.</p>
+
+ <p>The <code class="literal">service-properties</code> element must contain
+ at least one nested <code class="literal">entry</code> element from the Spring
+ beans namespace. For example:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beanToBeExported"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MyServiceInterface"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;service-properties&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans:entry</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">key</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"myOtherKey"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"aStringValue"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans:entry</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">key</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"aThirdKey"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value-ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beanToExposeAsProperty"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/service-properties&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/service&gt;</strong></pre>
+
+ <p>Non-String values can be specified by enforcing the value type. Consider the publication
+ of an OSGi event consumer (<code class="interfacename">org.osgi.service.event.EventHandler</code>)
+ that needs to specify the topics it follows as an array under <code class="literal">event.topics</code>
+ property. Below are a list of configuration on how this can be achieved:</p>
+
+ <div class="programlistingco"><pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service</strong>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"eventMonitorService"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"someBean"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.osgi.service.event.EventHandler"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service-properties</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value-type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.String[]"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong> <span class="co" id="service-registry:export:props:array:top"><img src="images/callouts/1.png" alt="(1)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;entry</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">key</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"event.topics"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"eventQueue"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:service-properties&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:service&gt;</strong></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ Specify an array type for <span class="emphasis"><em>all</em></span> the values declared inside the <code class="literal">service-properties</code> element.
+ </td></tr></table></div></div>
+
+ <div class="programlistingco"><pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service</strong>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"eventMonitorService"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"someBean"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.osgi.service.event.EventHandler"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service-properties&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;entry</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">key</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"event.topics"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;value</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.String[]"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>eventQueue<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/value&gt;</strong> <span class="co" id="service-registry:export:props:array:nested"><img src="images/callouts/1.png" alt="(1)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/entry&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:service-properties&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:service&gt;</strong></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ Indicate the value type just for this particular value.
+ </td></tr></table></div></div>
+
+ <div class="programlistingco"><pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service</strong>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"eventMonitorService"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"someBean"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"org.osgi.service.event.EventHandler"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service-properties&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;entry</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">key</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"event.topics"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;array</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">value-type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"java.lang.String"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong> <span class="co" id="service-registry:export:props:array:array"><img src="images/callouts/1.png" alt="(1)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;value&gt;</strong>eventQueue<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/value&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/array&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/entry&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:service-properties&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:service&gt;</strong></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ Use Spring 3.x <code class="literal">&lt;array&gt;</code> element to create an nested array on the fly.
+ </td></tr></table></div></div>
+ <p>The Gemini Blueprint roadmap includes support for
+ exporting properties registered in the OSGi Configuration
+ Administration service as properties of the registered service. See
+ <a class="xref" href="appendix-roadmap.html" title="Appendix&nbsp;D.&nbsp;Roadmap">Appendix&nbsp;D, <i>Roadmap</i></a> for more details.</p>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:depends-on"></a>9.1.5.&nbsp;The depends-on Attribute</h3></div></div></div>
+
+
+ <p>Spring will manage explicit dependencies of a service element,
+ ensuring for example that the bean to be exported as a service is
+ fully constructed and configured before exporting it. If a service has
+ implicit dependencies on other components (including other service
+ elements) that must be fully initialized before the service can be
+ exported, then the optional <code class="literal">depends-on</code> attribute
+ can be used to express these dependencies.</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beanToBeExported"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MyServiceInterface"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">depends-on</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"myOtherComponent"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:ccl"></a>9.1.6.&nbsp;The context-class-loader Attribute</h3></div></div></div>
+
+
+ <p>The OSGi Service Platform Core Specification (most current
+ version is 4.x at time of writing) does not specify what types and
+ resources are visible through the context class loader when an
+ operation is invoked on a service obtained via the service registry.
+ Since some services may use libraries that make certain assumptions
+ about the context class loader, Gemini Blueprint enables you to
+ explicitly control the context class loader during service execution.
+ This is achieved using the option
+ <code class="literal">context-class-loader</code> attribute of the service
+ element.</p>
+
+ <p>The permissible values for the
+ <code class="literal">context-class-loader</code> attribute are
+ <code class="literal">unmanaged</code> (the default) and
+ <code class="literal">service-provider</code>. When the
+ <code class="literal">service-provider</code> value is specified, Spring Dynamic
+ Modules ensures that the context class loader can see all of the
+ resources on the class path of the bundle exporting the service.</p>
+
+ <p class="remark"><em><span class="remark">When setting <code class="literal">context-class-loader</code> to <code class="literal">service-provider</code>, the service object will be proxied to
+ handle the class loader. If the service advertises any concrete class then CGLIB library is required .</span></em></p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:ranking"></a>9.1.7.&nbsp;The <code class="literal">ranking</code> Attribute</h3></div></div></div>
+
+
+ <p>When registering a service with the service registry, you may
+ optionally specify a service ranking (see section 5.2.5 of the OSGi
+ Service Platform Core Specification). When a bundle looks up a service
+ in the service registry, given two or more matching services the one
+ with the highest ranking will be returned. The default ranking value
+ is zero. To explicitly specify a ranking value for the registered
+ service, use the optional <code class="literal">ranking</code> attribute.</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beanToBeExported"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MyServiceInterface"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ranking</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"9"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:cache"></a>9.1.8.&nbsp;The <code class="literal">cache-target</code> Attribute</h3></div></div></div>
+
+
+ <p>By default, services exported are being retrieved from the container each time they are requested.
+ This allows <span class="emphasis"><em>scoped</em></span> beans to behave correctly depending on the context available
+ when the request is being performed. However, there are cases when the target bean (the entity being
+ exported) needs to be cached no matter its scope. The Blueprint spec for example requires this behaviour
+ for all exported services.</p>
+ <p>To accommodate both cases one, Gemini Blueprint 1.0/Spring DM 2.0 introduces a new attribute, <code class="literal">cache-target</code>
+ which, as the name suggests, enables the caching of the exported bean. The instance of the bean retrieved,
+ for the first service registration is cached internally by the exporter which will later reuse it.</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beanToBeExported"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MyServiceInterface"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">cache-target</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"true"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:service:attributes"></a>9.1.9.&nbsp;<code class="literal">service</code> Element Attributes</h3></div></div></div>
+
+ <p>
+ As a summary, the following table lists the attributes names, possible values and
+ a short description for each of them.
+ </p>
+ <div class="table"><a name="service-export-options"></a><p class="title"><b>Table&nbsp;9.1.&nbsp;OSGi &lt;service&gt; attributes</b></p><div class="table-contents">
+
+ <table class="table" summary="OSGi <service&gt; attributes" width="100%" border="1"><colgroup><col class="c1"><col class="c2"><col class="c3"><col class="c4"><col class="c5"><col align="center" class="c6"></colgroup><thead><tr><th align="center">Name</th><th colspan="4" align="center">Values</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">interface</td><td colspan="4" align="center">fully qualified class name (such as <code class="classname">java.lang.Thread</code>)</td><td align="center">the fully qualified name of the class under which the object will be exported</td></tr><tr><td align="center">ref</td><td colspan="4" align="center">any bean name</td><td align="center">Reference to the named bean to be exported as a service in the service registry.</td></tr><tr><td align="center">context-class-loader</td><td colspan="2" align="center">unmanaged</td><td colspan="2" align="center">service-provider</td><td align="center">Defines how the context class loader will be managed when an operation is invoked on the
+ exported service. The default value is <code class="literal">unmanaged</code> which means that no management of
+ the context class loader is attempted. A value of <code class="literal">service-provider</code> guarantees that
+ the context class loader will have visibility of all the resources on the class path of
+ bundle exporting the service.</td></tr><tr><td align="center">auto-export</td><td align="center">disabled</td><td align="center">interfaces</td><td align="center">class-hierarchy</td><td align="center">all-classes</td><td align="center">Enables Spring to automatically manage the set of service interfaces advertised for the
+ service. By default this facility is <code class="literal">disabled</code>. A value of <code class="literal">interfaces</code> advertises all
+ of the Java interfaces supported by the exported service. A value of <code class="literal">class-hierarchy</code>
+ advertises all the Java classes in the hierarchy of the exported service. A value of
+ <code class="literal">all-classes</code> advertises all Java interfaces and classes.</td></tr><tr><td align="center">ranking</td><td colspan="4" align="center">any integer value</td><td align="center">Specify the service ranking to be used when advertising the service. Default value is 0.</td></tr><tr><td align="center">cache-target</td><td colspan="2" align="center">true</td><td colspan="2" align="center">false</td><td align="center">Specify whether the bean exported as an OSGi service is cached (on first registration) or not. Default value is <code class="literal">false</code></td></tr></tbody></table>
+ </div></div><br class="table-break">
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:lifecycle"></a>9.1.10.&nbsp;Service Registration And Unregistration Lifecycle</h3></div></div></div>
+
+
+ <p>The service defined by a <code class="literal">service</code> element is
+ registered with the OSGi service registry when the application context
+ is first created. It will be unregistered automatically when the
+ bundle is stopped and the application context is disposed. Additionally,
+ based on the mandatory service import availability, the service can be
+ unregistered and registered at runtime
+ (see ???).</p>
+
+ <p>If you need to take some action when a service is unregistered
+ because its dependencies are not satisfied (or when it is registered),
+ then you can define a listener bean using the nested
+ <code class="literal">registration-listener</code> element.</p>
+
+ <p>The declaration of a registration listener must use either the
+ <code class="literal">ref</code> attribute to refer to a top-level bean
+ definition, or declare an anonymous listener bean inline. For
+ example:</p>
+
+ <div class="programlistingco"><pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"beanToBeExported"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"SomeInterface"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;registration-listener</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"myListener"</span> <span class="co" id="service-registry.exporter.listener.ref"><img src="images/callouts/1.png" alt="(1)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">registration-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"serviceRegistered"</span> <span class="co" id="service-registry.exporter.listener.ref.custom.1"><img src="images/callouts/2.png" alt="(2)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">unregistration-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"serviceUnregistered"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong> <span class="co" id="service-registry.exporter.listener.ref.custom.2"><img src="images/callouts/2.png" alt="(2)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;registration-listener</strong>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">registration-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"register"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong> <span class="co" id="service-registry.exporter.listener.nested"><img src="images/callouts/3.png" alt="(3)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"SomeListenerClass"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong> <span class="co" id="service-registry.exporter.listener.nested.decl"><img src="images/callouts/4.png" alt="(4)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/registration-listener&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/service&gt;</strong></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p>Listener declaration referring to a top-level bean declaration.
+ </p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>Indicate the <code class="literal">registration</code> and <code class="literal">unregistration</code> methods.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/3.png" alt="3" border="0"></span></p></td><td valign="top" align="left">
+ <p>Declare only a <code class="literal">registration</code> custom method for this listener.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/4.png" alt="4" border="0"></span></p></td><td valign="top" align="left">
+ <p>Nested listener bean declaration.</p>
+ </td></tr></table></div></div>
+
+ <p>The optional <code class="literal">registration-method</code> and
+ <code class="literal">unregistration-method</code> attributes specify the names
+ of the methods defined on the listener bean that are to be invoked
+ during registration and unregistration. A registration and unregistration
+ callback methods must have a signature matching one of the following formats:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> anyMethodName(ServiceType serviceInstance, Map serviceProperties);</pre>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> anyMethodName(ServiceType serviceInstance, Dictionary serviceProperties);</pre>
+
+ <p>where <code class="literal">ServiceType</code> can be any type compatible
+ with the exported service interface of the service.</p>
+
+ <p>The register callback is invoked when the service is initially
+ registered at startup, and whenever it is subsequently re-registered.
+ The unregister callback is invoked during the service unregistration process,
+ no matter the cause (such as the owning bundle stopping).</p>
+
+ <p>Gemini Blueprint/Spring DM will use the declared <code class="literal">ServiceType</code> argument type
+ and invoke the registration/unregistration method only when a service of a compatible type
+ will be registered/unregistered.</p>
+
+ <p><code class="literal">serviceProperties</code> represents a map holding all the properties
+ of the registered/unregistered service. To preserve compatibility with the OSGi specification
+ this argument can be cast, if needed, to a <code class="literal">java.util.Dictionary</code>.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:export:lifecycle:interface"></a>9.1.10.1.&nbsp;Using <code class="interfacename">OsgiServiceRegistrationListener</code> Interface</h4></div></div></div>
+
+ <p>
+ While we discourage, it is possible to implement a Gemini Blueprint/Spring DM specific interface, namely
+ <code class="interfacename">org.eclipse.gemini.blueprint.service.exporter.OsgiServiceRegistrationListener</code> which avoids the need
+ to declare the <code class="literal">registration-method</code> and <code class="literal">unregistration-method</code>.
+ However, by implementing <code class="interfacename">OsgiServiceRegistrationListener</code>, your code
+ becomes Gemini Blueprint/Spring DM aware (which goes against the POJO philosophy).
+ </p>
+
+ <p>It is possible for a listener to implement <code class="interfacename">OsgiServiceRegistrationListener</code> interface and
+ declare custom methods. In this case, the Gemini Blueprint/Spring DM interface methods will be called first, followed by the custom methods.
+ </p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:export:blueprint"></a>9.1.10.2.&nbsp;Blueprint <code class="literal">service</code> Comparison</h4></div></div></div>
+
+
+ <p>The Blueprint Container offers a <code class="literal">service</code> element, identical in functionality with the one in Gemini Blueprint/Spring DM. In most cases,
+ the configuration should be identical. Below is a summary of the configuration options available in Gemini Blueprint/Spring DM and Blueprint:</p>
+
+ <div class="table"><a name="service-registry:export:blueprint:comparison"></a><p class="title"><b>Table&nbsp;9.2.&nbsp;Spring DM / Blueprint <code class="literal">&lt;service&gt;</code> Configuration Comparison</b></p><div class="table-contents">
+
+ <table class="table" summary="Spring DM / Blueprint <service&gt; Configuration Comparison" width="100%" border="1"><colgroup><col><col></colgroup><thead><tr><th align="center">Gemini Blueprint/Spring DM</th><th align="center">Blueprint</th></tr></thead><tbody><tr><td align="center">interface</td><td align="center">interface</td></tr><tr><td align="center">ref</td><td align="center">ref</td></tr><tr><td align="center">auto-export</td><td align="center">auto-export</td></tr><tr><td align="center">ranking</td><td align="center">ranking</td></tr><tr><td align="center">context-class-loader</td><td align="center">-</td></tr><tr><td align="center">cache-target</td><td align="center">- (caching is always enabled)</td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>Since the <code class="literal">registration-listener</code> declaration is identical in declaration and functionality between Blueprint
+ and Gemini Blueprint/Spring DM, this section does not mention it.</p>
+ </div>
+
+ </div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="service-registry:refs"></a>9.2.&nbsp;Defining References To OSGi Services</h2></div></div></div>
+
+
+ <p>To use services, clients need to look for them inside the OSGi service registry.
+ If found, the platform returns a reference which can be used to get the actual service instance.
+ Consumers should return the service instance as soon as possible and not hold on to it since
+ the service provider can unpublish the service at any point.
+ Since there is no mechanism in Java to force such cleanup, the OSGi specification uses the service
+ references and the aforementioned <span class="emphasis"><em>protocol</em></span> to decouple service providers from
+ service consumers. Please see chapter 5, the Service Layer inside the OSGi Core spec for an in-depth
+ discussion.
+ </p>
+
+ <p>Gemini Blueprint facilitates the consumption of OSGi services by taking care of not
+ just of the retrieval of service references and instances but also considering the service dynamics.
+ With Gemini Blueprint/Spring DM, imported OSGi services become Spring beans which can be injected, as usual,
+ into other application components. The service lookup is made using the service interface type
+ that the service is required to support, plus an optional filter
+ expression that matches against the service properties published in the
+ registry. The service instance retrieval is done on demand, on the first request. Once the service
+ becomes unavailable, Gemini Blueprint/Spring DM automatically unregisters the service to avoid using <span class="emphasis"><em>stale</em></span>
+ references.</p>
+
+ <p>As a consumer, one can find zero, one or multiple services matching the desired description.
+ In most scenarios, a single matching service is all that is needed; for those the
+ <code class="literal">reference</code> element defines a reference to a single
+ service that meets the required specification.
+ In other cases, especially when using the OSGi <a class="ulink" href="http://www.osgi.org/documents/osgi_technology/whiteboard.pdf" target="_top">whiteboard
+ pattern</a>, references to <span class="emphasis"><em>all available</em></span>
+ matching services are required. Gemini Blueprint supports the
+ management of this group of references as either a <code class="interfacename">List</code> or a
+ <code class="interfacename">Set</code> collection.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:annotations-vs-xml-declarations"></a>9.2.1.&nbsp;Referencing services via the @ServiceReference annotation</h3></div></div></div>
+
+ <p>
+ Since 2.1.0, gemini-blueprint allows using the @ServiceReference annotation provided by the proprietary gemini-blueprint-extensions bundle
+ in addition to the XML declarations given below. Both ways of declaring service references have the exact same semantics, i.e. a bean of the form
+
+</p><pre class="programlisting">
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">import</strong> org.eclipse.gemini.blueprint.extensions.annotation.ServiceReference;
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">class</strong> MyBean {
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan"><span class="hl-annotation">@ServiceReference</span></em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">private</strong> Service myService;
+}</pre><p>
+
+ Is equivalent to
+
+ </p><pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:reference</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"myService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"some.package.Service"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong></pre><p>
+
+ and subsequently injecting the service reference into the bean.
+ </p>
+
+ <p>It is, however, important to stress that @ServiceReference is a proprietary extension that is not covered by the OSGi specification.</p>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:refs:availability"></a>9.2.2.&nbsp;Imported Service Availability</h3></div></div></div>
+
+
+ <div class="sidebar"><div class="titlepage"><div><div><p class="title"><b>What happened to <code class="literal">cardinality</code>?</b></p></div></div></div>
+
+ <p>
+ Since Spring DM 2.x/Gemini Blueprint, the <code class="literal">cardinality</code> notion has been deprecated in favour
+ of <code class="literal">availability</code>. The main reasons behind it were aligning the terminology
+ with the Blueprint spec and eliminating the repetition of specifying the number of imported
+ services: as <code class="literal">osgi</code> elements already specify whether one or multiple services
+ are imported, the <code class="literal">cardinality</code> right side (<code class="literal">..N/..1</code>) was
+ redundant.
+ </p>
+ </div>
+
+ <p>Due to the dynamic nature of OSGi, services can come and go, be available or unavailable
+ at certain points in time. Depending on the type of service, this can have a negative impact
+ on the consumers. Gemini Blueprint/Spring DM alleviates this problem by introducing the
+ notion of <code class="literal">availability</code> (formerly known as <code class="literal">cardinality</code>)
+ which indicates whether an imported service is <code class="literal">mandatory</code> or
+ <code class="literal">optional</code>.</p>
+
+ <p>As the name implies, a <code class="literal">mandatory</code> service implies a crucial application dependency:
+ the service is <span class="emphasis"><em>required</em></span> and its presence can heavily impact the application, in
+ a negative way.
+ </p>
+ <p>An <code class="literal">optional</code> service means just the opposite. The service is tracked and bound
+ (if present), just like a <code class="literal">mandatory</code> reference, but its presence is not required. It is
+ fine, from an application perspective if the service is not available - its existence (or lack of) does
+ not impact the application functionality.</p>
+
+ <p>As an example, an application could have a <code class="literal">mandatory</code> dependency on a <code class="literal">
+ DataSource</code> and an <code class="literal">optional</code> one for a logging service: the application can run fine
+ if it cannot log (it does not impact the runtime) but it fails if the backing database is not available.</p>
+
+ <p>In Gemini Blueprint/Spring DM, a <code class="literal">mandatory</code> service import that is unsatisfied (there are no services
+ matching the description) can either prevent an application context from starting up or, if already started,
+ cause the unregistration of the exported services dependent on it.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:availability:startup"></a>9.2.2.1.&nbsp;Mandatory Services and Application Startup</h4></div></div></div>
+
+ <p>
+ The availability of a service impacts the startup of an Spring-powered application and
+ the publication of any exported services that depend on it.
+ As mentioned in <a class="xref" href="bnd-app-ctx.html#bnd-app-ctx:app-creation:mandatory-deps" title="7.2.1.&nbsp;Mandatory Service Dependencies">Section&nbsp;7.2.1, &#8220;Mandatory Service Dependencies&#8221;</a>, a SpringDM application will not start
+ unless <span class="emphasis"><em>all</em></span> <code class="literal">mandatory</code> services are available, at the same time.
+
+ Before initializing the context, Gemini Blueprint/Spring DM discovers all the <code class="literal">mandatory</code> service
+ declarations and waits for a period of time (5 minutes by default unless otherwise specified by
+ each bundle - see the <code class="literal">timeout</code> directive in <a class="xref" href="app-deploy.html#app-deploy:headers" title="8.1.&nbsp;Bundle Format And Manifest Headers">Section&nbsp;8.1, &#8220;Bundle Format And Manifest Headers&#8221;</a>) for all imports
+ to be satisfied, at the same time.
+ If the timeout occurs, the application initialization fails (since the required or mandatory services
+ are not available) or succeeds, meaning the application context is being initialized.
+ </p>
+
+ <p>This way, the framework prevents the application from starting up only to fail since its required
+ services are unavailable. This feature avoids the need for ordering the bundle startup sequence as the
+ configuration already acts as a service <span class="emphasis"><em>barrier</em></span> blueprint: no matter the order of the services
+ started, on whether they come and go, only when all of them are present, will the context initialization
+ commence.</p>
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">The fact that an application has mandatory service references, gives no guarantee
+ that a valid service object is available when the service reference is used, since services can
+ get unregistered at any time. Gemini Blueprint/Spring DM guarantees that all the mandatory services were present, at
+ the same time, before the application was started but it cannot prevent or guarantee that this services
+ will not be disappear during the application life span.</td></tr></table></div>
+
+ <div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="images/admons/warning.png"></td><th align="left">Warning</th></tr><tr><td align="left" valign="top">
+ It is an error to declare a mandatory reference to a
+ service that is also exported by the same bundle, this behaviour can
+ cause application context creation to fail through either deadlock
+ or timeout.
+ </td></tr></table></div>
+
+ </div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:export-import-relationship"></a>9.2.2.2.&nbsp;Relationship Between The Service Exporter And Service Importer</h4></div></div></div>
+
+
+ <p>An exported service may depend, either directly or indirectly,
+ on other (imported) services in order to perform its function. If one of these
+ services is marked as a <span class="emphasis"><em>mandatory</em></span> dependency and the
+ dependency can no longer be satisfied
+ (because the backing service has gone away and there is no suitable
+ replacement available), then the exported service that depends on it
+ will be automatically unregistered from the service registry - meaning
+ that it is no longer available to clients. If the mandatory dependency
+ becomes satisfied once more (by registration of a suitable service),
+ then the exported service will be re-registered in the service
+ registry.</p>
+
+ <p>This automatic publication management ensures that only when the exported service can work reliable,
+ it is made available for potential OSGi clients. This behaviour takes advantage of the OSGi dynamic nature
+ allowing an application to cope with the ongoing changing without being restarted.
+ </p>
+
+ <p>This automatic unregistering and re-registering of exported
+ services based on the availability of mandatory dependencies only
+ takes into account declarative dependencies. If exported service
+ <code class="literal">S</code> depends on bean <code class="literal">A</code>, which in
+ turn depends on mandatory imported service <code class="literal">M</code>, and
+ these dependencies are explicit in the Spring configuration file as
+ per the example below, then when <code class="literal">M</code> becomes
+ unsatisfied <code class="literal">S</code> will be unregistered. When
+ <code class="literal">M</code> becomes satisfied again, <code class="literal">S</code>
+ will be re-registered.</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"S"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"A"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"SomeInterface"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"A"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"SomeImplementation"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"helperService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"M"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong>
+
+<em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- the reference element is used to refer to a service
+ in the service registry --&gt;</em>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:reference</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"M"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"HelperService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">availability</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"mandatory"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+
+ <p>If however the dependency from <code class="literal">A</code> on
+ <code class="literal">M</code> is not established through configuration as shown
+ above, but instead at runtime through for example passing a reference
+ to <code class="literal">M</code> to <code class="literal">A</code> without any
+ involvement from the Spring container, then Gemini Blueprint
+ will <span class="emphasis"><em>not</em></span> track this dependency.</p>
+ </div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:refs:singular"></a>9.2.3.&nbsp;Referencing An Individual Service</h3></div></div></div>
+
+
+ <p>The <code class="literal">reference</code> element is used to define a
+ reference to a service in the service registry.</p>
+
+ <p>Since there can be multiple service matching a given description,
+ the service returned is the service that would be returned by a call to
+ <code class="literal">BundleContext.getServiceReference</code>. This means that
+ the service with the highest ranking will be returned, or if there is
+ a tie in ranking, the service with the lowest service id (the service
+ registered first with the framework) is returned (please see Section 5
+ from the OSGi spec for more information on the service selection algorithm).</p>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:interface"></a>9.2.3.1.&nbsp;Controlling The Set Of Advertised Interfaces For The Imported Service</h4></div></div></div>
+
+
+ <p>The <code class="literal">interface</code> attribute identifies the service
+ interface that a matching service must implement. For example, the
+ following declaration creates a bean
+ <code class="literal">messageService</code>, which is backed by the service
+ returned from the service registry when querying it for a service
+ offering the <code class="interfacename">MessageService</code> interface.</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;reference</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"messageService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MessageService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+
+ <p>Just like the <code class="literal">service</code> declaration, when specifying
+ multiple interfaces, use the nested <code class="literal">interfaces</code> element instead
+ of <code class="literal">interface</code> attribute:
+ </p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:reference</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"importedOsgiService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:interfaces&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;value&gt;</strong>com.xyz.MessageService<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/value&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;value&gt;</strong>com.xyz.MarkerInterface<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/value&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:interfaces&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:reference&gt;</strong></pre>
+
+ <p>It is illegal to use both <code class="literal">interface</code> attribute and
+ <code class="literal">interfaces</code> element at the same time - use only one of them.
+ </p>
+
+ <p>The bean defined by reference element implements all of the
+ advertised interfaces of the service that are visible to the bundle (called
+ <span class="emphasis"><em>greedy proxying</em></span>).
+ If the registered service interfaces include Java class types (as
+ opposed to interface types) then support for these types is subject to
+ the restrictions of Spring's AOP implementation (see the Spring
+ Reference Guide). In short, if the specified interfaces are classes
+ (rather then interfaces), then <code class="literal">cglib</code> library must be
+ available, and <code class="literal">final</code> methods are not
+ supported.</p>
+ </div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:filter"></a>9.2.3.2.&nbsp;The <code class="literal">filter</code> Attribute</h4></div></div></div>
+
+
+ <p>The optional <code class="literal">filter</code> attribute can be used
+ to specify an OSGi filter expression and constrains the service
+ registry lookup to only those services that match the given
+ filter.</p>
+
+ <p>For example:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;reference</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"asyncMessageService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MessageService"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">filter</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"(asynchronous-delivery=true)"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+
+ <p>will match only OSGi services that advertise <code class="interfacename">MessageService</code>
+ interface and have the property named <code class="literal">asynchronous-delivery</code> set to value <code class="literal">true</code>.
+ </p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:bean-name"></a>9.2.3.3.&nbsp;The <code class="literal">bean-name</code> Attribute</h4></div></div></div>
+
+
+ <p>The <code class="literal">bean-name</code> attribute is a convenient
+ short-cut for specifying a filter expression that matches on the
+ <code class="literal">bean-name</code> property automatically set when exporting a bean using the
+ <code class="literal">service</code> element (see <a class="xref" href="service-registry.html#service-registry:export" title="9.1.&nbsp;Exporting A Spring Bean As An OSGi Service">Section&nbsp;9.1, &#8220;Exporting A Spring Bean As An OSGi Service&#8221;</a>).</p>
+
+ <p>Consider the following exporter/importer declarations:</p>
+
+ <div class="programlistingco"><pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"</span><span class="co" id="service-registry:refs:bean-name.1"><img src="images/callouts/1.png" alt="(1)"></span><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">messageServiceBean"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">scope</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"bundle"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MessageServiceImpl"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+<em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">&lt;!-- service exporter --&gt;</em>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:service</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"messageServiceExporter"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"</span><span class="co" id="service-registry:refs:bean-name.2"><img src="images/callouts/1.png" alt="(1)"></span><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">messageServiceBean"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MessageService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+</pre></div>
+ <div class="programlistingco"><pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:reference</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"messageService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MessageService"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">bean-name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"</span><span class="co" id="service-registry:refs:bean-name"><img src="images/callouts/1.png" alt="(1)"></span><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">messageServiceBean"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+</pre></div>
+ <div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p>the name used with <code class="literal">bean-name</code> attribute</p>
+ </td></tr></table></div>
+
+ <p>will match only OSGi services that advertise <code class="interfacename">MessageService</code>
+ interface and have the property named <code class="literal">org.eclipse.gemini.blueprint.bean.name</code> set
+ to value <code class="literal">messageServiceBean</code>. In short, this means finding all Gemini Blueprint/Spring DM exported
+ beans that implement interface <code class="interfacename">MessageService</code> and are named
+ <code class="literal">messageServiceBean</code>.</p>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:cardinality"></a>9.2.3.4.&nbsp;The <code class="literal">availability</code> Attribute</h4></div></div></div>
+
+
+ <div class="sidebar"><div class="titlepage"><div><div><p class="title"><b>Nested &lt;reference&gt; declarations</b></p></div></div></div>
+
+ <p>In order for Gemini Blueprint/Spring DM to detect mandatory dependencies, any
+ <a class="ulink" href="http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-inner-beans" target="_top">nested/inner</a>
+ reference declaration will be transformed into top-level
+ one with a generated name.</p>
+ </div>
+
+ <p>The <code class="literal">availability</code> attribute is used to
+ specify whether or not a matching service is required at all times.
+ An <code class="literal">mandatory</code> availability (the default)
+ indicates that a matching service must always be present. A
+ value of <code class="literal">optional</code> indicates that a
+ matching service is not required at all times (see
+ <a class="xref" href="service-registry.html#service-registry:refs:singular:dynamics" title="9.2.3.9.&nbsp;reference And OSGi Service Dynamics">Section&nbsp;9.2.3.9, &#8220;<code class="literal">reference</code> And OSGi Service Dynamics&#8221;</a>
+ for more details). The differences in behaviour between <code class="literal">mandatory</code>
+ and <code class="literal">optional</code> services are explained at length in
+ <a class="xref" href="service-registry.html#service-registry:refs:availability" title="9.2.2.&nbsp;Imported Service Availability">Section&nbsp;9.2.2, &#8220;Imported Service Availability&#8221;</a>.
+ </p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:depends-on"></a>9.2.3.5.&nbsp;The <code class="literal">depends-on</code> Attribute</h4></div></div></div>
+
+
+ <p>The <code class="literal">depends-on</code> attribute is used to specify
+ that the service reference should not be looked up in the service
+ registry until the named dependent bean has been
+ instantiated.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:tccl"></a>9.2.3.6.&nbsp;The <code class="literal">context-class-loader</code> Attribute</h4></div></div></div>
+
+
+ <p>The OSGi Service Platform Core Specification (latest
+ version is 4.1 at time of writing) does not specify what types and
+ resources are visible through the context class loader when an
+ operation is invoked on a service obtained via the service registry.
+ Since some services may use libraries that make certain assumptions
+ about the context class loader, Gemini Blueprint enables you
+ to explicitly control the context class loader during service
+ invocation. This is achieved using the option
+ <code class="literal">context-class-loader</code> attribute of the
+ <code class="literal">reference</code> element.</p>
+
+ <div class="sidebar"><div class="titlepage"><div><div><p class="title"><b>context class loader management on the importer and exporter</b></p></div></div></div>
+
+ <p>
+ Gemini Blueprint/Spring DM has the ability to do context class loader management on both
+ the importer and exporter side. Normally, if Gemini Blueprint/Spring DM works on both sides,
+ only one side should have this feature enabled. However, if both sides
+ (importer and exporter) take advantage of this capability, the last
+ entity in the call chain will win. This means that the exporter setting,
+ if enabled, will always override the importer setting (whatever that is).
+ </p>
+ </div>
+
+ <p>The permissible values for the
+ <code class="literal">context-class-loader</code> attribute are:</p>
+
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <p><code class="literal">client</code> - during the service invocation,
+ the context class loader is guaranteed to be
+ able to see types on the classpath of the invoking bundle.
+ This is the default option.</p>
+ </li><li class="listitem">
+ <p><code class="literal">service-provider</code> - during the service invocation,
+ the context class loader is guaranteed to be
+ able to see types on the classpath of the bundle exporting
+ the service.</p>
+ </li><li class="listitem">
+ <p><code class="literal">unmanaged</code> - no context class loader
+ management will occur during the service invocation</p>
+ </li></ul></div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:sticky"></a>9.2.3.7.&nbsp;The <code class="literal">sticky</code> Attribute</h4></div></div></div>
+
+
+ <p>Newly introduced in DM 2.x, the <code class="literal">sticky</code> attribute specifies whether an importer will use
+ a backing service until it becomes unavailable or whether it will consider other <span class="emphasis"><em>better</em></span> candidates
+ (defined as services matching the importer criteria but with a higher ranking or a lower service id) that might appear.
+ In Spring DM 1.x, the importer would always select the best service available at any point in time. Thus, if a service with
+ a higher ranking id becomes available, the proxy would automatically bind to it. In highly dynamic environments, this lack
+ of service affinity becomes problematic so in DM 2.x/Gemini Blueprint, the behaviour has changed (aligning itself with the Blueprint spec).
+ Thus, service importers become <code class="literal">sticky</code> by default meaning that a proxy will use the bound backing service
+ until it becomes unavailable, ignoring any other service updates. Only when the backing service goes down, the proxy will
+ look for a replacement selecting the best candidate at that point in time.
+ To revert to the Spring DM 1.x behaviour, mark the importers as being non-sticky.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:reference:attributes"></a>9.2.3.8.&nbsp;<code class="literal">reference</code> Element Attributes</h4></div></div></div>
+
+ <p>
+ As a summary, the following table lists the <code class="literal">reference</code> element
+ attributes names, possible values and a short description for each of them.
+ </p>
+ <div class="table"><a name="reference-import-options"></a><p class="title"><b>Table&nbsp;9.3.&nbsp;OSGi &lt;reference&gt; attributes</b></p><div class="table-contents">
+
+ <table class="table" summary="OSGi <reference&gt; attributes" width="100%" border="1"><colgroup><col class="c1"><col align="center" class="c2"><col align="center" class="c3"><col align="center" class="c4"><col align="center" class="c5"></colgroup><thead><tr><th>Name</th><th colspan="4" align="center">Values</th><th align="justify">Description</th></tr></thead><tbody><tr><td>interface</td><td colspan="4" align="center">fully qualified class name (such as <code class="classname">java.lang.Thread</code>)</td><td align="justify">The fully qualified name of the class under which the object will be exported.</td></tr><tr><td>filter</td><td colspan="4" align="center">OSGi filter expression (such as <code class="literal">((asynchronous-delivery=true)</code>)</td><td align="justify">OSGi filter expression that is used to constrain the set of matching services
+ in the service registry.</td></tr><tr><td>bean-name</td><td colspan="4" align="center">any string value</td><td align="justify">Convenient shortcut for specifying a filter expression that matches on the bean-name property
+ that is automatically advertised for beans published using the &lt;service&gt; element.</td></tr><tr><td>context-class-loader</td><td align="center">client</td><td colspan="2" align="center">service-provider</td><td align="center">unmanaged</td><td align="justify">Defines how the context class loader is managed when invoking operations on a service
+ backing this service reference. The default value is <code class="literal">client</code> which means that the context
+ class loader has visibility of the resources on this bundle's classpath. Alternate
+ options are <code class="literal">service-provider</code> which means that the context class loader has visibility of
+ resources on the bundle classpath of the bundle that exported the service, and <code class="literal">unmanaged</code>
+ which does not do any management of the context class loader.</td></tr><tr><td>availability</td><td colspan="2" align="center">optional</td><td colspan="2" align="center">mandatory</td><td align="justify">Defines the desired availability of the relationship to the backing service. If not specified,
+ the <code class="literal">default-availability</code> attribute will apply. 'mandatory' value (the default) means that a backing service
+ must exist at all times. The 'optional' value indicates that it is acceptable to be for an importer to have no
+ backing service.</td></tr><tr><td>timeout</td><td colspan="4" align="center">any positive long</td><td align="justify">The amount of time (in milliseconds) to wait for a backing service to be
+ available when an operation is invoked. If not specified, the <code class="literal">default-timeout</code> attribute will apply.
+ </td></tr><tr><td>sticky</td><td colspan="2" align="center">true</td><td colspan="2" align="center">false</td><td align="justify">Indicates the <span class="emphasis"><em>stickiness</em></span> of the service import. If 'true' (default), the proxy will rebind only if the
+ backing service is no longer available. If 'false' (Spring DM 1.x behaviour), the rebind will occur every time a 'better' candidate
+ appears. A better service is defined by having either a higher ranking or the same ranking and a lower service id.
+ </td></tr></tbody></table>
+ </div></div><br class="table-break">
+ </div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:dynamics"></a>9.2.3.9.&nbsp;<code class="literal">reference</code> And OSGi Service Dynamics</h4></div></div></div>
+
+ <p>
+ The bean defined by the <code class="literal">reference</code> element
+ is unchanged throughout the lifetime of the application context
+ (the object reference remains constant). However, the OSGi service
+ that backs the reference may come and go at any time. For a
+ mandatory service reference, the creation of the application context will block until a matching
+ service is available. <a class="xref" href="service-registry.html#service-registry:refs:availability" title="9.2.2.&nbsp;Imported Service Availability">Section&nbsp;9.2.2, &#8220;Imported Service Availability&#8221;</a> provides
+ more details.</p>
+
+ <p>When the service backing a <code class="literal">reference</code> bean
+ goes away, Gemini Blueprint tries to replace the backing
+ service with another service matching the reference criteria. An
+ application may be notified of a change in backing service by
+ registering a <code class="literal">reference-listener</code>. If no matching service is
+ available, then the <code class="literal">reference</code> is said to be
+ <span class="emphasis"><em>unsatisfied</em></span>. An unsatisfied mandatory service
+ causes any exported service (<code class="literal">service</code> bean) that
+ depends on it to be unregistered from the service registry until
+ such time as the reference is satisfied again. See
+ <a class="xref" href="service-registry.html#service-registry:export-import-relationship" title="9.2.2.2.&nbsp;Relationship Between The Service Exporter And Service Importer">Section&nbsp;9.2.2.2, &#8220;Relationship Between The Service Exporter And Service Importer&#8221;</a> for more information.</p>
+
+ <p>When an operation is invoked on an unsatisfied
+ <code class="literal">reference</code> bean (either optional or mandatory),
+ the invocation blocks until the reference becomes satisfied. The
+ optional <code class="literal">timeout</code> attribute of the
+ <code class="literal">reference</code> element enables a timeout value (in
+ milliseconds) to be specified. If no matching service becomes available
+ within the timeout period, an unchecked <code class="classname">ServiceUnavailableException</code> is
+ thrown.</p>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:property-editor"></a>9.2.3.10.&nbsp;Getting A Hold Of The Managed Service Reference</h4></div></div></div>
+
+
+ <p>Gemini Blueprint/Spring DM can automatically convert a managed OSGi service to
+ service reference. That is, if the property into which a reference bean
+ is to be injected, has type <code class="interfacename">ServiceReference</code> (instead of the service
+ interface supported by the reference), then the managed OSGi
+ <code class="interfacename">ServiceReference</code> for the service will be injected
+ in place of the service itself:</p>
+
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">class</strong> BeanWithServiceReference {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">private</strong> ServiceReference serviceReference;
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">private</strong> SomeService service;
+
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">// getters/setters ommitted</em>
+}</pre>
+
+ <div class="programlistingco"><pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;reference</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.SomeService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"someBean"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"BeanWithServiceReference"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"serviceReference"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong> <span class="co" id="service-registry.importer.single.ref.conversion"><img src="images/callouts/1.png" alt="(1)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong> <span class="co" id="service-registry.importer.single.ref.normal.injection"><img src="images/callouts/2.png" alt="(2)"></span>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p>Automatic managed service to <code class="interfacename">ServiceReference</code> conversion.
+ </p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>Managed service is injected without any conversion</p>
+ </td></tr></table></div></div>
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
+ The injected <code class="interfacename">ServiceReference</code> is managed by Gemini Blueprint/Spring DM and will change
+ at the same time as the referenced backing OSGi service instance.
+ </td></tr></table></div>
+
+ <p>There are cases when the managed <code class="interfacename">ServiceReference</code> is needed to get a hold of the OSGi service. Unfortunately,
+ most of the OSGi frameworks expect their own <code class="interfacename">ServiceReference</code> classes and will fail when the
+ Gemini Blueprint/Spring DM managed reference is used. For such cases, one can get a hold of the native <code class="interfacename">ServiceReference</code> bound
+ at that moment, by casting the reference object to <code class="interfacename">ServiceReferenceProxy</code> and then calling
+ <code class="methodname">getTargetServiceReference</code>. Using the example context above, one might use the following code:</p>
+
+ <pre class="programlisting">ServiceReference nativeReference = ((ServiceReferenceProxy)serviceReference).getTargetServiceReference()</pre>
+
+ <p>The returned <code class="literal">nativeReference</code> can be safely passed to the OSGi framework however, since it is not managed by Gemini Blueprint/Spring DM,
+ in time, it might refer to a service different then the one backing the imported OSGi service.</p>
+ <p>To avoid this desynchronization, consider using managed <code class="interfacename">ServiceReference</code> objects mainly for reading the
+ bound OSGi service properties rather then getting a hold of OSGi services (which can be simply injected by Gemini Blueprint/Spring DM).</p>
+ </div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:refs:collection"></a>9.2.4.&nbsp;Referencing A Collection Of Services</h3></div></div></div>
+
+
+ <div class="sidebar"><div class="titlepage"><div><div><p class="title"><b>Natural vs custom ordering</b></p></div></div></div>
+
+ <p>
+ Java collection API defines two interfaces for ordering objects -
+ <code class="interfacename">Comparable</code> and <span class="interface">Comparator</span>.
+ The first is meant to be implemented by objects for providing <span class="emphasis"><em>natural
+ ordering</em></span>. <code class="classname">String</code>, <code class="classname">Long</code>
+ or <code class="classname">Date</code> are good examples of objects that implement the
+ <code class="interfacename">Comparable</code> interface.</p>
+ <p>
+ However, there are cases where sorting is different then the natural ordering or,
+ the objects meant to be sort do not implement <span class="interface">Comparable</span>. To
+ address this cases, <code class="interfacename">Comparator</code> interface was designed.
+ </p>
+ <p>For more information on this subject, please consult the <a class="ulink" href="http://java.sun.com/docs/books/tutorial/collections/interfaces/order.html" target="_top">
+ Object ordering</a> chapter from Java
+ <a class="ulink" href="http://java.sun.com/docs/books/tutorial/collections/" target="_top">collection</a> tutorial,
+ </p>
+ </div>
+
+ <p>Sometimes an application needs access not simply to any service
+ meeting some criteria, but to <span class="emphasis"><em>all</em></span> services
+ meeting some criteria. Gemini Blueprint/Spring DM allows the matching services may be held in a
+ <code class="interfacename">List</code> or <code class="interfacename">Set</code>
+ (optionally sorted).</p>
+
+ <p>The difference between using a <code class="interfacename">List</code> and a
+ <code class="interfacename">Set</code> to manage the collection is one of equality.
+ Two or more services published in the registry (and with distinct
+ service ids) may be "equal" to each other, depending on the
+ implementation of equals used by the service implementations. Only one
+ such service will be present in a set, whereas all services returned
+ from the registry will be present in a list. For more details on collections,
+ see <a class="ulink" href="http://java.sun.com/docs/books/tutorial/collections/interfaces/index.html" target="_top">this</a>
+ tutorial.</p>
+
+ <p>The <code class="literal">set</code> and <code class="literal">list</code> schema elements
+ are used to define collections of services with set or list semantics
+ respectively.</p>
+
+ <p>These elements support the attributes
+ <code class="literal">interface</code>, <code class="literal">filter</code>,
+ <code class="literal">bean-name</code>, <code class="literal">availability</code>, and
+ <code class="literal">context-class-loader</code>, with the same semantics as for
+ the <code class="literal">reference</code> element. The allowable values for the
+ <code class="literal">availability</code> attribute are <code class="literal">mandatory</code>
+ and <code class="literal">optional</code>.</p>
+
+ <p>An availability value of
+ <code class="literal">optional</code> indicates that it is permissible to
+ be no matching services. An availability value of
+ <code class="literal">mandatory</code> indicates that at least one matching service
+ is required at all times. Such a reference is considered a
+ <span class="emphasis"><em>required</em></span> reference and any exported services
+ from the same bundle (<code class="literal">service</code> defined beans) that
+ depend on a mandatory reference will automatically be unregistered
+ when the reference becomes unsatisfied, and reregistered when the
+ reference becomes satisfied again. See <a class="xref" href="service-registry.html#service-registry:refs:availability" title="9.2.2.&nbsp;Imported Service Availability">Section&nbsp;9.2.2, &#8220;Imported Service Availability&#8221;</a>
+ for more details.</p>
+
+ <p>The bean defined by a <code class="literal">list</code> element is of type
+ <code class="interfacename">java.util.List</code>. The bean defined by a
+ <code class="literal">set</code> element is of type
+ <code class="interfacename">java.util.Set</code>.</p>
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">Make sure the Gemini Blueprint/Spring DM collections are injected into properties of compatible types (
+ for example <code class="literal">set</code> into <code class="interfacename">Set</code> or <code class="interfacename">
+ Collection</code>) since otherwise the container will automatically perform
+ <a class="ulink" href="http://static.springframework.org/spring/docs/2.5.x/reference/validation.html#beans-beans-conversion" target="_top">type conversion</a>,
+ transforming the Gemini Blueprint/Spring DM managed collection into a 'normal' one, unaware of the OSGi dynamics.
+ </td></tr></table></div>
+
+ <p>The following example defines a bean of type <code class="interfacename">List</code> that
+ will contain all registered services supporting the
+ <code class="literal">EventListener</code> interface:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;list</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"myEventListeners"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.EventListener"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+
+ <p>The members of the collection defined by the bean are managed
+ dynamically by Spring. As matching services are registered and
+ unregistered in the service registry, the collection membership will
+ be kept up to date. Each member of the collection supports the service
+ interfaces that the corresponding service was registered with and that
+ are visible to the bundle.</p>
+
+ <p>Gemini Blueprint/Spring DM supports sorted collections as well, both for set and list.</p>
+ <p>It is possible to specify a sorting order using either the
+ <code class="literal">comparator-ref</code> attribute, or the nested
+ <code class="literal">comparator</code> element. The
+ <code class="literal">comparator-ref</code> attribute is used to refer to a
+ named bean implementing <code class="interfacename">java.util.Comparator</code>. The
+ <code class="literal">comparator</code> element can be used to define an inline
+ bean. For example:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;set</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"myServices"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MyService"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">comparator-ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"someComparator"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;list</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"myOtherServices"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.OtherService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;comparator&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans:bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"MyOtherServiceComparator"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/comparator&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/list&gt;</strong></pre>
+
+
+ <p>To sort using a natural ordering instead of an explicit
+ comparator, you can use the <code class="literal">natural</code>
+ element inside of <code class="literal">comparator</code>. You need to specify
+ the basis for the natural ordering: based on the service references,
+ following the <code class="interfacename">ServiceReference</code> natural ordering
+ defined in the OSGi Core Specification release 4, version 4.1, section 6.1.23;
+ or based on the services themselves (in which case the services must be
+ <code class="interfacename">Comparable</code>).</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;list</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"myServices"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MyService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;comparator&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;natural</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">basis</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"services"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/comparator&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/list&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;set</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"myOtherServices"</span><span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.OtherService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;comparator&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;natural</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">basis</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service-references"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/comparator&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/set&gt;</strong></pre>
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">For a sorted set, a <code class="interfacename">SortedSet</code> implementation will be created.
+ However, since the JDK API does not provide a dedicated <code class="interfacename">SortedList</code>interface,
+ the sorted list will implement only the <code class="interfacename">List</code> interface.</td></tr></table></div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:collection:greedy-proxying"></a>9.2.4.1.&nbsp;Greedy Proxying</h4></div></div></div>
+
+
+ <p>All OSGi services imported by a Gemini Blueprint/Spring DM service collection publish and are type-compatible with the classes
+ declared by the <code class="literal">interfaces</code> property. However, some services might expose additional (optional)
+ classes that could be relevant to your application.</p>
+
+ <p>For these cases, Gemini Blueprint/Spring DM collections offer a dedicated attribute called <code class="literal">greedy-proxying</code> which
+ will cause the creates proxies to use <span class="emphasis"><em>all</em></span> the classes advertised by the imported services, visible to the consuming
+ importing bundle. Thus, it is possible to cast the imported proxies to classes different then those specified in the
+ <code class="literal">interfaces</code>. For example, with the following list definition:
+ </p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;list</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"services"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.SomeService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">greedy-proxying</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"true"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+
+ <p>one can do the following iteration (assuming <code class="classname">MessageDispatcher</code> type is imported by the bundle):</p>
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">for</strong> (Iterator iterator = services.iterator(); iterator.hasNext();) {
+ SomeService service = (SomeService) iterator.next();
+ service.executeOperation();
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">// if the service implements an additional type</em>
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">// do something extra</em>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">if</strong> (service <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">instanceof</strong> MessageDispatcher) {
+ ((MessageDispatcher)service).sendAckMessage();
+ }
+}</pre>
+
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">Before using greedy proxies and <code class="literal">instanceof</code> statements, consider using a different
+ interface/class for your services which provides better
+ <a class="ulink" href="http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming" target="_top">polymorphism</a>
+ and is more
+ <a class="ulink" href="http://en.wikipedia.org/wiki/Object_oriented" target="_top">object-oriented</a>.</td></tr></table></div>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:collection:member-type"></a>9.2.4.2.&nbsp;Member Type</h4></div></div></div>
+
+
+ <p>Since Spring DM 2.x/Gemini Blueprint, service collections can contain either service instances (default) or service references. The latter is useful if
+ the services themselves are not relevant but rather their properties and availability. For example, to track the service references,
+ the following configuration can be used:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;list</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"services"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.SomeService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">member-type</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"service-reference"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong></pre>
+
+ <p>Note that the collection contains <span class="emphasis"><em>native</em></span> service references which can be used by client to retrieve the backing
+ service (if needed). However, when using Gemini Blueprint/Spring DM this use case is discouraged since one can let the framework track the services instead
+ and get the (native) associated service reference from the proxy directly (see <a class="xref" href="service-registry.html#service-registry:refs:singular:property-editor" title="9.2.3.10.&nbsp;Getting A Hold Of The Managed Service Reference">Section&nbsp;9.2.3.10, &#8220;Getting A Hold Of The Managed Service Reference&#8221;</a>
+ for more details).</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:collection:attributes"></a>9.2.4.3.&nbsp;Collection (<code class="literal">list</code> And <code class="literal">set</code>) Element Attributes</h4></div></div></div>
+
+ <p>
+ <code class="literal">list</code> and <code class="literal">set</code> elements support all the attributes available to
+ <code class="literal">reference</code> element except the <code class="literal">timeout</code> attribute.
+
+ See the following table as a summary of the <code class="literal">list</code> and <code class="literal">set</code> element
+ attribute names, possible values and a short description for each of them.
+ </p>
+ <div class="table"><a name="collection-import-options"></a><p class="title"><b>Table&nbsp;9.4.&nbsp;&lt;list&gt;/&lt;set&gt; attributes</b></p><div class="table-contents">
+
+ <table class="table" summary="<list&gt;/<set&gt; attributes" width="100%" border="1"><colgroup><col class="c1"><col align="center" class="c2"><col align="center" class="c3"><col align="center" class="c4"><col align="center" class="c5"><col align="justify" class="c6"></colgroup><thead><tr><th>Name</th><th colspan="4" align="justify">Values</th><th align="justify">Description</th></tr></thead><tbody><tr><td>interface</td><td colspan="4" align="justify">fully qualified class name (such as <code class="classname">java.lang.Thread</code>)</td><td align="justify">The fully qualified name of the class under which the object will be exported.</td></tr><tr><td>filter</td><td colspan="4" align="justify">OSGi filter expression (such as <code class="literal">((asynchronous-delivery=true)</code>)</td><td align="justify">OSGi filter expression that is used to constrain the set of matching services
+ in the service registry.</td></tr><tr><td>bean-name</td><td colspan="4" align="justify">any string value</td><td align="justify">Convenient shortcut for specifying a filter expression that matches on the bean-name property
+ that is automatically advertised for beans published using the &lt;service&gt; element.</td></tr><tr><td>context-class-loader</td><td align="center">client</td><td colspan="2" align="center">service-provider</td><td align="center">unmanaged</td><td align="justify">Defines how the context class loader is managed when invoking operations on a service
+ backing this service reference. The default value is <code class="literal">client</code> which means that the context
+ class loader has visibility of the resources on this bundle's classpath. Alternate
+ options are <code class="literal">service-provider</code> which means that the context class loader has visibility of
+ resources on the bundle classpath of the bundle that exported the service, and <code class="literal">unmanaged</code>
+ which does not do any management of the context class loader.</td></tr><tr><td>availability</td><td colspan="2" align="center">optional</td><td colspan="2" align="center">mandatory</td><td align="justify">Defines the desired availability of the relationship to the backing service. If not specified,
+ the <code class="literal">default-availability</code> attribute will apply. 'mandatory' value (the default) means that a backing service
+ must exist at all times. The 'optional' value indicates that it is acceptable to be for an importer to have no
+ backing service.</td></tr><tr><td>comparator-ref</td><td colspan="4" align="justify">any string value</td><td align="justify">Named reference to a bean acting as comparator for the declaring collection. Declaring a comparator automatically
+ makes the declaring collection sorted.</td></tr><tr><td>greedy-proxying</td><td colspan="2" align="center">true</td><td colspan="2" align="center">false</td><td align="justify">Indicates whether the proxies created for the imported OSGi services will be generated using
+ just the classes specified (<code class="literal">false</code>) or all the classes exported by the service and visible to
+ the importing bundle (<code class="literal">true</code>). The default value is <code class="literal">false</code>.</td></tr><tr><td>member-type</td><td colspan="2" align="center">service-object</td><td colspan="2" align="center">service-reference</td><td align="justify">Indicates the type of object that will be placed within the reference collection.
+ <code class="literal">service-object</code> (the default) indicates the collection contains service proxies for imported services.
+ <code class="literal">service-reference</code> indicates the collection contains <code class="literal">ServiceReference</code> objects matching the
+ target service type.</td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>The table below lists the attributes available for the <code class="literal">comparator/natural</code> sub element.</p>
+
+ <div class="table"><a name="collection-import-comparator-options"></a><p class="title"><b>Table&nbsp;9.5.&nbsp;collection &lt;comparator&gt; attributes</b></p><div class="table-contents">
+
+ <table class="table" summary="collection <comparator&gt; attributes" width="100%" border="1"><colgroup><col class="c1"><col class="c2"><col class="c3"></colgroup><thead><tr><th>Name</th><th colspan="2">Values</th><th>Description</th></tr></thead><tbody><tr><td>basis</td><td>service</td><td>service-reference</td><td>Indicate the element on which <span class="emphasis"><em>natural ordering</em></span> should apply - <code class="literal">service</code> for considering
+ the service instance and <code class="literal">service-reference</code> for considering the service reference instead of the service.</td></tr></tbody></table>
+ </div></div><br class="table-break">
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:collection:dynamics"></a>9.2.4.4.&nbsp;<code class="literal">list</code> / <code class="literal">set</code> And OSGi Service Dynamics</h4></div></div></div>
+
+ <p>
+ A collection of OSGi services will change its content during the lifetime
+ of the application context since it needs to reflect the state of the OSGi
+ space. As service are registered and unregistered, they will be added or
+ removed from the collection.</p>
+
+ <p>While a <code class="literal">reference</code> declaration will try to
+ find a replacement if the backing service is unregistered, the collection
+ will simply remove the service from the collection.
+ Like <code class="literal">reference</code>, a collection of services can have a specified <code class="literal">availability</code>.
+ As opposed to <code class="literal">reference</code>s though, since Spring DM 2.x/Gemini Blueprint, a collection content can be queried, no matter
+ its availability and the number of services held.</p>
+ <p>Just like <code class="literal">reference</code>, mandatory collections
+ will trigger the unregistration of any exported service that depends
+ upon it. See
+ <a class="xref" href="service-registry.html#service-registry:export-import-relationship" title="9.2.2.2.&nbsp;Relationship Between The Service Exporter And Service Importer">Section&nbsp;9.2.2.2, &#8220;Relationship Between The Service Exporter And Service Importer&#8221;</a> for more information.
+ </p>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:collection:iterator"></a>9.2.4.5.&nbsp;<code class="interfacename">Iterator</code> Contract And Service Collections</h4></div></div></div>
+
+
+ <p>The recommend way of traversing a collection is by using an <code class="interfacename">Iterator</code>.
+ However, since OSGi services can come and go, the content of the managed service collection will be adjusted
+ accordingly. Gemini Blueprint/Spring DM will transparently update all <code class="interfacename">Iterator</code>s held by
+ the user so it is possible to safely traverse the collection while it is being modified. Moreover, the
+ <code class="interfacename">Iterator</code>s will reflect all the changes made to the collection, even if
+ they occurred after the <code class="interfacename">Iterator</code>s were created (that is during the iteration).
+ Consider a case where a collection shrinks significantly (for example a big number of OSGi
+ services are shutdown) right after an iteration started.
+ To avoid dealing with the resulting 'dead' service references,
+ Gemini Blueprint/Spring DM iterators do not take collection snapshots (that can be inaccurate)
+ but rather are updated on each service event so they reflect the latest collection state,
+ no matter how fast or slow the iteration is.</p>
+
+ <p>It is important to note that a service update will only influence <code class="interfacename">Iterator</code>
+ operations that are executed after the event occurred. Services already returned by the iterator will not be
+ updated even if the backing service has been unregistered. As a side note, if an operation is invoked on
+ such a service that has been unregistered, a <code class="literal">ServiceUnavailableException</code> will be thrown.
+ </p>
+
+ <p>To conclude, while a <code class="literal">reference</code> declaration will search for candidates in case the
+ backing service has been unregistered, a service collections will not replace unregistered services returned
+ to the user. However, it will remove the unregistered services from the collection so future iterations will not
+ encounter them.
+ </p>
+
+
+ <p>Please note that the <code class="interfacename">Iterator</code> contract is guaranteed meaning that
+ <code class="literal">next()</code> method <span class="emphasis"><em>always</em></span> obey the result of the previous
+ <code class="literal">hasNext()</code> invocation.</p>
+
+ <div class="table"><a name="collection-iterator-contract"></a><p class="title"><b>Table&nbsp;9.6.&nbsp;Dynamic service collection <code class="interfacename">Iterator</code> contract</b></p><div class="table-contents">
+
+ <table class="table" summary="Dynamic service collection Iterator contract" width="100%" border="1"><colgroup><col><col></colgroup><thead><tr><th>hasNext() returned value</th><th>next() behaviour</th></tr></thead><tbody><tr><td>true</td><td><span class="emphasis"><em>Always</em></span> return a non-null value, even when the collection has shrunk as services when away.
+ </td></tr><tr><td>false</td><td>per <code class="interfacename">Iterator</code> contract, <code class="classname">NoSuchElementException</code> is thrown.
+ This applies even if other services are added to the collection</td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>
+ The behaviour described above, offers a consistent view over the collection even if its structure changes during iteration.
+ To simply <span class="emphasis"><em>refresh</em></span> the iterator, call <code class="literal">hasNext()</code> again. This will force the
+ <code class="literal">Iterator</code> to check again the collection status for its particular entry in the iteration.</p>
+
+
+
+ <p>
+ In addition, any elements added to the collection during iteration over a <span class="emphasis"><em>sorted</em></span>
+ collection will only be visible if the iterator has not already passed
+ their sort point.</p>
+ </div>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:refs:dynamics"></a>9.2.5.&nbsp;Dealing With The Dynamics Of OSGi Imported Services</h3></div></div></div>
+
+
+ <div class="sidebar"><div class="titlepage"><div><div><p class="title"><b>Where is the <code class="literal">listener</code> element ?</b></p></div></div></div>
+
+ <p>Since Spring DM 2.x/Gemini Blueprint, the <code class="literal">reference-listener</code> replaced
+ the <code class="literal">listener</code> element which has been deprecated. The main reasons
+ behind the decisions were to align the configuration format closer with the Blueprint
+ spec and to avoid some of the confusion regarding the type of listener declared (service or reference
+ based). Note that <code class="literal">listener</code> element is still supported.</p>
+ </div>
+
+ <p>Whether you are using <code class="literal">reference</code>
+ or <code class="literal">set</code> or <code class="literal">list</code>, Spring Dynamic
+ Modules will manage the backing service. However there are cases
+ where the application needs to be aware when the backing service
+ is updated.</p>
+
+ <p>Such applications, that need to be aware of when the service
+ backing a <code class="literal">reference</code> bean is bound and unbound, can
+ register one or more listeners using the nested
+ <code class="literal">reference-listener</code> (or <code class="literal">listener</code>) element.
+ This element is available on both <code class="literal">reference</code> and
+ <code class="literal">set</code>, <code class="literal">list</code> declarations.
+ In many respects, the service importer listener declaration
+ is similar to the service exporter listener declaration
+ (<a class="xref" href="service-registry.html#service-registry:export:lifecycle" title="9.1.10.&nbsp;Service Registration And Unregistration Lifecycle">Section&nbsp;9.1.10, &#8220;Service Registration And Unregistration Lifecycle&#8221;</a>).
+
+ The <code class="literal">reference-listener</code> element refers to a bean (either by name,
+ or by defining one inline)
+ that will receive bind and unbind notifications. If this bean
+ implements Gemini Blueprint/Spring DM's
+ <code class="interfacename">org.eclipse.gemini.blueprint.service.importer.OsgiServiceLifecycleListener</code>
+ interface, then the <code class="literal">bind</code> and
+ <code class="literal">unbind</code> operations in this interface will be
+ invoked. Instead of implementing this interface (or in addition),
+ custom bind and unbind callback methods may be named.</p>
+
+ <p>An example of declaring a listener that implements
+ <code class="interfacename">OsgiServiceLifecycleListener</code>:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;reference</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"someService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MessageService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;reference-listener</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"aListenerBean"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/reference&gt;</strong></pre>
+
+ <p>An example of declaring an inline listener bean with custom
+ bind and unbind methods:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;reference</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"someService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.MessageService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;reference-listener</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">bind-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"onBind"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">unbind-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"onUnbind"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans:bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"MyCustomListener"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/reference-listener&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/reference&gt;</strong></pre>
+
+ <p>If the listener bean implements the
+ <code class="interfacename">OsgiServiceLifecycleListener</code> interface
+ <span class="emphasis"><em>and</em></span> the listener definition specifies custom
+ bind and unbind operations then both the
+ <code class="literal">OsgiServiceLifecycleListener</code> operation and the
+ custom operation will be invoked, in that order.</p>
+
+ <p>The signature of a custom bind or unbind method must be one
+ of:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> anyMethodName(ServiceType service, Dictionary properties);
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> anyMethodName(ServiceType service, Map properties);
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> anyMethodName(ServiceReference ref);</pre>
+
+ <p>where <code class="literal">ServiceType</code> can be any type. Please note that
+ bind and unbind callbacks are invoked <span class="emphasis"><em>only</em></span>
+ if the backing service matches the type declared in the method signature(
+ <code class="classname">ServiceType</code>). If you want the callbacks to be called
+ no matter the type, use <code class="classname">java.lang.Object</code> as a
+ <code class="literal">ServiceType</code>.</p>
+
+ <p>
+ The <code class="literal">properties</code> parameter contains the set of properties
+ that the service was registered with.</p>
+
+ <p>If the method signature has a single argument of type
+ <code class="interfacename">ServiceReference</code> then the
+ <code class="interfacename">ServiceReference</code> of the service will be passed to
+ the callback in place of the service object itself.</p>
+
+
+ <p>When the listener is used with a <code class="literal">reference</code> declaration:</p>
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">A <span class="emphasis"><em>bind</em></span> callback is invoked
+ when the reference is initially bound to a backing service,
+ and whenever the backing service is replaced by a new backing service.
+ </li><li class="listitem">An <span class="emphasis"><em>unbind</em></span> callback is only
+ invoked when the current backing service is unregistered, and no
+ replacement service is immediately available
+ (i.e., the <code class="literal">reference</code> becomes unsatisfied).</li></ul></div>
+
+
+ <p>When the listener is used with a collection declaration (<code class="literal">set</code> or
+ <code class="literal">list</code>):</p>
+
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">A <span class="emphasis"><em>bind</em></span> callback is invoked
+ when a new service is added to the collection.
+ </li><li class="listitem">An <span class="emphasis"><em>unbind</em></span> callback is
+ invoked when a service is unregistered and is removed
+ from the collection.</li></ul></div>
+
+ <p>Again note that service collections there is <span class="emphasis"><em>no</em></span>
+ notion of <span class="emphasis"><em>service rebind</em></span>:
+ services are added or removed from the collection.</p>
+
+
+ <p>Bind and unbind callbacks are made synchronously as part of
+ processing an OSGi <code class="literal">serviceChanged</code> event for the
+ backing OSGi service, and are invoked on the OSGi thread that
+ delivers the corresponding OSGi
+ <code class="classname">ServiceEvent</code>.</p>
+
+ <p>The table below lists the attributes available for the <code class="literal">reference</code> <code class="literal">listener</code> sub element.</p>
+
+ <div class="table"><a name="reference-import-listener-options"></a><p class="title"><b>Table&nbsp;9.7.&nbsp;OSGi &lt;reference-listener&gt; attributes</b></p><div class="table-contents">
+
+ <table class="table" summary="OSGi <reference-listener&gt; attributes" width="100%" border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Name</th><th>Values</th><th>Description</th></tr></thead><tbody><tr><td>ref</td><td>bean name reference</td><td>Name based reference to another bean acting as listener.</td></tr><tr><td>bind-method</td><td>string representing a valid method name</td><td>The name of the method to be invoked when a backing service is bound.</td></tr><tr><td>unbind-method</td><td>string representing a valid method name</td><td>The name of the method to be invoked when a backing service is bound.</td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ </div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:refs:blueprint"></a>9.2.6.&nbsp;Blueprint <code class="literal">reference</code> Comparison</h3></div></div></div>
+
+
+ <p>Similar to Gemini Blueprint/Spring DM, the Blueprint Container offers a <code class="literal">reference</code> and <code class="literal">list</code> elements,
+ identical in functionality with the those in Gemini Blueprint/Spring DM. Below is a summary of the configuration options available in Gemini Blueprint/Spring DM and Blueprint:</p>
+
+ <div class="table"><a name="service-registry:refs:blueprint:comparison"></a><p class="title"><b>Table&nbsp;9.8.&nbsp;Spring DM / Blueprint Service Importer Configuration Comparison</b></p><div class="table-contents">
+
+ <table class="table" summary="Spring DM / Blueprint Service Importer Configuration Comparison" width="100%" border="1"><colgroup><col><col></colgroup><thead><tr><th align="center">Gemini Blueprint/Spring DM</th><th align="center">Blueprint</th></tr></thead><tbody><tr><td align="center">Common Elements/Attributes</td><td class="auto-generated">&nbsp;</td></tr><tr><td align="center">interface</td><td align="center">interface</td></tr><tr><td align="center">interfaces</td><td align="center">- (multiple interfaces not supported)</td></tr><tr><td align="center">ref</td><td align="center">ref</td></tr><tr><td align="center">filter</td><td align="center">filter</td></tr><tr><td align="center">bean-name</td><td align="center">component-name</td></tr><tr><td align="center">availability</td><td align="center">availability</td></tr><tr><td align="center">context-class-loader</td><td align="center">-</td></tr><tr><td align="center"><code class="literal">&lt;reference&gt;</code></td><td class="auto-generated">&nbsp;</td></tr><tr><td align="center">timeout</td><td align="center">timeout</td></tr><tr><td align="center">sticky</td><td align="center">- (the importer is always sticky)</td></tr><tr><td align="center"><code class="literal">&lt;list&gt;</code></td><td class="auto-generated">&nbsp;</td></tr><tr><td align="center">member-type</td><td align="center">member-type</td></tr><tr><td align="center">comparator-ref</td><td align="center">-</td></tr><tr><td align="center">greedy-proxying</td><td align="center">-</td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>Since the <code class="literal">registration-listener</code> declaration is identical in declaration and functionality between Blueprint
+ and Gemini Blueprint/Spring DM, this section does not mention it.</p>
+ </div>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="service-registry:refs:listener-and-proxies"></a>9.3.&nbsp;Listener And Service Proxies</h2></div></div></div>
+
+ <p>While the importer listener provides access to the OSGi service bound at a certain point, it is important to note that the given argument is <span class="emphasis"><em>not</em></span>
+ the actual service but a <span class="emphasis"><em>proxy</em></span>. This can have subtle side effects especially with regards to service class name
+ and identity. The reason behind using a proxy is to prevent the listener from holding strong reference to the service (which can disappear
+ at any point). Listeners interested in tracking certain services should not rely on instance equality (<code class="literal">==</code>). Object equality
+ (<code class="methodname">equals</code>/<code class="methodname">hashcode</code>) can be used but only if the backing service has exposed the aforementioned methods
+ as part of its contract (normally by declaring them on a certain published interface/class). If these methods are not published, the proxy will invoke its own method, not the targets. This is on purpose since,
+ while the proxy tries to be as transparent as possible, it is up to the developer to define the desired semantics.
+ </p>
+ <p>Thus, it is recommended (especially for <code class="literal">reference</code> importers) to do tracking based on just the service interface/contract
+ (not identity), service properties (see <code class="constant">org.osgi.framework.Constants#SERVICE_ID</code>) or service notification (bind/unbind).</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="service-registry:refs:invoker-bundle-context"></a>9.4.&nbsp;Accessing The Caller <code class="interfacename">BundleContext</code></h2></div></div></div>
+
+
+ <p>It is sometimes useful for an imported service to know which bundle is using it
+ at a certain time. To help with this scenario, in Gemini Blueprint/Spring DM imported services publish
+ the importing bundle <code class="interfacename">BundleContext</code> through
+ <code class="classname">LocalBundleContext</code> class. Each time a method on the importer is invoked,
+ the caller <code class="interfacename">BundleContext</code> will be made available, using
+ a <code class="classname">ThreadLocal</code>, through <code class="methodname">getInvokerBundleContext()</code>.
+ </p>
+ <p>Please be careful when using this class since it ties your code to Gemini Blueprint/Spring DM API.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="service-registry:refs:listener-best-practices"></a>9.5.&nbsp;Exporter/Importer Listener Best Practices</h2></div></div></div>
+
+
+ <p>As mentioned above, Gemini Blueprint/Spring DM exporter and importer allow listeners to be
+ used for receiving notifications on when services are bound, unbound, registered or
+ unregistered. Below you can find some guidance advices when working with listeners:
+ </p>
+
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ Do <span class="emphasis"><em>not</em></span> execute long activity tasks inside the listener. If you really
+ have to, use a separate thread for executing the work. The listener are called synchronously
+ and so try to be as fast as possible. Doing work inside the listener prevents other the event
+ to be sent to other listeners and the OSGi service to resume activity.
+ </li><li class="listitem">Use listener custom declaration as much as possible - it doesn't tie your code
+ to Gemini Blueprint/Spring DM API and it doesn't enforce certain signature names.</li><li class="listitem">If find yourself repeating bind/unbind method declarations for your listener definitions,
+ consider using Spring <a class="ulink" href="http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-child-bean-definitions" target="_top">
+ bean definition inheritance</a> to define a common definition that can be reused and customized
+ accordingly.
+ </li><li class="listitem">Prefer <code class="interfacename">java.util.Map</code> instead of <code class="classname">java.util.Dictionary</code>
+ class. The first is an interface while the latter is a deprecated, abstract class. To preserve compatibility, Gemini Blueprint/Spring DM
+ will pass to the listeners a <code class="interfacename">Map</code> implementation that can be casted, if needed, to a
+ <code class="classname">Dictionary</code>.</li><li class="listitem">Be careful when using overloaded methods: all methods matching a certain service type will be called which is not
+ always expected. Consider the following listener:
+ <div class="programlistingco"><pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">class</strong> MyListener {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> register(<span class="co" id="service-registry:refs:listener:type.1"><img src="images/callouts/1.png" alt="(1)"></span>Object service, Map properties);
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> register(<span class="co" id="service-registry:refs:listener:type.2"><img src="images/callouts/2.png" alt="(2)"></span>Collection dataService, Map properties);
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> register(<span class="co" id="service-registry:refs:listener:type.3"><img src="images/callouts/3.png" alt="(3)"></span>SortedSet orderedDataService , Map properties);
+}</pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <a name="service-registry:refs:listener:type.1"></a>
+ <p><code class="classname">Object</code> type - will match all services for which the listener is triggered. This method will be always called.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <a name="service-registry:refs:listener:type.2"></a>
+ <p><code class="classname">Collection</code> type - if this method is called, the <a class="link" href="service-registry.html#service-registry:refs:listener:type.1">
+ <code class="classname">Object</code> method</a> is also called.
+ </p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/3.png" alt="3" border="0"></span></p></td><td valign="top" align="left">
+ <a name="service-registry:refs:listener:type.3"></a>
+ <p><code class="classname">SortedSet</code> type - if this method is called, then both the <a class="link" href="service-registry.html#service-registry:refs:listener:type.1">
+ <code class="classname">Object</code></a> and <a class="link" href="service-registry.html#service-registry:refs:listener:type.2"><code class="classname">Collection</code></a>
+ methods are called.</p>
+ </td></tr></table></div></div>
+
+ </li></ul></div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:refs:listener-best-practices:cycles"></a>9.5.1.&nbsp;Listener And Cyclic Dependencies</h3></div></div></div>
+
+
+ <p>There are cases where an exporter/importer listener needs a reference back to the bean it is defined on:</p>
+
+ <div class="programlistingco"><pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"listener"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"cycle.Listener"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong> <span class="co" id="service-registry.listener.cycles.listener"><img src="images/callouts/1.png" alt="(1)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"target"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"importer"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong> <span class="co" id="service-registry.listener.cycles.listener.cycle"><img src="images/callouts/2.png" alt="(2)"></span>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:reference</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"importer"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"SomeService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong> <span class="co" id="service-registry.listener.cycles.bean"><img src="images/callouts/3.png" alt="(3)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:listener</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">bind-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"bind"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"listener"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong> <span class="co" id="service-registry.listener.cycles.bean.cycle"><img src="images/callouts/4.png" alt="(4)"></span>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:reference&gt;</strong></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p>Listener bean</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>Dependency listener -&gt; importer</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/3.png" alt="3" border="0"></span></p></td><td valign="top" align="left">
+ <p>Importer declaration</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/4.png" alt="4" border="0"></span></p></td><td valign="top" align="left">
+ <p>Dependency importer -&gt; listener</p>
+ </td></tr></table></div></div>
+
+ <p>
+ The declaration above while valid, creates a dependecy between the <code class="literal">listener</code> and the importer it is defined upon.
+ In order to create the importer, the <code class="literal">listener</code> has to be resolved and created but in order to do that,
+ the importer called <code class="literal">service</code> needs to be retrieved (instantiated and configured). This cycle needs to be broken
+ down so that at least one bean can be fully created and configured. This scenario is supported by Gemini Blueprint/Spring DM
+ for both exporter and importers however, if the listener is defined as a nested bean, the cycle cannot be resolved:</p>
+
+ <div class="programlistingco"><pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:reference</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"importer"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"SomeService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong> <span class="co" id="service-registry.listener.bad.cycles.bean"><img src="images/callouts/1.png" alt="(1)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;osgi:listener</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">bind-method</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"bind"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong> <span class="co" id="service-registry.listener.bad.cycles.bean.cycle"><img src="images/callouts/2.png" alt="(2)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;bean</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">class</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"cycle.Listener"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong> <span class="co" id="service-registry.listener.bad.cycles.listener"><img src="images/callouts/3.png" alt="(3)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;property</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">name</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"target"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">ref</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"importer"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag"> /&gt;</strong> <span class="co" id="service-registry.listener.bad.cycles.listener.cycle"><img src="images/callouts/4.png" alt="(4)"></span>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/bean&gt;</strong>
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:listener&gt;</strong>
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/osgi:reference&gt;</strong></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p>OSGi service importer</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>Dependency between importer -&gt; listener</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/3.png" alt="3" border="0"></span></p></td><td valign="top" align="left">
+ <p>Nested listener declaration</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/4.png" alt="4" border="0"></span></p></td><td valign="top" align="left">
+ <p>Dependency nested listener -&gt; importer</p>
+ </td></tr></table></div></div>
+
+ <div class="sidebar"><div class="titlepage"><div><div><p class="title"><b>Beans and Cycles</b></p></div></div></div>
+
+ <p>
+ Cyclic dependencies (A depends on B which depends back on A) increase the complexity of your configuration
+ and in most cases indicate a design issue. What beans should be created and destroyed first for example?
+ While they are a bad practice, the Spring container makes a best attempt to solve the cyclic configurations
+ when singletons are involved (since the instances can be cached). However this does not work all the time and
+ depends heavily on your specific configuration (Can the bean class be partially initialized ? Does it rely on
+ special <code class="interfacename">Aware</code> interfaces? Are <code class="interfacename">BeanPostProcessor</code>s involved?)
+ </p>
+ </div>
+
+ <p>The example above will fail since <code class="literal">service</code> bean cannot be initialized as it depends on the
+ listener. The same cycle was seen before but in this case there is subtle yet big different from
+ the container perspective - the listener is declared as a nested/inner-bean (hence the missing bean <code class="literal">id</code>).
+ Inner beans have the same life cycle as their declaring parents and do not have any name. By definition, they are not tracked
+ by the container and are simply created on demand. Since the importer cannot be partially created and the nested listener cannot
+ be cached, the container cannot break the cycle and create the beans. While the two configurations shown above seem similar, one works
+ while the other does not. Another reason to not use cycles unless you really, really have to.</p>
+
+ <p>To conclude, if you need inside the listener to hold a reference to the exporter/importer on which the listener is declared,
+ either declare the listener as a <span class="emphasis"><em>top-level</em></span> bean (as shown before) or consider doing <span class="emphasis"><em>dependency lookup</em></span>.
+ However, the latter approach requires extra contextual information such as the <code class="interfacename">BeanFactory</code> to use and the bean
+ name and is more fragile then <span class="emphasis"><em>dependency injection</em></span>.</p>
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
+ <p>For those interested in the technical details, neither the exporter and importer cannot be partially initialized since
+ they require the application context <code class="classname">ClassLoader</code> which is requested through the
+ <code class="interfacename">BeanClassLoaderAware</code> which relies on a buit-in <code class="interfacename">BeanPostProcessor</code>
+ which is applied only after the bean has been configured and is ready for initialization. If the <code class="classname">ClassLoader</code>
+ was not required then the exporter/importer could have been partially initialized and the case above supported.</p>
+ </td></tr></table></div>
+
+ </div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="service-registry:refs:global-defaults"></a>9.6.&nbsp;Service Importer Global Defaults</h2></div></div></div>
+
+
+ <p>The <code class="literal">osgi</code> namespace offers two
+ global attributes for specifying default behaviours for all
+ importers declared in that file.</p>
+
+ <p>Thus, when using the <code class="literal">osgi</code> namespace to enclose
+ <code class="literal">set</code>, <code class="literal">list</code> or
+ <code class="literal">reference</code> elements, one can use:</p>
+
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <p><code class="literal">default-timeout</code> -
+ can be used to specify the default timeout (in milliseconds) for all
+ importer elements that do not explicitly specify one. For
+ example:</p>
+
+ <div class="programlistingco"><pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:xsi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:osgi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/osgi"</span> <span class="co" id="service-registry.global.ns.defaults.osgi.ns"><img src="images/callouts/1.png" alt="(1)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">osgi:default-timeout</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"5000"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong> <span class="co" id="service-registry.global.ns.defaults.timeout"><img src="images/callouts/2.png" alt="(2)"></span>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;reference</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"someService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.AService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong> <span class="co" id="service-registry.global.ns.default.serv.wo.timeout"><img src="images/callouts/3.png" alt="(3)"></span>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;reference</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"someOtherService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.BService"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">timeout</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"1000"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong> <span class="co" id="service-registry.global.ns.default.serv.w.timeout"><img src="images/callouts/4.png" alt="(4)"></span>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/beans:beans&gt;</strong></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p>Declare <code class="literal">osgi</code> namespace prefix.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>Declare <code class="literal">default-timeout</code>(in miliseconds) on the root element.
+ If the default is not set, it will have a value of 5 minutes. In this example, the
+ default value is 5 seconds.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/3.png" alt="3" border="0"></span></p></td><td valign="top" align="left">
+ <p>This <code class="literal">reference</code> will inherit the default timeout value since
+ it does not specify one.
+ This service reference will have a timeout of 5 seconds.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/4.png" alt="4" border="0"></span></p></td><td valign="top" align="left">
+ <p>This <code class="literal">reference</code> declares a timeout, overriding the default value.
+ This service reference will have a timeout of 1 second.</p>
+ </td></tr></table></div></div>
+
+ </li><li class="listitem">
+ <p><code class="literal">default-availability</code> -
+ can be used to specify the default availability for all
+ importer elements that do not explicitly specify one.
+ Possible values are <code class="literal">optional</code> and <code class="literal">mandatory</code>.
+ The <code class="literal">default-cardinality</code> attribute, used by Spring DM 1.x, is still
+ available but it has been deprecated.
+ </p>
+
+ <p>Consider the following example:</p>
+
+ <div class="programlistingco"><pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;beans:beans</strong>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/osgi"</span> <span class="co" id="service-registry.global.ns.defaults.osgi"><img src="images/callouts/1.png" alt="(1)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:xsi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:beans</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/beans"</span> <span class="co" id="service-registry.global.ns.defaults.osgi.beans.ns"><img src="images/callouts/2.png" alt="(2)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">xmlns:osgi</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"http://www.springframework.org/schema/osgi"</span> <span class="co" id="service-registry.global.ns.defaults.osgi.ns.again"><img src="images/callouts/3.png" alt="(3)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">osgi:default-availability</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"optional"</span> <span class="co" id="service-registry.global.ns.defaults.osgi.cardinality"><img src="images/callouts/4.png" alt="(4)"></span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">default-lazy-init</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"false"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&gt;</strong> <span class="co" id="service-registry.global.ns.defaults.osgi.beans.defaults"><img src="images/callouts/5.png" alt="(5)"></span>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;reference</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"someService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.AService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong> <span class="co" id="service-registry.global.ns.defaults.osgi.ref.wo.cardinality"><img src="images/callouts/6.png" alt="(6)"></span>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;set</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"someSetOfService"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.BService"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong> <span class="co" id="service-registry.global.ns.defaults.osgi.collection.wo.cardinality"><img src="images/callouts/7.png" alt="(7)"></span>
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;list</strong> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">id</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"anotherListOfServices"</span> <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">interface</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"com.xyz.CService"</span>
+ <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-attribute">availability</span>=<span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-value">"mandatory"</span><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">/&gt;</strong> <span class="co" id="service-registry.global.ns.defaults.osgi.collection.w.cardinality"><img src="images/callouts/8.png" alt="(8)"></span>
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-tag">&lt;/beans:beans&gt;</strong></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/1.png" alt="1" border="0"></span></p></td><td valign="top" align="left">
+ <p>Declare Gemini Blueprint schema as the default namespace.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/2.png" alt="2" border="0"></span></p></td><td valign="top" align="left">
+ <p>Import Spring Framework beans schema and associate a prefix with its namespace
+ (<code class="literal">beans</code> in this example).</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/3.png" alt="3" border="0"></span></p></td><td valign="top" align="left">
+ <p>Import Gemini Blueprint schema and associate a prefix with its namespace
+ (<code class="literal">osgi</code> in this example). This is required since the global attributes
+ have to be declared to an element (<code class="literal">beans</code>) belonging to another schema.
+ To avoid ambiguity, the Gemini Blueprint/Spring DM schema is imported under a specified prefix as well.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/4.png" alt="4" border="0"></span></p></td><td valign="top" align="left">
+ <p>Declare <code class="literal">default-availability</code> on the root element.
+ If the default is not set, it will have a value of <code class="literal">mandatory</code>. In this example, the
+ default value is <code class="literal">optional</code>. Note the <code class="literal">osgi</code> prefix added to
+ the global attribute.</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/5.png" alt="5" border="0"></span></p></td><td valign="top" align="left">
+ <p><code class="literal">beans</code> element attributes (such as <code class="literal">default-lazy-init</code>)
+ do not need a prefix since they are declared as being local and unqualified
+ (see the beans schema for more information).</p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/6.png" alt="6" border="0"></span></p></td><td valign="top" align="left">
+ <p>
+ The <code class="literal">reference</code> declaration will inherit the default availability value since it does not specify one.
+ </p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/7.png" alt="7" border="0"></span></p></td><td valign="top" align="left">
+ <p>
+ The <code class="literal">set</code> declaration will inherit the default availability value since it does not specify one.
+ </p>
+ </td></tr><tr><td width="5%" valign="top" align="left"><p><span><img src="images/callouts/8.png" alt="8" border="0"></span></p></td><td valign="top" align="left">
+ <p>The <code class="literal">list</code> declaration specifies its availability (<code class="literal">mandatory</code>),
+ overriding the default value.</p>
+ </td></tr></table></div></div>
+
+ </li></ul></div>
+
+ <p>The <code class="literal">default-*</code> attributes allow for concise and shorter declarations as well
+ as easy propagation of changes (such as increasing or decreasing the timeout).</p>
+ </div>
+ </div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="app-deploy.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="bundles.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;8.&nbsp;Packaging and Deploying Spring-based OSGi applications&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;10.&nbsp;Working With Bundles</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/spring-osgi-faq.html b/documentation/reference/3.0.0.M01/html/spring-osgi-faq.html
new file mode 100644
index 0000000..c2c093c
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/spring-osgi-faq.html
@@ -0,0 +1,422 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Chapter&nbsp;1.&nbsp;Frequently Asked Questions</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="faq.html" title="Eclipse Gemini Blueprint"><link rel="up" href="faq.html" title="Eclipse Gemini Blueprint"><link rel="prev" href="faq.html" title="Eclipse Gemini Blueprint"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="spring-osgi-faq"></a>Chapter&nbsp;1.&nbsp;Frequently Asked Questions</h1></div></div></div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="eclipse-springdm"></a>1.1.&nbsp;What's the relationship between Spring Dynamic Modules and Gemini Blueprint?</h2></div></div></div>
+
+
+ <p>Eclipse Gemini Blueprint is based on Spring Dynamic Modules 2.0 which has been migrated
+ to the Eclipse Foundation. While the name and the packages have changed the internals are still the same; one
+ will find both names are used interchangeably (especially by those that have used Spring DM for a while).
+ Further more, all Spring DM applications are supported by Gemini Blueprint (do pay attention to the migration guide available
+ <a class="ulink" href="http://www.eclipse.org/gemini/blueprint/documentation/migration/" target="_top">here</a>).</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="name-change"></a>1.2.&nbsp;What happened to "Spring OSGi" project name?</h2></div></div></div>
+
+
+ <p>The OSGi term is a trademark belonging to <a class="ulink" href="http://www.osgi.org/" target="_top">The OSGi Alliance</a>. In order to
+ comply with their guidelines, it was decided that the project name
+ be changed to "Spring Dynamic Modules for OSGi Service Platforms"
+ (aka Spring DM). The new name is still pending final approval
+ by the OSGi Alliance.
+ The name change was the result of an amicable discussion between
+ the OSGi Alliance and Interface21. Interface21 is a member of the
+ OSGi Alliance, and the OSGi Alliance remain very supportive of
+ the project.
+ Note that Spring Dynamic Modules has moved to Eclipse Foundation to form Gemini Blueprint project (see above)</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="internal-package"></a>1.3.&nbsp;Why aren't there any javadocs on <code class="literal">*.internal.*</code>?</h2></div></div></div>
+
+
+ <p><code class="literal">org.eclipse.gemini.blueprint.*.internal</code> packages are
+ meant (as the name implies) to be private and non-public package. Thus,
+ there is no documentation, support or compatibility guarantee for
+ them. In fact, the Gemini Blueprint bundle does not even export
+ them to prevent accidental usage.</p>
+
+ <p>If you find classes under this package, which you really, really
+ depend on, then consider raising an issue on <a class="ulink" href="http://opensource.atlassian.com/projects/spring/browse/OSGI" target="_top">JIRA</a>
+ to have access opened up.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="requirements"></a>1.4.&nbsp;What are Gemini Blueprint requirements?</h2></div></div></div>
+
+ <p>
+ Gemini Blueprint requires at least Java 1.7, OSGi 4.1+ and Spring 4.2
+ It might be possible to use Gemini Blueprint on a lower <a class="ulink" href="http://wiki.eclipse.org/index.php/Execution_Environments" target="_top">execution environment</a>
+ (such <a class="ulink" href="http://java.sun.com/products/cdc/" target="_top">CDC</a>) but
+ it is not guaranteed to work.
+ Both Spring and Gemini Blueprint rely on <a class="ulink" href="http://java.sun.com/products/javabeans/" target="_top">
+ JavaBeans</a> (java.beans package) which, unfortunately, is missing in most
+ restricted environments. See this <a class="ulink" href="http://java.sun.com/products/cdc/reference/cdc_packages.pdf" target="_top">PDF</a> for information on CDC profiles.
+ Note that, Spring 4.2 also requires Java 1.7.
+ </p>
+ <p>
+ Nevertheless, experiences and feedback on running Gemini Blueprint in restricted environments
+ is welcomed - please use our mailing list.
+ </p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="other-module-frameworks"></a>1.5.&nbsp;Are there plans to support other dynamic module frameworks (such as the JSR 277 extensions in Java 7)?</h2></div></div></div>
+
+ <p>There are no current plans to support other dynamic module frameworks.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="restricted-environments"></a>1.6.&nbsp;Will Gemini Blueprint work in restricted environments (such as small/mobile devices)?</h2></div></div></div>
+
+ <p>See the <a class="link" href="spring-osgi-faq.html#requirements" title="1.4.&nbsp;What are Gemini Blueprint requirements?">requirements</a> entry. The OSGi Service Platform is designed to run in
+ very constrained environments however, Gemini Blueprint depends on the Spring Framework v4.2.x which in turn depends on
+ JDK 1.7. Thus Gemini Blueprint cannot run on more constrained environments (such as the OSGi Minimum Execution Environment)
+ unless Spring itself also runs in those environments. There are no current plans to make such a version of Spring.
+ However as existing OSGi developers adopt Gemini Blueprint to simplify creation of OSGi applications and the user
+ base expands, the target audience can cover domains much broader than <span class="emphasis"><em>enterprise Java applications</em></span>.
+ In time this could create a large enough demand to justify the investment needed to allow Spring and Gemini Blueprint to run in
+ restricted environments.</p>
+ </div>
+
+
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="supported-osgi-platforms"></a>1.7.&nbsp;What OSGi platforms are supported?</h2></div></div></div>
+
+ <p>
+ Gemini Blueprint requires an OSGi 4.2 (though it might work on OSGi 4.0 and 4.1) platform. The framework has been tested
+ on <a class="ulink" href="http://www.eclipse.org/equinox/" target="_top">Equinox</a>, <a class="ulink" href="http://felix.apache.org" target="_top">Felix</a>
+ and <a class="ulink" href="http://www.knopflerfish.org/" target="_top">Knopflerfish</a>
+ - in fact, the test suite is <a class="ulink" href="http://build.springframework.org:8085/bamboo/browse/OSGI" target="_top">ran</a>
+ against all of them as part of our continuous integration process.
+ </p>
+ </div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="osgi-intro"></a>1.8.&nbsp;Where can I learn about OSGi?</h2></div></div></div>
+
+ <p>
+ The best place to start is The Osgi Alliance <a class="ulink" href="http://www.osgi.org/" target="_top">home</a> and
+ <a class="ulink" href="http://www2.osgi.org/Main/HomePage" target="_top">developer</a> pages which
+ provide the OSGi specifications, introductions and many links and blogs on the topic.
+ Please see the reference documentation appendix for more information.
+ </p>
+
+ <p>
+ In addition, all OSGi implementation websites host detailed, step-by-step tutorials and introduction.
+ </p>
+
+ <p>
+ If you discover any additional materials useful for OSGi newbies, please let us know to update the list.
+ Thank you.
+ </p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="building-the-sources"></a>1.9.&nbsp;I have problems building the sources. What can I do?</h2></div></div></div>
+
+ <p>Please see the file called <code class="literal">readme-building.txt</code> found in the source tree.
+ </p>
+ </div>
+
+
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="logging"></a>1.10.&nbsp;How can I use logging in OSGi?</h2></div></div></div>
+
+
+ <p>OSGi platforms do not change the way libraries work, it just
+ enforces tighter classloading. Thus, you can, in most of the cases,
+ use the same logging strategy used in non-OSGi environments.</p>
+
+ <p>Spring (and Gemini Blueprint) use internally the <a class="ulink" href="http://commons.apache.org/logging/" target="_top">commons-logging API</a>
+ which acts as an "ultra-thin bridge between different logging
+ implementations". In OSGi, just like in a non-OSGi environment, Spring
+ and Gemini Blueprint delegate all logging (including initialisation) to the
+ actual commons-logging API implementation.</p>
+
+ <p>Out of the box, <a class="ulink" href="http://www.slf4j.org/" target="_top">SLF4J</a> library is provided, which
+ shares the same purpose as commons-logging but without the
+ class loading discovery mechanism (that causes loading issues), using
+ static wiring (see the SLF4J site for more info). To use slf4j, make sure
+ you use: <code class="literal">slf4j-api-XXX.jar</code>, <code class="literal">jcl104-overslf4j-XXX.jar</code>
+ and <code class="literal">slf4j-log4j-XXX.jar</code> (where XXX stands for the slf4j version).
+ The last jar provides the static wiring between slf4j and log4j - if another implementation
+ is desired (such as jdk14), then a different jar is required (for the jdk14 that would be
+ slf4j-jdk14-XXX.jar) - see the official SLF4J site for more information.
+ Please see <a class="link" href="spring-osgi-faq.html#commons-logging" title="1.11.&nbsp;If you use the commons-logging API, why rely on SLF4J and not the commons-logging jar?">this
+ question</a> for more details on why commons-logging jar is not
+ used.</p>
+
+ <p>Gemini Blueprint uses SLF4J on top of <a class="ulink" href="http://logging.apache.org/log4j/" target="_top">Log4J</a> but this can be
+ easily changed. As part of log4j initialisation, a
+ <code class="literal">log4j.properties</code> or <code class="literal">log4j.xml</code>
+ configuration fille needs to be present in the bundle classpath. This
+ means that the configuration file has to be part of your bundle or one
+ of its attached fragments. Besides SLF4J, for another OSGi-aware
+ solution, one can try <a class="ulink" href="http://wiki.ops4j.org/dokuwiki/doku.php?id=pax:logging" target="_top">Pax
+ Logging</a>.</p>
+
+ <p>To learn more about log4j setup process, follow this <a class="ulink" href="http://logging.apache.org/log4j/1.2/manual.html" target="_top">link</a>.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="commons-logging"></a>1.11.&nbsp;If you use the commons-logging API, why rely on SLF4J and
+ not the commons-logging jar?</h2></div></div></div>
+
+
+ <p>The commons-logging project provides the commons-logging API
+ (<code class="literal">commons-logging-api-nn.jar</code>) along with an
+ implementation (<code class="literal">commons-logging-adapters-nn.jar</code>)
+ that provides a wrapper between the API and the actual logging libraries
+ used underneath (such as log4j, java.util.logging, etc). However, in
+ order to determine what implementation should be used, commons-logging
+ library tries to do some classloading-based discovery that is fragile
+ and can fail unexpectedly. In an strict classloading environment such
+ as OSGi, this mechanism adds unnecessary complexity - that's why we
+ decided to use SFL4J which is not just simpler and actively maintained
+ but is also OSGi-friendly out of the box.</p>
+
+ <p>For more information about commons-logging classloading
+ problems, see these links: <a class="ulink" href="http://radio.weblogs.com/0122027/2003/08/15.html" target="_top">#1</a>
+ <a class="ulink" href="http://www.qos.ch/logging/thinkAgain.jsp" target="_top">#2</a></p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="getting-commons-logging-to-work"></a>1.12.&nbsp;I have to use commons-logging, what can I do?</h2></div></div></div>
+
+
+ <p>If you have to use commons-logging (for example the jar is required by certain bundles)
+ then try using the most recent version commons-logging version (1.1+) as it provides more options
+ on the discovery process. Below are some settings that can be used to make commons-logging work
+ inside an OSGi environment:</p>
+
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <p>1.0.x</p>
+ <p>
+ Unfortunately, commons-logging 1.0.x uses the thread context class loader (TCCL) always for <a class="ulink" href="http://commons.apache.org/logging/commons-logging-1.1/tech.html#A_Short_Theory_Guide_To_JCL" target="_top">loading
+ loggers</a> implementations. Inside an OSGi environment, the TCCL is undefined and cannot be relied upon.
+ Since managing the TCCL is almost impossible as most loggers are defined as static fields that need to
+ resolved on class loading, using a different <code class="classname">LogFactory</code> is advised. One can use
+ the <span class="emphasis"><em>org.apache.commons.logging.LogFactory</em></span> system property to specify a different
+ log factory however, the commons-logging bundle should be able to load this class.</p>
+ </li><li class="listitem">
+ <p>1.1.x</p>
+ <p>If using commons logging 1.1.x, one can turn off the tccl usage through <span class="emphasis"><em>use_tccl</em></span>
+ property, part of the <span class="emphasis"><em>commons-logging.properties</em></span> file.
+ <a class="ulink" href="http://commons.apache.org/logging/commons-logging-1.1/troubleshooting.html" target="_top">http://commons.apache.org/logging/commons-logging-1.1/troubleshooting.html</a>. Additionally,
+ 1.1.x provides several system properties (such as <span class="emphasis"><em>org.apache.commons.logging.Log.allowFlawedContext</em></span>,
+ <span class="emphasis"><em>org.apache.commons.logging.Log.allowFlawedDiscovery</em></span> and
+ <span class="emphasis"><em>org.apache.commons.logging.Log.allowFlawedHierarchy</em></span>) that can change the behavious of the discovery process.
+ See the <a class="ulink" href="http://commons.apache.org/logging/apidocs/org/apache/commons/logging/impl/LogFactoryImpl.html" target="_top">LogFactoryImpl</a>
+ javadoc for more details.</p>
+ </li></ul></div>
+
+ <p>In our tests, commons logging 1.1.x can be used with reasonable success inside OSGi. We haven't been able to find a generic
+ configuration for commons logging 1.0.x that works and that does not rely on fragile hacks dependent on the running environment.</p>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="logging-impl-choice"></a>1.13.&nbsp;Why don't you use the OSGi logging service/[insert your favourite
+ logging library in here]?</h2></div></div></div>
+
+
+ <p>It is completely up to you what logging implementation you want
+ Gemini Blueprint to use. To route log messages to the OSGi logging service,
+ just use a commons-logging API implementation that delegates to the
+ OSGi logging service, such as Pax Logging.</p>
+ </div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="osgi-wrapping"></a>1.14.&nbsp;I have to use [insert name] library/framework inside. What can I do?</h2></div></div></div>
+
+
+ <p>
+ OSGi requires JARs to contain certain <code class="literal">MANIFEST.MF</code> entries which indicate what classes are
+ required and shared by each archive. This means that <span class="emphasis"><em>tradition</em></span> jars cannot be used inside an OSGi environment.
+ To solve the problem one can:
+ </p>
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <p>Use a repository of pre-wrapped libraries such as <a class="ulink" href="http://www.eclipse.org/orbit/" target="_top">Orbit</a>,
+ <a class="ulink" href="http://felix.apache.org/site/apache-felix-commons.html" target="_top">Felix Commons</a> or Knopflerfish <a class="ulink" href="http://www.knopflerfish.org/repo/index.html" target="_top">repository</a>.
+ Gemini Blueprint uses the SpringSource Enterprise <a class="ulink" href="http://www.springsource.com/repository/app/" target="_top">Bundle Repository</a>
+ for its dependencies, which you might find useful. Additionally, for artifacts that have not yet made it into SpringSource Repository,
+ Gemini Blueprint provides a small, temporary (Amazon S3)
+ Maven repository (<a class="ulink" href="http://s3.amazonaws.com/maven.springframework.org/osgi" target="_top">link</a> |
+ <a class="ulink" href="http://s3browse.com/explore/maven.springframework.org/osgi/" target="_top">browser-friendly link</a>) for its internal usage.</p>
+ </li><li class="listitem">
+ <p>Wrap the necessary jars with proper OSGi manifest. While this can be done by hand, we strongly recommend Peter Kriens
+ excellent <a class="ulink" href="http://www.aqute.biz/Code/Bnd" target="_top">bnd</a> tool which can do this for you automatically.
+ For Maven, see Felix <a class="ulink" href="http://felix.apache.org/site/maven-bundle-plugin-bnd.html" target="_top">
+ maven-bundle-plugin</a>.
+ </p>
+ </li><li class="listitem">
+ <p>Include the jar inside your OSGi bundle and include it in the bundle classpath through <span class="emphasis"><em>Bundle-ClassPath</em></span>
+ directive. See the OSGi specification for more information.</p>
+ </li></ul></div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="jdk-crippled-jta-api"></a>1.15.&nbsp;I keep getting <span class="emphasis"><em>java.lang.NoClassDefFoundError: javax/transaction/...</em></span> when trying to do data access..</h2></div></div></div>
+
+
+ <p>
+ This problem is likely to be caused by bad class wiring. All 1.3+ JDKs include incomplete <span class="emphasis"><em>javax.transaction</em></span>
+ and <span class="emphasis"><em>javax.transaction.xa</em></span> packages for usage inside ORB environments. To address the problem, use a proper
+ JTA library which contains all the classes from the forementioned packages and exports them with a specific version to prevent
+ confusion.
+ </p>
+ <p>
+ Gemini Blueprint wraps JTA 1.1 library for OSGI environments which can be found at Spring snapshot repository. One can deploy this library
+ and specify version 1.1 for <span class="emphasis"><em>javax.transaction*</em></span> packages inside <span class="emphasis"><em>Import-Package</em></span> header.
+ By specifying the version, one can be sure that the proper package is used.
+ </p>
+ <p>
+ Note that JTA 1.1 is compatible with version 1.0.1.
+ </p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="incomplete-osgi-jar"></a>1.16.&nbsp;When doing integration testing I receive <span class="emphasis"><em>java.lang.NoClassDefFoundError: org.osgi.vendor.framework property not set</em></span>... </h2></div></div></div>
+
+
+ <p>Remove the official OSGi jars (osgi.jar or osgi-r4-core.jar) from the classpath and use only the actual OSGi platform (Equinox/Knopflerfish/Felix)
+ jars. The former provides only the public classes without an actual implementation and thus cannot be used during runtime, only during the compilation stage.
+ </p>
+ </div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="auto-export-visibility"></a>1.17.&nbsp;The autoExport option doesn't work properly!</h2></div></div></div>
+
+
+ <p>autoExport flag, part of the service exporter, will discover and
+ include for exporting only the <span class="emphasis"><em>visible</em></span> interfaces/classes implemented
+ by the service object. Consider class
+ <code class="literal">GenericApplicationContext</code> which implements among
+ others, interfaces <code class="literal">BeanFactory</code> (from
+ <code class="literal">org.springframework.beans.factory</code> package) and
+ <code class="literal">ResourceLoader</code>
+ (<code class="literal">org.springframework.core.io</code>).</p>
+
+ <p>
+ </p><div class="mediaobject" align="center"><img src="images/visibility.png" align="middle"><div class="caption">
+ <p>Class Hierarchy</p>
+ </div></div><p>
+ </p>
+
+ <p>Depending on your OSGi imports, the exporting bundle can see
+ only one of the packages, none or both. Based on these visibility
+ settings, the exporter will only export the classes that are 'known'
+ to the exporting bundle. For example, if the exporting bundle sees
+ <code class="literal">org.springframework.core.io</code> but not
+ <code class="literal">org.springframework.beans.factory</code>, the service will
+ be exported as a <code class="literal">ResourceLoader</code> but not as a
+ <code class="literal">BeanFactory</code>. In fact, exporting the object as a
+ <code class="literal">BeanFactory</code> will fail since the bundle doesn't see
+ this interface and thus doesn't know how to handle its contract.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="junit382-serialization"></a>1.18.&nbsp;When using Gemini Blueprint integration testing I get an exception about serialVersionUID. What is the problem?</h2></div></div></div>
+
+
+ <p>
+ This problem occurs on Spring DM versions up to 1.0 - consider upgrading to 1.0.1 or better. If you are stuck with 1.0 see below.
+ When running an integration test, Gemini Blueprint will duplicate the test instance and execute it inside OSGi. To avoid problems
+ like this one, make sure you are using the same libraries (with the same version) as Spring DM when running your test. This
+ particular problem for example is caused by a JUnit 3.8.2 vs 3.8.x serialization compatibility. Make sure that you are using
+ at least JUnit 3.8.2 for the execution of your tests.
+ </p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="pde-errors"></a>1.19.&nbsp;I'm using Eclipse PDE and I started getting some weird exceptions/behaviour. What's the matter?</h2></div></div></div>
+
+
+ <p>
+ Eclipse PDE uses Equinox OSGi platform underneath which (like other OSGi platforms) caches the bundles between re-runs. When
+ the cache is not properly updated, one can encounter strange behaviour (such as the new services/code being picked up)
+ or errors ranging from class versioning to linkage. Consider doing a complete clean build or, in case of Eclipse,
+ creating a new workspace or deleting the bundle folder (depends on each project settings but most users should find it at:
+ <code class="code">[workspace_dir]\.metadata\.plugins\org.eclipse.pde.core\OSGi\org.eclipse.osgi\bundles</code>).
+ </p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="upgrade-to-1.1"></a>1.20.&nbsp;I'm upgrading to Spring DM 1.1 but now I get some ClassNotFoundExceptions. What has changed?</h2></div></div></div>
+
+
+ <p>
+ In Spring DM 1.1 M2, the proxy infrastructure has been refined to avoid <span class="emphasis"><em>type leaks</em></span>, the usage of dynamic imports
+ or exposure of class loader chain delegation. If you encounter class visibility problems during the upgrade then it's likely you have
+ missing imports which were previously resolved as a side effect of Spring DM proxy weaving process.
+ </p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="proxy-equality"></a>1.21.&nbsp;I've noticed that objects imported by Gemini Blueprint are not always equal to the raw target service. Why is that?</h2></div></div></div>
+
+
+ <p>
+ To deal with dynamics, Gemini Blueprint creates proxies around the imported services. The proxies are classes (generated at runtime), different
+ from the target but able to intercept the calls made to it. Since a proxy is different then its target, comparing objects against it can
+ yield different results then when the comparison is done against the target. In most scenarios this is not a problem but there might be
+ corner cases where this contract matters. Since 1.1, Gemini Blueprint importer proxies implement <code class="interfacename">InfrastructureProxy</code>
+ interface (from Spring framework) which allow access to the raw target.
+ </p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="static-collections"></a>1.22.&nbsp;My Gemini Blueprint collection doesn't change even though the number of OSGi service changes. What's wrong?</h2></div></div></div>
+
+
+ <p>
+ Make sure the Gemini Blueprint collections are injected into object of compatible types (for example <code class="literal">list</code> into
+ <code class="interfacename">java.util.List</code> or <code class="interfacename">java.util.Collection</code>). If the types are not compatible,
+ the container will have to perform
+ <a class="ulink" href="http://static.springframework.org/spring/docs/2.5.x/reference/validation.html#beans-beans-conversion" target="_top">type conversion</a>,
+ transforming the Gemini Blueprint managed collection into a 'normal' one, unaware of the OSGi dynamics.
+ </p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="update-to-1.2"></a>1.23.&nbsp;I have upgraded to Gemini Blueprint but my custom extender/web extender configuration doesn't work anymore. What has changed?</h2></div></div></div>
+
+
+ <p>Since Spring 2.5.6, the symbolic names of the artifacts have changed slightly. Spring DM/Gemini Blueprint aligned its symbolic names as well with the
+ new patter since Spring DM 1.2.0 M2. Thus the prefix <code class="literal">org.springframework.bundle.osgi</code> has been changed to
+ <code class="literal">org.eclipse.gemini.blueprint</code>; for example Gemini BLueprint extender symbolic name was changed from
+ <code class="literal">org.springframework.bundle.osgi.extender</code> to <code class="literal">org.eclipse.gemini.blueprint.extender</code>
+ (notice the missing <code class="literal">bundle</code> word).
+ To fix this problem, change the reference to the old symbolic name (usually inside the fragments manifests or LDAP filters) to the new one.</p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="linkage-error"></a>1.24.&nbsp;I get a <code class="literal">java.lang.LinkageError: loader constraint violation</code> if I use Gemini Blueprint. Things work fine with vanilla OSGi.
+ What's wrong?</h2></div></div></div>
+
+
+ <p>Most likely the bundle imports do not identify all the transitive packages dependencies (through the <span class="emphasis"><em>uses</em></span> directive). Packages
+ imported from a bundle, can in turn, depend on other packages from other bundles - these are sometime called transitive or indirect dependencies. If
+ these are not properly identified, the OSGi platform cannot validate the wiring and allows multiple versions of the same class to be available inside the
+ same class space. This problem appears whether Gemini Blueprint is used or not. However, due to the usage of proxies inside Gemini Blueprint (which forces eager class loading
+ for the classes proxies), the class graph is evaluated at runtime causing the problem to occur early. With vanilla OSGi, the loading occurs lazy which means
+ the problem is going to occur at runtime rather then at startup.
+ To fix the problem, add the relevant transitive packages to the list of exported packages, either manually or automatically through tools such as
+ <a class="ulink" href="http://www.springsource.org/bundlor" target="_top">Bundlor</a> or <a class="ulink" href="http://www.aqute.biz/Code/Bnd" target="_top">Bnd</a>.
+ For more information on the <code class="literal">uses</code> directive please see the OSGi spec,
+ section 3.6.4 or <a class="ulink" href="http://blog.springsource.com/2008/10/20/understanding-the-osgi-uses-directive/" target="_top">this</a> SpringSource blog entry.
+ </p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="blueprint"></a>1.25.&nbsp;What can I use Gemini Blueprint with the Blueprint Container spec? What's the relationship between the two? Are the they compatible?
+ Are there any differences?</h2></div></div></div>
+
+
+ <p>Gemini Blueprint (Spring DM 2.0) is the Reference Implementation for OSGi 4.2 Blueprint Container specification. Simply deploy your Blueprint bundles in a platform
+ where Gemini Blueprint is already activated and you should be done. For more information about Blueprint and Gemini Blueprint, please see the
+ <span class="emphasis"><em>Blueprint Container</em></span> chapter in the reference documentation.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="kf-2.3-boot-delegation"></a>1.26.&nbsp;I'm using Knopflerfish 2.3.x and I have a lot of visibility exception. How can I fix this?</h2></div></div></div>
+
+
+ <p>Since 2.3.0, Knopflerfish changed the way it does bootpath delegation which causes classes to be loaded from inside and outside OSGi. Set
+ the system property <code class="literal">org.knopflerfish.framework.strictbootclassloading</code> to <code class="literal">true</code> before starting up the Knopflerfish
+ platform to prevent this from happening. See Knopflerfish 2.3.x release <a class="ulink" href="http://www.knopflerfish.org/release_notes_2.3.html" target="_top">notes</a> for more
+ information.</p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="pde-cycles"></a>1.27.&nbsp;I'm using Gemini Blueprint and Spring jars inside Eclipse PDE but I get an error about cycle dependency errors. What's wrong?</h2></div></div></div>
+
+
+ <p>Some of the Spring jars (optionally) import each other packages for bootstrapping reasons. While cycles between jars are allowed and
+ supported by the OSGi platform, by default, Eclipse PDE complains about them. Since Eclipse Galileo, it is possible to enable binary cycles
+ in a target platform. allowing the build to compile. For more information, see
+ <a class="ulink" href="http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.pde.doc.user/guide/tools/export_wizards/export_plugins.htm" target="_top">this</a>
+ entry from the Eclipse Reference Guide.</p>
+ </div>
+ </div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="faq.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="faq.html">Home</a></td><td width="40%" align="right">&nbsp;</td></tr><tr><td width="40%" align="left" valign="top">Eclipse Gemini Blueprint&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/testing.html b/documentation/reference/3.0.0.M01/html/testing.html
new file mode 100644
index 0000000..23e7f8b
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/testing.html
@@ -0,0 +1,460 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Chapter&nbsp;12.&nbsp;Testing OSGi based Applications</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="reference.html" title="Part&nbsp;II.&nbsp;Reference Documentation"><link rel="prev" href="compendium.html" title="Chapter&nbsp;11.&nbsp;Compendium Services"><link rel="next" href="resources.html" title="Part&nbsp;III.&nbsp;Other Resources"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="testing"></a>Chapter&nbsp;12.&nbsp;Testing OSGi based Applications</h2></div></div></div>
+
+
+ <p>By following best practices and using the Gemini Blueprint
+ support, your bean classes should be easy to unit test as they will have
+ no hard dependencies on OSGi, and the few OSGi APIs that you may interact
+ with (such as <code class="interfacename">BundleContext</code>) are interface-based
+ and easy to mock. Whether you want to do unit testing or <a class="ulink" href="http://en.wikipedia.org/wiki/Integration_testing" target="_top">
+ integration</a> testing, Spring DM can ease your task.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="testing:mocks"></a>12.1.&nbsp;OSGi Mocks</h2></div></div></div>
+
+
+
+ <div class="sidebar"><div class="titlepage"><div><div><p class="title"><b>Mocks vs Stubs</b></p></div></div></div>
+
+ <p>There are various strategies to unit test code
+ that requires collaborators. The two most popular strategies
+ are <span class="emphasis"><em>stubs</em></span> and <span class="emphasis"><em>mocks</em></span>.
+ </p><p>
+ See <a class="ulink" href="http://martinfowler.com/articles/mocksArentStubs.html" target="_top">
+ this</a> article by Martin Fowler which describes in detail the difference
+ between them.</p>
+ </div>
+
+ <p>
+ Even though most OSGi API are interfaces and creating mocks using a specialized
+ library like <a class="ulink" href="http://www.easymock.org/" target="_top">EasyMock</a> is fairly
+ simple, in practice the amount of code of setting the code (especially on JDK 1.4)
+ becomes cumbersome. To keep the tests short and concise, Gemini Blueprint/Spring DM provides OSGi
+ mocks under <code class="literal">org.eclipse.gemini.blueprint.mock</code> package.</p>
+
+ <p>It's up to you to decide whether they are useful or not however, we make extensive
+ use of them inside Gemini Blueprint/Spring DM test suite. Below you can find a code snippet that you
+ are likely to encounter in our code base:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">private</strong> ServiceReference reference;
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">private</strong> BundleContext bundleContext;
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">private</strong> Object service;
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">protected</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> setUp() <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">throws</strong> Exception {
+ reference = <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">new</strong> MockServiceReference();
+ bundleContext = <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">new</strong> MockBundleContext() {
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> ServiceReference getServiceReference(String clazz) {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">return</strong> reference;
+ }
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> ServiceReference[] getServiceReferences(String clazz, String filter)
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">throws</strong> InvalidSyntaxException {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">return</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">new</strong> ServiceReference[] { reference };
+ }
+
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> Object getService(ServiceReference ref) {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">if</strong> (reference == ref)
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">return</strong> service;
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">super</strong>.getService(ref);
+ }
+ };
+
+ ...
+}
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> testComponent() <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">throws</strong> Exception {
+ OsgiComponent comp = <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">new</strong> OsgiComponent(bundleContext);
+
+ assertSame(reference, comp.getReference());
+ assertSame(object, comp.getTarget());
+}</pre>
+
+ <p>As ending words, experiment with them and choose whatever style or library you feel most confortable with.
+ In our test suite we use the aforementioned mocks, EasyMock library and plenty of integration testing (see below).</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="testing:integration"></a>12.2.&nbsp;Integration Testing</h2></div></div></div>
+
+
+ <div class="sidebar"><div class="titlepage"><div><div><p class="title"><b>What about JUnit4/TestNG?</b></p></div></div></div>
+
+
+ <p>While JUnit4/TestNG overcome the class inheritance
+ problem that appears when building base JUnit classes, by decoupling
+ the runner from the test through annotations, Gemini Blueprint/Spring DM cannot use
+ them since it has to support Java 1.4.</p>
+ <p>However, it is planned for the future to provide an optional,
+ JVM 5-based testing extension to integrate the existing testing framework
+ with the aforementioned libraries.
+ </p>
+ </div>
+
+ <p>In a restricted environment such as OSGi, it's important to test the visibility and versioning of your classes,
+ the manifests or how your bundles interact with each other (just to name a few).</p>
+
+ <p> To ease integration testing, the Gemini Blueprint project provides a test class hierarchy
+ (based on <code class="classname">org.eclipse.gemini.blueprint.test.AbstractOsgiTests</code>) that
+ provides support for writing regular <code class="literal">JUnit</code> test cases that are then
+ automatically executed in an OSGi environment.</p>
+
+ <p>In general, the scenario supported by Gemini Blueprint/Spring DM testing framework is:</p>
+
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <p>start the OSGi framework (Equinox, Knopflerfish, Felix)</p>
+ </li><li class="listitem">
+ <p>install and start any specified bundles required for the
+ test</p>
+ </li><li class="listitem">
+ <p>package the test case itself into a <code class="literal">on the fly</code> bundle,
+ generate the manifest (if none is provided) and install it in the OSGi
+ framework</p>
+ </li><li class="listitem">
+ <p>execute the test case inside the OSGi framework</p>
+ </li><li class="listitem">
+ <p>shut down the framework</p>
+ </li><li class="listitem">
+ <p>passes the test results back to the originating test case
+ instance that is running outside of OSGi</p>
+ </li></ul></div>
+ <div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="images/admons/warning.png"></td><th align="left">Warning</th></tr><tr><td align="left" valign="top">The testing framework is aimed at running OSGi integration tests from a non-OSGi environment (like Ant/Maven/IDE). The testing framework
+ is NOT meant to be used as an OSGi bundle (nor will it work for that matter). In practice this means that the testing bundle should be separate from the bundle(s) it
+ tests (similar to unit testing, where tests are separate from the classes they test).</td></tr></table></div>
+
+ <p>By following this sequence it is trivial to write JUnit-based
+ integration tests for OSGi and have them integration into any environment
+ (IDE, build (ant, maven), etc.) that can work with JUnit.</p>
+
+ <p>The rest of this chapter details (with examples) the features
+ offered by Gemini Blueprint/Spring DM testing suite.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="testing:integration:simple-test"></a>12.2.1.&nbsp;Creating A Simple OSGi Integration Test</h3></div></div></div>
+
+
+ <p>
+ While the testing framework contains several classes that offer specific
+ features, it is most likely that your test cases will extend
+ <code class="classname">org.eclipse.gemini.blueprint.test.AbstractConfigurableBundleCreatorTests</code> (at least
+ this is what we use in practice).
+ </p>
+ <p>Let's extend this class and interact with the OSGi platform through
+ the <code class="literal">bundleContext</code> field:</p>
+
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">class</strong> SimpleOsgiTest <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">extends</strong> AbstractConfigurableBundleCreatorTests {
+
+<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> testOsgiPlatformStarts() <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">throws</strong> Exception {
+ System.out.println(bundleContext.getProperty(Constants.FRAMEWORK_VENDOR));
+ System.out.println(bundleContext.getProperty(Constants.FRAMEWORK_VERSION));
+ System.out.println(bundleContext.getProperty(Constants.FRAMEWORK_EXECUTIONENVIRONMENT));
+ }
+}</pre>
+
+ <p>Simply execute the test as you normally do with any JUnit test. On Equinox 3.2.x,
+ the output is similar to:</p>
+
+ <pre class="programlisting">Eclipse
+1.3.0
+OSGi/Minimum-1.0,OSGi/Minimum-1.1,JRE-1.1,J2SE-1.2,J2SE-1.3,J2SE-1.4}</pre>
+
+ <p class="remark"><em><span class="remark">It is likely that you will see different log statements made by the testing
+ framework during your own test execution, but these can be disabled as they only have an informative
+ value and do not affect the actual execution.</span></em></p>
+
+ <p>Note that you did not have to create any bundle, write any MANIFEST or
+ bother with imports or exports, let alone starting and shutting down the OSGi
+ platform. The testing framework takes care of these automatically
+ when the test is executed.</p>
+
+ <p>Let's do some quering and figure out what the environment in which the tests run is.
+ A simple way to do that is to query the <code class="interfacename">BundleContext</code>
+ for the installed bundles:</p>
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> testOsgiEnvironment() <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">throws</strong> Exception {
+ Bundle[] bundles = bundleContext.getBundles();
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">for</strong> (<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">int</strong> i = <span xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-number">0</span>; i &lt; bundles.length; i++) {
+ System.out.print(OsgiStringUtils.nullSafeName(bundles[i]));
+ System.out.print(<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>", "</em></strong>);
+ }
+ System.out.println();
+}</pre>
+ <p>The output should be similar to:</p>
+ <pre class="programlisting">OSGi System Bundle, ObjectWeb ASM, log4j.osgi, spring-test, spring-osgi-test, spring-osgi-core,
+ spring-aop, spring-osgi-io, slf4j-api,
+spring-osgi-extender, etc... TestBundle-testOsgiPlatformStarts-com.your.package.SimpleOsgiTest,
+</pre>
+
+ <p>As you can see, the testing framework installs the mandatory requirements required for running the
+ test such as the Spring, Gemini Blueprint/Spring DM, slf4j jars among others.</p>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="testing:integration:provisioning"></a>12.2.2.&nbsp;Installing Test Prerequisites</h3></div></div></div>
+
+
+ <div class="sidebar"><div class="titlepage"><div><div><p class="title"><b>OSGi-friendly libraries</b></p></div></div></div>
+
+ <p>To work in OSGi environments, jars need to declare in their
+ <code class="literal">MANIFEST.MF</code>, Export or Import packages; that is
+ declare what classes they need or offer to other bundles.
+ Most libraries are OSGi unaware and do not provide the proper manifest
+ entries which means they are unusable in an OSGi environment.</p>
+ <p>At the moment, there are several initiatives in the open source space
+ to provide the proper manifest - please see the FAQ for more information.
+ </p>
+ </div>
+
+ <p>Besides the Gemini Blueprint/Spring DM jars and the test itself is highly likely that you depend on
+ several libraries or your own code for the integration test.</p>
+
+ <p>Consider the following test that relies on Apache Commons
+ <a class="ulink" href="http://commons.apache.org/lang/" target="_top">Lang</a>:</p>
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">import</strong> org.apache.commons.lang.time.DateFormatUtils;
+ ...
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">public</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">void</strong> testCommonsLangDateFormat() <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">throws</strong> Exception {
+ System.out.println(DateFormatUtils.format(<strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">new</strong> Date(), <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"HH:mm:ssZZ"</em></strong>));
+ }
+}</pre>
+
+ <p>Running the test however yields an exception:</p>
+ <pre class="programlisting">java.lang.IllegalStateException: Unable to dynamically start generated unit test bundle
+ ...
+Caused by: org.osgi.framework.BundleException: The bundle could not be resolved.
+Reason: Missing Constraint: Import-Package: org.apache.commons.lang.time; version="0.0.0"
+ ...
+ ... 15 more
+ </pre>
+
+ <p>The test requires <code class="literal">org.apache.commons.lang.time</code> package but there is no bundle
+ that exports it. Let's fix this by installing a commons-lang bundle (make sure you use at least version 2.4
+ which adds the proper OSGi entries to the jar manifest).</p>
+
+ <p>One can specify the bundles that she wants
+ to be installed using <code class="literal">getTestBundlesNames</code> or <code class="literal">getTestBundles
+ </code> method. The first one returns an array of String that indicate the bundle
+ name, package and versioning through as a String while the latter returns an array of
+ <code class="literal">Resource</code>s that can be used directly for installing the bundles.
+ That is, use <code class="literal">getTestBundlesNames</code> when you rely on somebody else to locate
+ (the most common case) the bundles and <code class="literal">getTestBundles</code> when you want to
+ locate the bundles yourself.
+ </p>
+
+ <p>By default, the test suite performs a lookup for artifacts, similar to the one used by
+ <a class="ulink" href="http://maven.apache.org" target="_top">Maven2</a>, searching first the items as being relative to the
+ current project and then falling back to the local repository.
+ The locator expects the bundle String to be a comma separated values containing the artifact group, name, version and (optionally) type.
+
+ It's likely that in the future, various other locators will be available. One can plug in their own
+ locator through the <code class="interfacename">org.eclipse.gemini.blueprint.test.provisioning.ArtifactLocator</code> interface.
+ </p>
+
+ <p>Let's fix our integration test by installing the required bundle (and some extra osgi libraries):</p>
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">protected</strong> String[] getTestBundlesNames() {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">return</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">new</strong> String[] {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"javax.transaction, com.springsource.javax.transaction, 1.1.0"</em></strong>,
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"commons-lang, commons-lang, 2.4"</em></strong> };
+ };
+}</pre>
+
+ <p>Rerunning the test should show that these bundles are now installed in the OSGi platform.</p>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">The artifacts mentioned above have to exist in your local maven repository.</td></tr></table></div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="testing:integration:advanced-topics"></a>12.2.3.&nbsp;Advanced Testing Framework Topics</h3></div></div></div>
+
+
+ <p>The testing framework allows a lot of customization to be made. This chapter
+ details some of the existing hooks that you might want to know about. However, these
+ are advanced topics as they increase the complexity of your test infrastructure.
+ </p>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="testing:integration:customize-manifest"></a>12.2.3.1.&nbsp;Customizing The Test Manifest</h4></div></div></div>
+
+ <p>There are cases where the auto-generated test manifest does not suit the needs of the test.
+ For example the manifest requires some different headers or a certain package needs to be an optional import.</p>
+ <p>
+ For simple cases, one can work directly with the generated manifest - in the example below, the bundle class path
+ is being specified:
+ </p>
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">protected</strong> Manifest getManifest() {
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">// let the testing framework create/load the manifest</em>
+ Manifest mf = <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">super</strong>.getManifest();
+ <em xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-comment">// add Bundle-Classpath:</em>
+ mf.getMainAttributes().putValue(Constants.BUNDLE_CLASSPATH, <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>".,bundleclasspath/simple.jar"</em></strong>);
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">return</strong> mf;
+}</pre>
+
+ <p>
+ Another alternative is to provide your own manifest by overriding <code class="literal">getManifestLocations()</code>:</p>
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">protected</strong> String getManifestLocation() {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">return</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"classpath:com/xyz/abc/test/MyTestTest.MF"</em></strong>;
+}</pre>
+
+ <p>However each manifest needs the following entry:</p>
+ <span class="quote">&#8220;<span class="quote">Bundle-Activator: org.eclipse.gemini.blueprint.test.JUnitTestActivator</span>&#8221;</span>
+ <p>since without it, the testing infrastructure cannot function properly. Also, one needs to
+ import JUnit, Spring and Gemini Blueprint/Spring DM specific packages used by the base test suite:</p>
+ <pre class="programlisting">Import-Package: junit.framework,
+ org.osgi.framework,
+ org.apache.commons.logging,
+ org.springframework.util,
+ org.eclipse.gemini.blueprint.service,
+ org.eclipse.gemini.blueprint.util,
+ org.eclipse.gemini.blueprint.test,
+ org.springframework.context</pre>
+
+ <p>Failing to import a package used by the test class will cause the test to fail with a
+ <code class="literal">NoDefClassFoundError</code> error.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="testing:integration:specify-test-jar-content"></a>12.2.3.2.&nbsp;Customizing Test Bundle Content</h4></div></div></div>
+
+
+ <p>By default, for the on-the-fly bundle, the testing infrastructure uses all the classes, xml and properties files
+ found under <code class="literal">./target/test-classes</code> folder. This matches the project layout for maven which is used
+ (at the moment by Gemini Blueprint/Spring DM). These settings can be configured in two ways:</p>
+
+ <div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>programmatically by overriding <code class="classname">AbstractConfigurableBundleCreatorTests</code> <code class="literal">getXXX</code>
+ methods.</p>
+ </li><li class="listitem"><p>declaratively by creating a properties file having a similar name with the test case. For example, test
+ <code class="literal">com.xyz.MyTest</code> will have the properties file named <code class="literal">com/xyz/MyTest-bundle.properties</code>.
+ If found, the following properties will be read from the file:</p>
+
+ <div class="table"><a name="integration-test-jar-setting-file"></a><p class="title"><b>Table&nbsp;12.1.&nbsp;Default test jar content settings</b></p><div class="table-contents">
+
+ <table class="table" summary="Default test jar content settings" width="100%" border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Property Name</th><th>Default Value</th><th>Description</th></tr></thead><tbody><tr><td>root.dir</td><td><code class="literal">file:./target/test-classes</code></td><td>the root folder considered as the jar root</td></tr><tr><td>include.patterns</td><td><code class="literal">/**/*.class,/**/*.xml,/**/*.properties</code></td><td>Comma-separated string of Ant-style patterns</td></tr><tr><td>manifest</td><td>(empty)</td><td>manifest location given as a String. By default it's empty meaning the manifest
+ will be created by the test framework rather then being supplied by the user.</td></tr></tbody></table>
+ </div></div><br class="table-break">
+
+ <p>This option is handy when creating specific tests that need to include certain resources (such as localization files
+ or images).</p>
+ </li></ol></div>
+
+ <p>Please consult <code class="classname">AbstractConfigurableBundleCreatorTests</code> and
+ <code class="classname">AbstractOnTheFlyBundleCreatorTests</code> tests for more customization hooks.
+ </p>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="testing:integration:understanding-manifest-creator"></a>12.2.3.3.&nbsp;Understanding The <code class="code">MANIFEST.MF</code> Generation</h4></div></div></div>
+
+
+ <p>A useful feature of the testing framework represents the automatic creation of the test manifest based on the test bundle content. The manifest
+ creator component uses byte-code analysis to determine the packages imported by the test classes so that it can generate the proper OSGi directives for them.
+ Since the generated bundle is used for running a test, the creator will use the following assumptions:</p>
+
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>No packages will be exported.</p> <p>The <span class="emphasis"><em>on-the-fly</em></span> bundle is used for running a test which
+ (usually) consumes OSGi packages for its execution. This behaviour can be changed by <a class="link" href="testing.html#testing:integration:customize-manifest" title="12.2.3.1.&nbsp;Customizing The Test Manifest">customizing</a>
+ the manifest.</p>
+ </li><li class="listitem"><p>Split packages (i.e. classes from the same package can come from different bundles) are not supported.</p>
+
+ <p>
+ This means that packages present in the test framework are considered complete and no <code class="code">Import-Package</code> entry will be generated for them.
+ To avoid this problem, consider using sub-packages or moving the classes inside one bundle. Note that split packages are discouraged due to the
+ issues associated with them (see the OSGi Core spec, Chapter 3.13 - Required Bundles).</p>
+ </li><li class="listitem">
+ <p>The test bundle contains only test classes.</p>
+ <p>The byte-code parser will look only at the test classes hierarchy. Any other class included in the bundle, will not be considered so no imports
+ will be generated for it. To change the default behaviour, override <code class="methodname">createManifestOnlyFromTestClass</code> to return
+ <code class="literal">false</code>:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">protected</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">boolean</strong> createManifestOnlyFromTestClass() {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">return</strong> false;
+}</pre>
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">The time required to generate the manifest might increase depending on the number and size of classes in the bundle.</td></tr></table></div>
+
+ <p>
+ Additionally consider customizing the manifest yourself or attaching the extra code as inner classes to the test class (so it gets parsed automatically).</p>
+ </li></ul></div>
+
+ <p>
+ The reason behind <span class="emphasis"><em>the lack of such features</em></span> is the byte-code parser is aimed to be simple and fast at creating test manifests -
+ it is not meant as a general-purpose tool for creating OSGi artifacts.
+ </p>
+ </div>
+
+
+ </div>
+
+
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="testing:integration:appContext"></a>12.2.4.&nbsp;Creating An OSGi Application Context</h3></div></div></div>
+
+
+ <p>Gemini Blueprint/Spring DM testing suite builds on top of Spring testing classes. To create an application context
+ (OSGi specific), one should just override <code class="literal">getConfigLocations[]</code> method and indicate
+ the location of the application context configuration. At runtime, an OSGi application context will be created
+ and cached for the lifetime of the test case.</p>
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">protected</strong> String[] getConfigLocations() {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">return</strong> <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">new</strong> String[] { <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-string"><em>"/com/xyz/abc/test/MyTestContext.xml"</em></strong> };
+}</pre>
+
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="testing:integration:specify-platform"></a>12.2.5.&nbsp;Specifying The OSGi Platform To Use</h3></div></div></div>
+
+
+ <p>The testing framework supports out of the box, three OSGi 4.0 implementations namely:
+ Equinox, Knopflerfish and Felix. To be used, these should be in the test classpath. By default,
+ the testing framework will try to use Equinox platform. This can be configured in several ways:</p>
+
+ <div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>programmatically through <code class="literal">getPlatformName()</code> method</p>.
+ <p>Override the aforementioned method and indicate the fully qualified name of
+ the <code class="interfacename">Platform</code> interface implementation. Users can use the <code class="classname">Platforms</code>
+ class to specify one of the supported platforms:</p>
+
+ <pre class="programlisting"><strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">protected</strong> String getPlatformName() {
+ <strong xmlns:saxon6="http://icl.com/saxon" xmlns:saxonb="http://saxon.sf.net/" xmlns:xalan="http://xml.apache.org/xalan" class="hl-keyword">return</strong> Platforms.FELIX;
+}</pre>
+
+ </li><li class="listitem"><p>declaratively
+ through <code class="literal">org.eclipse.gemini.blueprint.test.framework</code> system property.</p>
+ <p>If this property is set,
+ the testing framework will use its value as a fully qualified name of a Platform implementation.
+ It that fails, it will fall back to Equinox after logging a warning message.
+ This option is useful for building tools (such as ant or maven) since it indicates a certain
+ target environment without changing and test code.</p>
+
+ </li></ol></div>
+ </div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="testing:integration:specify-test-wait-time"></a>12.2.6.&nbsp;Waiting For The Test Dependencies</h3></div></div></div>
+
+
+ <p>A built-in feature of the testing framework is the ability to wait until all dependencies are deployed before
+ starting the test execution. Since the OSGi platforms are concurrent by nature, installing a bundle doesn't mean that
+ all its services are running. By running a test before its dependency services are fully initialized can cause sporadic
+ errors that pollute the test results. By default, the testing framework inspects all bundles installed by the user and,
+ if they are Spring-powered bundles, waits until they are fully started (that is their application context is published
+ as an OSGi service). This behaviour can be disabled by overriding <code class="literal">shouldWaitForSpringBundlesContextCreation</code>
+ method. Consult <code class="classname">AbstractSynchronizedOsgiTests</code> for more details.</p>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="testing:integration:performance"></a>12.2.7.&nbsp;Testing Framework Performance</h3></div></div></div>
+
+
+ <p>Considering all the functionality offered by the testing framework, one might wonder if this doesn't become a
+ performance bottleneck. First, it's worth noting that all the work done automatically by the testing infrastructure
+ has to be done anyway (such as creating the manifest or creating a bundle for the test or installing the bundles).
+ Doing it manually simply does not work as it's too error prone and time consuming.
+ In fact, the current infrastructure started as way to do efficient, automatic testing without worrying
+ about deployment problems and redundancy.</p>
+ <p>As for the numbers, the current infrastructure has been used internally for the last half a year - our integration tests
+ (around 120) run in about 3:30 minutes on a laptop. Most of this time is spent on starting and stopping the OSGi platform: the "testing
+ framework" takes around 10% (as shown in our profiling so far).
+ For example, the manifest generation has proved to take less then 0.5 seconds in general, while the jar creation around 1
+ second.</p>
+ <p>However, we are working on making it even faster and smarter so that less configuration options are needed and
+ the contextual information available in your tests is used as much as possible. If you have any ideas or suggestion,
+ feel free to use our issue tracker or/and forum.
+ </p>
+ </div>
+
+ <p>Hopefully this chapter showed how Gemini Blueprint/Spring DM testing infrastructure can simplify OSGi integration testing and
+ how it can be customized. Consider consulting the javadocs for more information.
+ </p>
+ </div>
+
+</div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="compendium.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="resources.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;11.&nbsp;Compendium Services&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;Part&nbsp;III.&nbsp;Other Resources</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/what-is-new.html b/documentation/reference/3.0.0.M01/html/what-is-new.html
new file mode 100644
index 0000000..ad721d9
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/what-is-new.html
@@ -0,0 +1,122 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Chapter&nbsp;5.&nbsp;What is new?</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="introduction.html" title="Part&nbsp;I.&nbsp;Introduction"><link rel="prev" href="get-started.html" title="Chapter&nbsp;4.&nbsp;Getting Started"><link rel="next" href="reference.html" title="Part&nbsp;II.&nbsp;Reference Documentation"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="what-is-new"></a>Chapter&nbsp;5.&nbsp;What is new?</h2></div></div></div>
+
+
+ <p>While a relatively young project, each version of Gemini Blueprint (even minor ones) offers new functionality. This chapter is a guide to the new
+ and improved feature and intended as a high-level, short summary. Please follow the appropriate links for more in-depth information.</p>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="gemini-blueprint-3.0.0.M01"></a>5.1.&nbsp;Gemini Blueprint 3.0.x</h2></div></div></div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-3.0.x:spring-5.x"></a>5.1.1.&nbsp;Spring 5.x</h3></div></div></div>
+
+ <p>Gemini Blueprint 3.0.x runs with Spring 5.x Upgrades to Spring 5.</p>
+ </div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="gemini-blueprint-2.1.0"></a>5.2.&nbsp;Gemini Blueprint 2.1.0+</h2></div></div></div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-2.1.0.x:jdk8"></a>5.2.1.&nbsp;Java 8</h3></div></div></div>
+
+ <p>Gemini Blueprint requires <a class="ulink" href="https://java.sun.com/j2se/1.8.0/" target="_top">JDK 7</a> to run (or compile). The framework code has been
+ revised to take advantage of the JDK 8 features.</p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-2.1.x:spring-4.3.x"></a>5.2.2.&nbsp;Spring 4.3.x</h3></div></div></div>
+
+ <p>Besides the Java 8 upgrade, Gemini Blueprint requires Spring 4.3.x to get access to the latest framework features and JDK optimizations.</p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-2.1.x:gemini-blueprint-extensions"></a>5.2.3.&nbsp;Gemini Blueprint Extensions</h3></div></div></div>
+
+ <p>With 2.1, gemini blueprint ships the gemini-blueprint-extensions bundle, supporting the @ServiceReference
+ annotation on fields and setter methods to inject service references without using a service import in the blueprint context's XML declaration.
+ See <a class="xref" href="service-registry.html#service-registry:annotations-vs-xml-declarations" title="9.2.1.&nbsp;Referencing services via the @ServiceReference annotation">Section&nbsp;9.2.1, &#8220;Referencing services via the @ServiceReference annotation&#8221;</a> for more information.</p>
+ </div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="gemini-blueprint-2.0.0"></a>5.3.&nbsp;Gemini Blueprint 2.0.0+</h2></div></div></div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-2.0.0.x:blueprint"></a>5.3.1.&nbsp;OSGi 5.x Blueprint Reference Implementation (RI)</h3></div></div></div>
+
+ <p>Gemini Blueprint served as the basis for the Blueprint Container specification, introduced by OSGi 5 Gemini Blueprint stands as the RI for the
+ aforementioned specification, providing the Blueprint API and implementation out of the box. Various aspect of Gemini Blueprint have been adjusted for
+ consistency to the Blueprint specification. For more information on the two models, see <a class="xref" href="blueprint.html" title="Chapter&nbsp;6.&nbsp;OSGi 4.2 Blueprint Container">Chapter&nbsp;6, <i>OSGi 4.2 Blueprint Container</i></a> for more information.</p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-2.0.0.x:jdk5"></a>5.3.2.&nbsp;Java 7</h3></div></div></div>
+
+ <p>Gemini Blueprint requires <a class="ulink" href="https://java.sun.com/j2se/1.7.0/" target="_top">JDK 7</a> to run (or compile). The framework code has been
+ revised to take advantage of the JDK 7 features.</p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-2.0.x:spring-4.2.x"></a>5.3.3.&nbsp;Spring 4.2.x</h3></div></div></div>
+
+ <p>Besides the Java 7 upgrade, Gemini Blueprint requires Spring 4.2.x to get access to the latest framework features and JDK optimizations.</p>
+ </div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="gemini-blueprint-2.0.x"></a>5.4.&nbsp;Gemini Blueprint 1.x</h2></div></div></div>
+
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-2.0.x:blueprint"></a>5.4.1.&nbsp;OSGi 4.2 Blueprint Reference Implementation (RI)</h3></div></div></div>
+
+ <p>Gemini Blueprint served as the basis for the Blueprint Container specification, introduced by OSGi 4.2. Gemini Blueprint stands as the RI for the
+ aforementioned specification, providing the Blueprint API and implementation out of the box. Various aspect of Gemini Blueprint have been adjusted for
+ consistency to the Blueprint specification. For more information on the two models, see <a class="xref" href="blueprint.html" title="Chapter&nbsp;6.&nbsp;OSGi 4.2 Blueprint Container">Chapter&nbsp;6, <i>OSGi 4.2 Blueprint Container</i></a> for more information.</p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-2.0.x:jdk5"></a>5.4.2.&nbsp;Java 5</h3></div></div></div>
+
+ <p>Gemini Blueprint requires <a class="ulink" href="http://java.sun.com/j2se/1.5.0/" target="_top">JDK 5</a> to run (or compile). The framework code has been
+ revised to take advantage of the JDK 5 features such as language improvements, concurrency and generics: for example, various enum-like classes
+ used by the exporter and importer API have been deprecated and replaced with proper Java 5<code class="classname">enum</code>s.
+ Considerable effort has been spent to keep the code backwards compatible however, it is recommended to compile the code against the Gemini Blueprint 2.x
+ code and perform sanity checks before upgrading.</p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-2.0.x:spring-3.x"></a>5.4.3.&nbsp;Spring 3.x</h3></div></div></div>
+
+ <p>Besides the Java 5 upgrade, Gemini Blueprint requires Spring 3.x to get access to the latest framework features and JDK optimizations.</p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-2.0.x:imports"></a>5.4.4.&nbsp;Service Importer Improvements</h3></div></div></div>
+
+ <p>Gemini Blueprint provides several improvements for service imports (whether single or collection based) in terms of speed, configuration and
+ service lifecycle. <a class="xref" href="service-registry.html#service-registry:refs" title="9.2.&nbsp;Defining References To OSGi Services">Section&nbsp;9.2, &#8220;Defining References To OSGi Services&#8221;</a> provides more details. </p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-2.0.x:security"></a>5.4.5.&nbsp;Java 2 Security Integration</h3></div></div></div>
+
+ <p>Continuing the work in Spring DM 1.2.x, Gemini Blueprint executes all user code using its credentials (the managed bundle permissions).
+ See <a class="xref" href="appendix-security.html" title="Appendix&nbsp;A.&nbsp;Security Integration">Appendix&nbsp;A, <i>Security Integration</i></a> for more information.</p>
+ </div>
+ </div>
+
+ <div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="gemini-blueprint-1.2.x"></a>5.5.&nbsp;Spring DM 1.2.x</h2></div></div></div>
+
+
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/admons/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">This section includes the updates from Spring Dynamic Modules (Spring DM) project and previous gemini blueprint versions.</td></tr></table></div>
+
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-1.2.x:security"></a>5.5.1.&nbsp;Java 2 Security Integration</h3></div></div></div>
+
+ <p>Since 1.2.x, Spring DM is aware of <a class="ulink" href="http://java.sun.com/javase/technologies/security/#overview" target="_top">secured</a>
+ environments by making use of dedicated <a class="ulink" href="http://java.sun.com/j2se/1.4.2/docs/guide/security/doprivileged.html" target="_top">privileged blocks</a>
+ for executing security sensitive code. Thus, Spring DM can run as a <span class="emphasis"><em>trusted</em></span> library without requiring escalated
+ permissions for its managed bundles. See <a class="xref" href="appendix-security.html" title="Appendix&nbsp;A.&nbsp;Security Integration">Appendix&nbsp;A, <i>Security Integration</i></a> for more information.</p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-1.2.x:compendium"></a>5.5.2.&nbsp;Compendium Services Support</h3></div></div></div>
+
+ <p>1.2.x provides integration with the <a class="ulink" href="http://www.osgi.org/javadoc/r4v401/org/osgi/service/cm/package-summary.html" target="_top">Configuration Admin</a>,
+ part of the OSGi compendium services. <a class="xref" href="compendium.html" title="Chapter&nbsp;11.&nbsp;Compendium Services">Chapter&nbsp;11, <i>Compendium Services</i></a> provides more details on the topic.</p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-1.2.x:sym-name-change"></a>5.5.3.&nbsp;Changed Spring DM Symbolic Names</h3></div></div></div>
+
+ <p>Since 1.2.0 M2, the Spring DM bundles symbolic names have been aligned with Spring's 2.5.6+. Thus the prefix
+ <code class="literal">org.springframework.bundle.osgi</code> has been changed to <code class="literal">org.eclipse.gemini.blueprint</code>; for example
+ Spring DM extender symbolic name was changed from <code class="literal">org.springframework.bundle.osgi.extender</code> to <code class="literal">org.eclipse.gemini.blueprint.extender</code>
+ (notice the missing <code class="literal">bundle</code> word). Additionally, the documentation has been updated to reflect Spring 2.5.6+ symbolic names.</p>
+ </div>
+ <div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="gemini-blueprint-1.2.x:ebr-usage"></a>5.5.4.&nbsp;Usage of SpringSource Enterprise Bundle Repository (EBR)</h3></div></div></div>
+
+ <p>To minimize the number of repositories used and the confusion caused by OSGified vs non-OSGified artifacts especially to users using SpringSource dm Server,
+ after 1.2.0 RC1, Spring DM aligned as many of its dependencies as possible with SpringSource <a class="ulink" href="http://www.springsource.com/repository" target="_top">EBR</a>.
+ In practice this means that Spring framework artifacts, such as <code class="literal">spring-aop.jar</code> can be now found as <code class="literal">org.springframework.aop.jar</code>;
+ We apologize for any inconvenience created to users relying on these naming conventions.</p>
+ </div>
+ </div>
+ </div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="get-started.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="reference.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;4.&nbsp;Getting Started&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;Part&nbsp;II.&nbsp;Reference Documentation</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/documentation/reference/3.0.0.M01/html/why-Spring DM.html b/documentation/reference/3.0.0.M01/html/why-Spring DM.html
new file mode 100644
index 0000000..3f1c8e5
--- /dev/null
+++ b/documentation/reference/3.0.0.M01/html/why-Spring DM.html
@@ -0,0 +1,49 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Chapter&nbsp;2.&nbsp;Why Gemini Blueprint?</title><link rel="stylesheet" type="text/css" href="css/html.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="introduction.html" title="Part&nbsp;I.&nbsp;Introduction"><link rel="prev" href="eclipse-migration.html" title="Chapter&nbsp;1.&nbsp;Spring Dynamic Modules becomes Eclipse Gemini Blueprint"><link rel="next" href="requirements.html" title="Chapter&nbsp;3.&nbsp;Requirements"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="why-Spring DM"></a>Chapter&nbsp;2.&nbsp;Why Gemini Blueprint?</h2></div></div></div>
+
+
+ <p>The Spring Framework is the leading full-stack Java/JEE
+ application framework. It provides a lightweight container and a
+ non-invasive programming model enabled by the use of dependency
+ injection, AOP, and portable service abstractions. The OSGi Service
+ Platform offers a dynamic application execution environment in which
+ modules (bundles) can be installed, updated, or removed on the fly. It
+ also has excellent support for modularity and versioning.</p>
+
+ <p>Gemini Blueprint makes it easy to write Spring applications
+ that can be deployed in an OSGi execution environment, and that can take
+ advantage of the services offered by the OSGi framework. Gemini Blueprint
+ support also makes development of OSGi applications simpler and more
+ productive by building on the ease-of-use and power of the Spring
+ Framework. For enterprise applications, the combination of Eclipse Gemini Blueprint
+ and the OSGi platform provides:</p>
+
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ <p>Better separation of application logic into modules, with
+ runtime enforcement of module boundaries</p>
+ </li><li class="listitem">
+ <p>The ability to deploy multiple versions of a module (or
+ library) concurrently</p>
+ </li><li class="listitem">
+ <p>The ability to dynamically discover and use services provided
+ by other modules in the system</p>
+ </li><li class="listitem">
+ <p>The ability to dynamically install, update and uninstall
+ modules in a running system</p>
+ </li><li class="listitem">
+ <p>Use of the Spring Framework to instantiate, configure,
+ assemble, and decorate components within and across modules.</p>
+ </li><li class="listitem">
+ <p>A simple and familiar programming model for enterprise
+ developers to exploit the features of the OSGi platform.</p>
+ </li></ul></div>
+
+ <p>We believe that the combination of OSGi and Spring offers a
+ comprehensive model for building enterprise applications.</p>
+
+ <p>The OSGi Alliance found valuable the programming model proposed by Gemini Blueprint (then Spring DM) and,
+ in OSGi 4.2, standardized it by introducing the Blueprint Container, as part of the Compendium
+ services.</p>
+</div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="eclipse-migration.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="requirements.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;1.&nbsp;Spring Dynamic Modules becomes Eclipse Gemini Blueprint&nbsp;</td><td width="20%" align="center"><span style="color:white;font-size:90%;"><a href="http://www.SpringSource.com/" title="SpringSource - Spring from the Source">Sponsored by SpringSource
+ </a></span></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;3.&nbsp;Requirements</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/download/_index.html b/download/_index.html
index d2f1553..0ecb483 100644
--- a/download/_index.html
+++ b/download/_index.html
@@ -4,7 +4,7 @@
All downloads are provided under the terms and conditions of the <a href="/legal/epl/notice.php">Eclipse Foundation Software User Agreement</a>
unless otherwise specified.
</p>
- <h2>Latest version - 2.1.0.RELEASE</h2>
+ <h2>Latest version - 3.0.0.M01</h2>
The gemini blueprint artifacts are available directly from <a href="http://search.maven.org/#search|ga|1|g%3Aorg.eclipse.gemini.blueprint">maven central</a>.
You may reference them in a maven pom, like so:
@@ -13,22 +13,22 @@
&lt;dependency&gt;
&lt;groupId&gt;org.eclipse.gemini.blueprint&lt;/groupId&gt;
&lt;artifactId&gt;gemini-blueprint-io&lt;/artifactId&gt;
- &lt;version&gt;2.1.0.RELEASE&lt;/version&gt;
+ &lt;version&gt;3.0.0.M01&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.eclipse.gemini.blueprint&lt;/groupId&gt;
&lt;artifactId&gt;gemini-blueprint-extender&lt;/artifactId&gt;
- &lt;version&gt;2.1.0.RELEASE&lt;/version&gt;
+ &lt;version&gt;3.0.0.M01&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.eclipse.gemini.blueprint&lt;/groupId&gt;
&lt;artifactId&gt;gemini-blueprint-extensions&lt;/artifactId&gt;
- &lt;version&gt;2.1.0.RELEASE&lt;/version&gt;
+ &lt;version&gt;3.0.0.M01&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.eclipse.gemini.blueprint&lt;/groupId&gt;
&lt;artifactId&gt;gemini-blueprint-core&lt;/artifactId&gt;
- &lt;version&gt;2.1.0.RELEASE&lt;/version&gt;
+ &lt;version&gt;3.0.0.M01&lt;/version&gt;
&lt;/dependency&gt;
</pre>
@@ -38,17 +38,17 @@
&lt;dependency&gt;
&lt;groupId&gt;org.eclipse.gemini.blueprint&lt;/groupId&gt;
&lt;artifactId&gt;gemini-blueprint-mock&lt;/artifactId&gt;
- &lt;version&gt;2.1.0.RELEASE&lt;/version&gt;
+ &lt;version&gt;3.0.0.M01&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.eclipse.gemini.blueprint&lt;/groupId&gt;
&lt;artifactId&gt;gemini-blueprint-test&lt;/artifactId&gt;
- &lt;version&gt;2.1.0.RELEASE&lt;/version&gt;
+ &lt;version&gt;3.0.0.M01&lt;/version&gt;
&lt;/dependency&gt;
</pre>
<h3>Maven Repository</h3>
- As of release 2.0.0, the gemini artifacts are <a href="http://search.maven.org/#search|ga|1|g%3Aorg.eclipse.gemini.blueprint">available from maven central</a>
+ Since release 2.0.0, the gemini artifacts are <a href="http://search.maven.org/#search|ga|1|g%3Aorg.eclipse.gemini.blueprint">available from maven central</a>
- no additional repository configuration is required.
</div>
diff --git a/home/_index.html b/home/_index.html
index 169a7c1..c4aa23b 100644
--- a/home/_index.html
+++ b/home/_index.html
@@ -1,38 +1,12 @@
<div id="midcolumn">
- <h2>Gemini Blueprint 2.1.0 is out</h2>
+ <h2>Gemini Blueprint 3.0.0.M01 is out</h2>
<p>
- Gemini 2.1.0 features the latest Spring 4.3.x and annotation-based service injection and requires Java 1.8. gemini blueprint is available via maven central.
+ Gemini Blueprint 3.0.0.M01 features Spring 5.x along with important bugfixes. Gemini blueprint is available via maven central.
See <a href="https://www.eclipse.org/gemini/blueprint/download/">Download instructions</a>,
- <a href="https://www.eclipse.org/gemini/blueprint/documentation/reference/2.1.0.RELEASE/html/index.html">Reference documentation</a> and the
- <a href="http://git.eclipse.org/c/gemini.blueprint/org.eclipse.gemini.blueprint.git/plain/changelog.txt?h=2.1.0.RELEASE">Change log</a>
+ <a href="https://www.eclipse.org/gemini/blueprint/documentation/reference/3.0.0.M01/html/index.html">Reference documentation</a> and the
+ <a href="http://git.eclipse.org/c/gemini.blueprint/org.eclipse.gemini.blueprint.git/plain/changelog.txt?h=3.0.0.M01">Change log</a>
</p>
- <h2>Annotation-based service injection re-introduced in Gemini Blueprint 2.1.0</h2>
- <p>
- The original Spring-DM implementation featured a proprietary extension to the OSGi blueprint spec: Annotation-based service injection
- into beans without the need for service import declarations in the blueprint XML context.
- With Gemini Blueprint 2.1.0, this feature has been re-introduced. Now, beans can declare service dependencies like so:
- </p>
-<pre>
-@ServiceReference(filter = "(service.attribute=some.Attribute)")
-public void setService(ServiceType service) {
- ....
-}
-</pre>
-
- <p>or using field-based injection, like so:</p>
-
-<pre>
-@ServiceReference(filter = "(service.attribute=some.Attribute)")
-private ServiceType service;
-</pre>
-
- <p>
- The <a href="documentation/reference/2.1.0.RELEASE/html/service-registry.html#service-registry:annotations-vs-xml-declarations">@ServiceReference annotation</a>
- supports all attributes found in the XM service import declaration.
- </p>
-
-
<h2>Gemini Blueprint</h2>
<div id="introText">

Back to the top