Revert "Clean up old sub-project branches only there because of SVN"
This reverts commit cc28b9f478268d89bf271a2f7994172d10a6eb4f.
diff --git a/blueprint/.htaccess b/blueprint/.htaccess
new file mode 100644
index 0000000..210876c
--- /dev/null
+++ b/blueprint/.htaccess
@@ -0,0 +1,2 @@
+RewriteEngine On
+RewriteRule ^(.*) http://www.eclipse.org/blueprint [R,L]
\ No newline at end of file
diff --git a/blueprint/.project b/blueprint/.project
new file mode 100644
index 0000000..1bf5ab3
--- /dev/null
+++ b/blueprint/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>blueprint</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ </natures>
+</projectDescription>
diff --git a/blueprint/_projectCommon.php b/blueprint/_projectCommon.php
new file mode 100755
index 0000000..f85c2f7
--- /dev/null
+++ b/blueprint/_projectCommon.php
@@ -0,0 +1,61 @@
+<?php
+
+/*******************************************************************************
+ * Copyright (c) 2009 Eclipse Foundation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *
+ *******************************************************************************/
+
+ # Set the theme for your project's web pages.
+ # See http://eclipse.org/phoenix/
+ $theme = "Nova";
+
+
+ # Define your project-wide Navigation here
+ # This appears on the left of the page if you define a left nav
+ # Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
+ # these are optional
+
+ # If you want to override the eclipse.org navigation, uncomment below.
+ # $Nav->setLinkList(array());
+
+ # Break the navigation into sections
+ $Nav->addNavSeparator("Gemini Blueprint Home", "/gemini/blueprint");
+ $Nav->addCustomNav("About This Project","/projects/project_summary.php?projectid=rt.gemini.blueprint", "_self", 3);
+ $Nav->addCustomNav("Download", "/gemini/blueprint/download", "_self", 3);
+ $Nav->addCustomNav("Documentation", "/gemini/blueprint/documentation", "_self", 3);
+ $Nav->addCustomNav("Support", "/gemini/blueprint/support", "_self", 3);
+ $Nav->addCustomNav("Getting Involved", "/gemini/blueprint/contribute", "_self", 3);
+ $Nav->addCustomNav("History", "/gemini/blueprint/history", "_self", 3);
+ $Nav->addCustomNav("Gemini Home", "/gemini/blueprint");
+
+
+ # Define keywords, author and title here, or in each PHP page specifically
+ $pageKeywords = "eclipse, osgi, blueprint, spring, ioc, dynamic, services, rfc-124";
+ $pageAuthor = "Costin Leau";
+ $pageTitle = "Eclipse Gemini Blueprint - Incubation";
+
+
+ # top navigation bar
+ # To override and replace the navigation with your own, uncomment the line below.
+ # $Menu->setMenuItemList(array());
+ # $Menu->addMenuItem("Home", "/project", "_self");
+ # $Menu->addMenuItem("Download", "/project/download.php", "_self");
+ # $Menu->addMenuItem("Documentation", "/project/documentation.php", "_self");
+ # $Menu->addMenuItem("Support", "/project/support.php", "_self");
+ # $Menu->addMenuItem("Developers", "/project/developers", "_self");
+
+ # To define additional CSS or other pre-body headers
+ $App->AddExtraHtmlHeader('<link media="screen" rel="stylesheet" type="text/css" href="/gemini/blueprint/resources/local.css"/>');
+
+ # To enable occasional Eclipse Foundation Promotion banners on your pages (EclipseCon, etc)
+ $App->Promotion = TRUE;
+
+ # If you have Google Analytics code, use it here
+ $App->SetGoogleAnalyticsTrackingCode("UA-2728886-3");
+?>
\ No newline at end of file
diff --git a/blueprint/about/index.php b/blueprint/about/index.php
new file mode 100644
index 0000000..009d54d
--- /dev/null
+++ b/blueprint/about/index.php
@@ -0,0 +1,44 @@
+<?php
+ require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
+ require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php");
+ require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php");
+ $App = new App();
+ $Nav = new Nav();
+ $Menu = new Menu();
+ include($App->getProjectCommon());
+
+/*******************************************************************************
+ * Copyright (c) 2009 Eclipse Foundation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors: Christopher Frost
+ * Mike Keith
+ *
+ *******************************************************************************/
+
+ # Begin: page-specific settings. Change these.
+ $pageTitle = "About Gemini Blueprint";
+ $pageKeywords = "Eclipse, EclipseRT, Gemini, OSGi, History, origin, origins, about";
+ $pageAuthor = "Costin Leau";
+
+ ob_start();
+?>
+
+ <div id="midcolumn">
+ <h2>About Gemini Blueprint</h2>
+ <p>
+ Eclipse Gemini Blueprint project makes it easy to build Java applications that run in an OSGi framework. By using Gemini Blueprint, applications benefit from using a better separation
+ of modules, the ability to dynamically add, remove, and update modules in a running system, the ability to deploy multiple versions of a module simultaneously
+ (and have clients automatically bind to the appropriate one), and a dynamic service model.<br/>
+ Eclipse Gemini Blueprint is the reference implementation for the <a href="http://www.osgi.org">OSGi Alliance</a> Blueprint Service (chapter 121 of the OSGi 4.2 Compendium Specification).
+ </p>
+ </div>
+
+<?
+ $html = ob_get_clean();
+ # Generate the web page
+ $App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+?>
\ No newline at end of file
diff --git a/blueprint/contribute/_index.html b/blueprint/contribute/_index.html
new file mode 100644
index 0000000..05f99b4
--- /dev/null
+++ b/blueprint/contribute/_index.html
@@ -0,0 +1,29 @@
+<div id="midcolumn">
+ <h2>Developers, want to contribute ?</h2>
+ <p>
+ <a href="http://www.eclipse.org/gemini/blueprint/download">Download</a> Gemini Blueprint and take it for a spin.
+ Read the <a href="http://www.eclipse.org/gemini/blueprint/documentation">docs</a>. Check out and build the code. Then tweet, blog, or post to the
+ <a href="https://dev.eclipse.org/mailman/listinfo/gemini-dev"> developer mailing list</a> It's as simple as that.
+ Maybe later you'll want to file
+ <a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced;order=Importance;product=Gemini.Blueprint">
+ bugs</a> or send in patches to the docs and code.
+ </p>
+
+ <p>
+ 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>
+ </li>
+ <li>
+ Anonymous: git clone git://git.eclipse.org/gitroot/gemini.blueprint/org.eclipse.gemini.blueprint.git
+ </li>
+ <li>
+ Committers: git clone ssh://committer_id@git.eclipse.org/gitroot/gemini.blueprint/org.eclipse.gemini.blueprint.git
+ </li>
+ </ul>
+ Note that this git repository should also be mirrored in the future at github: <a href="https://github.com/eclipse/gemini.blueprint">https://github.com/eclipse/gemini.blueprint</a>.
+ </p>
+
+</div>
+
diff --git a/blueprint/contribute/index.php b/blueprint/contribute/index.php
new file mode 100644
index 0000000..644fbf2
--- /dev/null
+++ b/blueprint/contribute/index.php
@@ -0,0 +1,30 @@
+<?php
+ require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
+ require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php");
+ require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php");
+ $App = new App();
+ $Nav = new Nav();
+ $Menu = new Menu();
+ include($App->getProjectCommon());
+
+/*******************************************************************************
+ * Copyright (c) 2009 Eclipse Foundation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Costin Leau, VMware
+ *
+ *******************************************************************************/
+
+ # Begin: page-specific settings. Change these.
+ $pageTitle = "Gemini OSGi Blueprint - Contribute";
+
+ // # Paste your HTML content between the EOHTML markers!
+ $html = file_get_contents('_index.html');
+
+ # Generate the web page
+ $App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+?>
\ No newline at end of file
diff --git a/blueprint/documentation/_index.html b/blueprint/documentation/_index.html
new file mode 100644
index 0000000..c1b76f9
--- /dev/null
+++ b/blueprint/documentation/_index.html
@@ -0,0 +1,23 @@
+<div id="midcolumn">
+
+ <p>
+ <ul>
+ <li>Reference <a href="http://www.eclipse.org/gemini/blueprint/documentation/reference/1.0.1.RELEASE/html/index.html">documentation</a></li>
+ <li><a href="http://www.eclipse.org/gemini/blueprint/documentation/reference/1.0.1.RELEASE/html/faq.html">FAQ</a></li>
+ </ul>
+ </p>
+ <p>
+ The docs for <a href="http://www.springsource.org/osgi">Spring Dynamic Modules</a> 2.0 M1 release (for completeness) are available here:
+ <ul>
+ <li>Reference documentation ( <a href="http://static.springframework.org/osgi/docs/2.0.0.M1/reference/html/">HTML</a> |
+ <a href="http://static.springframework.org/osgi/docs/2.0.0.M1/reference/html-single/">HTML Single</a> |
+ <a href="http://static.springframework.org/osgi/docs/2.0.0.M1/reference/pdf/spring-dm-reference.pdf">PDF</a> )</li>
+ <li><a href="http://static.springframework.org/osgi/docs/2.0.0.M1/reference/html/faq.html">FAQ</a></li>
+ <li>Known <a href="http://static.springframework.org/spring-osgi/docs/2.0.0.M1/reference/html/issues.html">Issues</a></li>
+ </ul>
+ </p>
+
+ <p>For migrating from Spring DM to Gemini Blueprint, see this <a href="migration">guide</a>.</p>
+</div>
+
+
diff --git a/blueprint/documentation/index.php b/blueprint/documentation/index.php
new file mode 100644
index 0000000..2663908
--- /dev/null
+++ b/blueprint/documentation/index.php
@@ -0,0 +1,30 @@
+<?php
+ require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
+ require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php");
+ require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php");
+ $App = new App();
+ $Nav = new Nav();
+ $Menu = new Menu();
+ include($App->getProjectCommon());
+
+/*******************************************************************************
+ * Copyright (c) 2009 Eclipse Foundation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Costin Leau, VMware
+ *
+ *******************************************************************************/
+
+ # Begin: page-specific settings. Change these.
+ $pageTitle = "Gemini OSGi Blueprint - Documentation";
+
+ // # Paste your HTML content between the EOHTML markers!
+ $html = file_get_contents('_index.html');
+
+ # Generate the web page
+ $App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+?>
\ No newline at end of file
diff --git a/blueprint/documentation/migration/_index.html b/blueprint/documentation/migration/_index.html
new file mode 100644
index 0000000..720fc09
--- /dev/null
+++ b/blueprint/documentation/migration/_index.html
@@ -0,0 +1,67 @@
+<div id="midcolumn">
+ <h1>Migrating from Spring Dynamic Modules to Eclipse Gemini Blueprint</h1>
+
+
+ <p>This guide is aimed at helping developers using Spring DM in their application to migrate to Eclipse Gemini Blueprint. Note that the migration
+ to the Eclipse Foundation is not yet complete and this document might not reflect all the changes that occurred in the process. See the
+ support page for more info on getting accurate information.</p>
+
+ <h3>Overview</h3>
+ <p>Gemini Blueprint was created through the migration of Spring Dynamic Modules to the Eclipse Foundation. While certain things have
+ changed in the process, mainly to reflect the new project name and hosting infrastructure, the project architecture, ideas, code base and dependencies
+ have remained intact. Use this to your advantage when encountering errors, by looking first for references to 'old' packages or classes as these are likely
+ to be the problem in the vast majority of cases.
+ </p>
+
+ <h2>1.0.0.RC1</h2>
+
+ <h3>Changed Package Name</h3>
+ <p>The most disruptive change for Spring DM users when transitioning to Gemini Blueprint is the renaming of the project packages:
+ from <tt>org.springframework.osgi</tt> to <tt>org.eclipse.gemini.blueprint</tt>. If you are referring to the Spring DM classes, in any way,
+ either inside Java code or XML configuration, you need to update the package.<br/>
+ The actual class names and method signatures have <b>not</b> been changed so in most cases the changed can be accommodated through a simple "search & replace"
+ operation.<br/>
+ Note that for configuration purposes, one can shield itself from the package change by relying on the Spring DM/Eclipse Gemini Blueprint namespaces
+ which hide the actual classes used for configuring, making the change transparent.
+ </p>
+
+ <h3>Changed Exported Packages (Versions Included)</h3>
+ <p>Inherent to the package name changes, the artifact manifests have been updated as well. Besides changing the imported package names as indicated above, consumers should modify
+ the imported version to <tt>1.0.0</tt> (or <tt>1.0.0.M1</tt> for wiring only to the M1 artifact).
+
+ <h3>Deprecated Namespace/Schema Location</h3>
+ <p>The existing Spring DM schema definition (named <tt>spring-osgi.xsd</tt> and located at <tt>http://www.springframework.org/schema/osgi</tt>) are still available and supported
+ by Eclipse Gemini Blueprint. However we recommend users to migrate to the newly added schemas at <tt>http://www.eclipse.org/gemini/blueprint/schema/blueprint/gemini-blueprint.xsd</tt>
+ and <tt>http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium/gemini-blueprint-compendium.xsd</tt>. Except for the schema location, the new schemas are identical to the
+ old ones and will be the target of any new improvements and further development.</p>
+
+ <h3>Deprecated Spring-DM specific service properties</h3>
+ <p>Similar to the schema deprecation, the Spring-DM specific properties on exported services (such as <tt>org.springframework.osgi.bean.name</tt>) have been deprecated. While they are still supported
+ users are recommended to use the newly introduced Gemini Blueprint props (simply replace <tt>org.sprinframework.osgi</tt> prefix with <tt>org.eclipse.gemini.blueprint</tt>).</p>
+
+ <h3>Removed deprecated classes</h3>
+ <p>During the move, several deprecated or unused classes have been removed. If you cannot find a class name in the new package, it's likely that it has been removed in the process. Feel free
+ to confirm this over the forums.</p>
+
+ <h3>Removed deprecated modules</h3>
+ <p>As of Gemini Blueprint M1, not all modules or projects inside Spring DM have been moved. At the moment only the <tt>io</tt>, <tt>core</tt>, <tt>extender</tt> and <tt>test</tt> modules have
+ transitioned are provided in M1. With the up-coming release of OSGi RFC-66, the web support is being discontinued. Existing users are encouraged to look at Eclipse Gemini Web
+ <a href="http://www.eclipse.org/gemini/blueprint/">project</a>. The plans for the Maven archetype and annotation extension are undefined for the moment and these modules are <b>NOT</b> included
+ in Gemini Blueprint project.</p>
+
+ <h3>Changed Maven artifact groupId/artifactId and repository</h3>
+ <p>The Maven artifacts have changed as well during the transition. For the time being, the artifacts are hosted at a new repository (<tt>zodiac.springsource.com</tt>):
+ <pre>
+ <repository>
+ <id>zodiac-repository</id>
+ <name>Zodiac Milestone Repository</name>
+ <url>http://zodiac.springsource.com/maven/bundles/milestone</url>
+ </repository>
+ </pre>
+ The groupId has changed from <tt>org.springframework.osgi</tt> to <tt>org.eclipse.gemini.blueprint</tt> and artifactId from <tt>spring-osgi-*</tt> to <tt>gemini-blueprint-*</tt> (e.g.
+ <tt>spring-osgi-core</tt> is now <tt>gemini-blueprint-core</tt>).
+ </p>
+
+ <p>The content and names of the artifacts have remained mainly unchanged.</p>
+
+</div>
\ No newline at end of file
diff --git a/blueprint/documentation/migration/index.php b/blueprint/documentation/migration/index.php
new file mode 100644
index 0000000..57755aa
--- /dev/null
+++ b/blueprint/documentation/migration/index.php
@@ -0,0 +1,30 @@
+<?php
+ require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
+ require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php");
+ require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php");
+ $App = new App();
+ $Nav = new Nav();
+ $Menu = new Menu();
+ include($App->getProjectCommon());
+
+/*******************************************************************************
+ * Copyright (c) 2009 Eclipse Foundation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Costin Leau, VMware
+ *
+ *******************************************************************************/
+
+ # Begin: page-specific settings. Change these.
+ $pageTitle = "Gemini OSGi Blueprint - Documentation - Migrating to Gemini Blueprint";
+
+ // # Paste your HTML content between the EOHTML markers!
+ $html = file_get_contents('_index.html');
+
+ # Generate the web page
+ $App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+?>
\ No newline at end of file
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/app-deploy.html b/blueprint/documentation/reference/1.0.1.RELEASE/html/app-deploy.html
new file mode 100644
index 0000000..f386f45
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/app-deploy.html
@@ -0,0 +1,293 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Chapter 8. Packaging and Deploying Spring-based OSGi applications</title><link rel="stylesheet" href="css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.72.0"><link rel="start" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="reference.html" title="Part II. Reference Documentation"><link rel="prev" href="bnd-app-ctx.html" title="Chapter 7. Bundles and Application Contexts"><link rel="next" href="service-registry.html" title="Chapter 9. The Service Registry"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="app-deploy"></a>Chapter 8. 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="app-deploy:headers"></a>8.1. 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 type="disc"><li><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><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 href="appendix-tips.html#appendix-tips:fragments" title="C.1. 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 type="disc"><li><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><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 href="service-registry.html#service-registry:refs:singular:dynamics" title="9.2.2.9. reference And OSGi Service Dynamics">Section 9.2.2.9, “<code class="literal">reference</code> And OSGi Service Dynamics”</a> for more details.</p></li><li><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><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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="app-deploy:headers:blueprint"></a>8.2. 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 8.1. Configuration Setting Differences</b></p><div class="table-contents"><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"><img src="images/callouts/1.png" alt="(1)"></span>
+ wait-for-dependencies:=true;
+ timeout:=10 <span class="co"><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"><img src="images/callouts/1.png" alt="1" border="0"></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"><img src="images/callouts/2.png" alt="2" border="0"></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"><img src="images/callouts/1.png" alt="(1)"></span>
+ blueprint.graceperiod:=true;
+ blueprint.timeout:=10000 <span class="co"><img src="images/callouts/2.png" alt="(2)"></span>
+Blueprint-Bundle: config/account-data-context.xml, config/osgi-*.xml <span class="co"><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"><img src="images/callouts/1.png" alt="1" border="0"></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"><img src="images/callouts/2.png" alt="2" border="0"></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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="app-deploy:extender-configuration"></a>8.3. 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 href="appendix-tips.html#appendix-tips:fragments" title="C.1. 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 href="appendix-tips.html#appendix-tips:fragments" title="C.1. 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 8.2. Extender Configuration Options</b></p><div class="table-contents"><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>
+ <sup>[<a name="d18e1685" href="#ftn.d18e1685">a</a>]</sup></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">SimpleAsyncTaskExecutor</code> is used by default which means a new thread will be created for each application contexts. While this
+ is suitable for testing and development, we strongly recommend to use a <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://en.wikipedia.org/wiki/Thread_pool_pattern" target="_top">thread pool</a>
+ in a production environment</td></tr><tr><td><code class="literal">shutdownTaskExecutor</code></td><td><code class="interfacename">TaskExecutor</code>
+ <sup>[<a name="d18e1707" href="#ftn.d18e1707">b</a>]</sup></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">TimerTaskExecutor</code> 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 href="app-deploy.html#extender-configuration-options-properties" title="Table 8.3. Available extenderProperties">defaults</a> below</td></tr><tr><td><code class="literal">osgiApplicationEventMulticaster</code></td><td><code class="interfacename">ApplicationEventMulticaster</code>
+ <sup>[<a name="d18e1740" href="#ftn.d18e1740">c</a>]</sup>
+ </td><td><code class="literal"><a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/context/event/ApplicationEventMulticaster.html" target="_top">
+ ApplicationEventMultiCaster</a></code> used for propagating Gemini Blueprint/Spring DM <a href="app-deploy.html#app-deploy:extender-configuration:events" title="8.3.1. Listening To Extender Events">events</a>
+ to third parties.
+ </td><td>An instance of <code class="classname"><a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/context/event/SimpleApplicationEventMulticaster.html" target="_top">
+ SimpleApplicationEventMulticaster</a></code> is used.
+ See <code class="classname">AbstractApplicationContext</code>
+ <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://static.springframework.org/spring/docs/2.5.x/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>
+ <sup>[<a name="extender-configuration-options:extender.pkg" href="#ftn.extender-configuration-options:extender.pkg">d</a>]</sup>
+ </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 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>
+ <sup>[<a href="#ftn.extender-configuration-options:extender.pkg">d</a>]</sup>
+ </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 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>
+ <sup>[<a name="extender-configuration-options:event.pkg" href="#ftn.extender-configuration-options:event.pkg">e</a>]</sup>
+ </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 class="footnote"><code class="literal"><sup>[<a name="ftn.d18e1685" href="#d18e1685">a</a>] </sup>org.springframework.core.task</code></div><div class="footnote"><code class="literal"><sup>[<a name="ftn.d18e1707" href="#d18e1707">b</a>] </sup>org.springframework.core.task</code></div><div class="footnote"><code class="literal"><sup>[<a name="ftn.d18e1740" href="#d18e1740">c</a>] </sup>org.springframework.context.event</code></div><div class="footnote"><code class="literal"><sup>[<a name="ftn.extender-configuration-options:extender.pkg" href="#extender-configuration-options:extender.pkg">d</a>] </sup>org.eclipse.gemini.blueprint.extender package</code></div><div class="footnote"><code class="literal"><sup>[<a name="ftn.extender-configuration-options:event.pkg" href="#extender-configuration-options:event.pkg">e</a>] </sup>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 8.3. Available <code class="literal">extenderProperties</code></b></p><div class="table-contents"><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">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" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="app-deploy:extender-configuration:events"></a>8.3.1. 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 8.4. Gemini Blueprint/Spring DM build-in events</b></p><div class="table-contents"><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 xmlns:xlink="http://www.w3.org/1999/xlink" href="http://static.springframework.org/spring/docs/2.5.x/reference/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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="app-deploy:required-libraries"></a>8.4. 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 type="disc"><li><p>The extender bundle itself,
+ <code class="literal">org.eclipse.gemini.blueprint.extender</code></p></li><li><p>The core implementation bundle for the Gemini Blueprint
+ support, <code class="literal">org.eclipse.gemini.blueprint.core</code></p></li><li><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 2.5 of the
+ Spring Framework, the Spring jars included in the Spring distribution are valid OSGi
+ bundles and can be installed directly into an OSGi platform. The minimum
+ required set of bundles is:</p><div class="itemizedlist"><ul type="disc"><li><p>org.springframework.aop.jar (bundle symbolic name
+ <code class="literal">org.springframework.aop</code>)</p></li><li><p>org.springframework.asm.jar (bundle symbolic name
+ <code class="literal">org.springframework.asm</code>)</p></li><li><p>org.springframework.beans.jar (bundle symbolic name
+ <code class="literal">org.springframework.beans</code>)</p></li><li><p>org.springframework.core.jar (bundle symbolic name
+ <code class="literal">org.springframework.core</code>)</p></li><li><p>org.springframework.context.jar (bundle symbolic name
+ <code class="literal">org.springframework.context</code>)</p></li><li><p>org.springframework.expression.jar (bundle symbolic name
+ <code class="literal">org.springframework.expression</code>)</p></li></ul></div><p>In additional the following supporting library bundles are
+ required. OSGi-ready versions of these libraries are shipped with the
+ Gemini Blueprint distribution.</p><div class="itemizedlist"><ul type="disc"><li><p>aopalliance</p></li><li><p>cglib-nodep (when proxying classes rather then
+ interfaces, needed in most cases)</p></li><li><p>commons-logging API (<a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.slf4j.org/" target="_top">SLF4J</a> version <span class="emphasis"><em>highly</em></span> recommended:</p><div class="itemizedlist"><ul type="circle"><li><p>SLF4J API (com.springsource.sfl4j.api.jar)</p></li><li><p>SLF4J Implementation Bridge (such as Log4j - com.springsource.sfl4j.log4j.jar)</p></li><li><p>SLF4J commons logging adapter (com.springsource.sfl4j.org.apache.commons.logging.jar)</p></li></ul></div></li><li><p>logging implementation suitable for commons-logging (such as log4j)</p></li></ul></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="app-deploy:spring-namespaces"></a>8.5. Spring XML Authoring Support</h2></div></div></div><p>Spring 2.0 introduced (among other things) <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://static.springframework.org/spring/docs/2.5.x/reference/xsd-config.html" target="_top">
+ easier</a> XML configuration and <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://static.springframework.org/spring/docs/2.5.x/reference/extensible-xml.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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="app-deploy:imports-exports"></a>8.6. 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 xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.springsource.org/bundlor" target="_top">Bundlor</a> or <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.aqute.biz/Code/Bnd" target="_top">BND</a>) for creating proper
+ OSGi manifests.</td></tr></table></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="app-deploy:ext-libs"></a>8.7. Considerations When Using External Libraries</h2></div></div></div><div class="sidebar"><p class="title"><b>What is the context class loader?</b></p><p>
+ The thread context class loader was introduced in J2SE without much fanfare.
+ Below is a short definition for it, quoted from <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://java.sun.com/products/jndi/tutorial/beyond/misc/classloader.html" target="_top">one
+ </a> of the tutorials available on <a xmlns:xlink="http://www.w3.org/1999/xlink" 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 href="service-registry.html" title="Chapter 9. The Service Registry">Chapter 9, <i xmlns:xlink="http://www.w3.org/1999/xlink">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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="app-deploy:troubleshooting"></a>8.8. 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 xmlns:xlink="http://www.w3.org/1999/xlink" 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 xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.springsource.com/products/dmserver" 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> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="service-registry.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 7. Bundles and Application Contexts </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"> Chapter 9. The Service Registry</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/appendix-ack.html b/blueprint/documentation/reference/1.0.1.RELEASE/html/appendix-ack.html
new file mode 100644
index 0000000..e2e2b01
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/appendix-ack.html
@@ -0,0 +1,7 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Appendix G. Acknowledgments</title><link rel="stylesheet" href="css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.72.0"><link rel="start" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="appendixes.html" title="Part IV. Appendixes"><link rel="prev" href="appendix-schema.html" title="Appendix F. Gemini Blueprint Schema"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="appendix-ack"></a>Appendix G. 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> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top">Appendix F. Gemini Blueprint Schema </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"> </td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/appendix-osgi-repo.html b/blueprint/documentation/reference/1.0.1.RELEASE/html/appendix-osgi-repo.html
new file mode 100644
index 0000000..ffcad95
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/appendix-osgi-repo.html
@@ -0,0 +1,40 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Appendix E. Gemini Blueprint OSGi Repository</title><link rel="stylesheet" href="css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.72.0"><link rel="start" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="appendixes.html" title="Part IV. Appendixes"><link rel="prev" href="appendix-roadmap.html" title="Appendix D. Roadmap"><link rel="next" href="appendix-schema.html" title="Appendix F. Gemini Blueprint Schema"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="appendix-osgi-repo"></a>Appendix E. 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 xmlns:xlink="http://www.w3.org/1999/xlink" 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 xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.springsource.com/repository/" target="_top">Enterprise Bundle Repository</a> (or SpringSource Repository) addresses this problem by
+ providing
+ “<span class="quote">a collection of open source libraries commonly used for developing enterprise Java applications with the Spring Framework</span>” (taken
+ from the Repository <a xmlns:xlink="http://www.w3.org/1999/xlink" 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="appendix-osgi-repo:old-repo"></a>E.1. 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 xmlns:xlink="http://www.w3.org/1999/xlink" 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 xmlns:xlink="http://www.w3.org/1999/xlink" 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" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="appendix-osgi-repo:conventions"></a>E.1.1. 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" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="appendix-osgi-repo:browsing"></a>E.1.2. Browsing The Repository Content</h3></div></div></div><p>The repository is currently hosted at Amazon <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://aws.amazon.com/s3" target="_top">S3</a>. To browse the repository structure,
+ use a S3 compatible browser (such as <a xmlns:xlink="http://www.w3.org/1999/xlink" 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" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="appendix-osgi-repo:maven"></a>E.1.3. 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"><<span class="hl-tag">repositories</span>>
+ <<span class="hl-tag">repository</span>>
+ <<span class="hl-tag">id</span>>spring-osgified-artifacts<<span class="hl-tag">/id</span>>
+ <<span class="hl-tag">snapshots</span>>
+ <<span class="hl-tag">enabled</span>>true<<span class="hl-tag">/enabled</span>>
+ <<span class="hl-tag">/snapshots</span>>
+ <<span class="hl-tag">name</span>>Springframework Maven OSGified Artifacts Repository<<span class="hl-tag">/name</span>>
+ <<span class="hl-tag">url</span>>http://maven.springframework.org/osgi<<span class="hl-tag">/url</span>>
+ <<span class="hl-tag">/repository</span>>
+<<span class="hl-tag">/repositories</span>></pre></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="appendix-osgi-repo:ant"></a>E.1.4. Using The Repository With Ant/Ivy</h3></div></div></div><p>When using <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://ant.apache.org/" target="_top">Ant</a> consider using the excellent <a xmlns:xlink="http://www.w3.org/1999/xlink" 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 xmlns:xlink="http://www.w3.org/1999/xlink" 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> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix-schema.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix D. Roadmap </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"> Appendix F. Gemini Blueprint Schema</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/appendix-pde-integration.html b/blueprint/documentation/reference/1.0.1.RELEASE/html/appendix-pde-integration.html
new file mode 100644
index 0000000..c3d03a9
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/appendix-pde-integration.html
@@ -0,0 +1,39 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Appendix B. Eclipse Plug-in Development integration</title><link rel="stylesheet" href="css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.72.0"><link rel="start" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="appendixes.html" title="Part IV. Appendixes"><link rel="prev" href="appendix-security.html" title="Appendix A. Security Integration"><link rel="next" href="appendix-tips.html" title="Appendix C. Useful OSGi tips"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="appendix-pde-integration"></a>Appendix B. Eclipse Plug-in Development integration</h2></div></div></div><p>Eclipse <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.eclipse.org/pde/" target="_top">PDE</a> “<span class="quote">provides comprehensive OSGi tooling, which makes it
+ an ideal environment for component programming, not just Eclipse plug-in development</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 xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.springide.org" target="_top">Spring IDE</a>, Gemini Blueprint can be installed as a
+ <a xmlns:xlink="http://www.w3.org/1999/xlink" 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 xmlns:xlink="http://www.w3.org/1999/xlink" href="http://springide.org/project/wiki/SpringideInstall" target="_top">Spring IDE installation page</a> for information on its requirement
+ and install process.</p><ol type="1"><li><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><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><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><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> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix-tips.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix A. Security Integration </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"> Appendix C. Useful OSGi tips</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/appendix-roadmap.html b/blueprint/documentation/reference/1.0.1.RELEASE/html/appendix-roadmap.html
new file mode 100644
index 0000000..bc54dd9
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/appendix-roadmap.html
@@ -0,0 +1,24 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Appendix D. Roadmap</title><link rel="stylesheet" href="css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.72.0"><link rel="start" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="appendixes.html" title="Part IV. Appendixes"><link rel="prev" href="appendix-tips.html" title="Appendix C. Useful OSGi tips"><link rel="next" href="appendix-osgi-repo.html" title="Appendix E. Gemini Blueprint OSGi Repository"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="appendix-roadmap"></a>Appendix D. 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 xmlns:xlink="http://www.w3.org/1999/xlink" href="https://bugs.eclipse.org/bugs/buglist.cgi?product=Gemini.Blueprint" target="_top">
+ our
+ </a>
+ issue tracker.
+ </p><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d18e6580"></a>D.1. 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 > 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 > 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> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix-osgi-repo.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix C. Useful OSGi tips </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"> Appendix E. Gemini Blueprint OSGi Repository</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/appendix-schema.html b/blueprint/documentation/reference/1.0.1.RELEASE/html/appendix-schema.html
new file mode 100644
index 0000000..13bc0b5
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/appendix-schema.html
@@ -0,0 +1,922 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Appendix F. Gemini Blueprint Schema</title><link rel="stylesheet" href="css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.72.0"><link rel="start" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="appendixes.html" title="Part IV. Appendixes"><link rel="prev" href="appendix-osgi-repo.html" title="Appendix E. Gemini Blueprint OSGi Repository"><link rel="next" href="appendix-ack.html" title="Appendix G. Acknowledgments"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="appendix-schema"></a>Appendix F. Gemini Blueprint Schema</h2></div></div></div><p>Gemini Blueprint Core Schema</p><pre class="programlisting"><<span class="hl-tag">?xml version="1.0" encoding="UTF-8" standalone="no"?</span>>
+
+<<span class="hl-tag">xsd:schema</span> <span class="hl-attribute">xmlns</span>=<span class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint"</span>
+ <span class="hl-attribute">xmlns:xsd</span>=<span class="hl-value">"http://www.w3.org/2001/XMLSchema"</span>
+ <span class="hl-attribute">xmlns:beans</span>=<span class="hl-value">"http://www.springframework.org/schema/beans"</span>
+ <span class="hl-attribute">xmlns:tool</span>=<span class="hl-value">"http://www.springframework.org/schema/tool"</span>
+ <span class="hl-attribute">targetNamespace</span>=<span class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint"</span>
+ <span class="hl-attribute">elementFormDefault</span>=<span class="hl-value">"qualified"</span>
+ <span class="hl-attribute">attributeFormDefault</span>=<span class="hl-value">"unqualified"</span>
+ <span class="hl-attribute">version</span>=<span class="hl-value">"1.0.0"</span>>
+
+ <<span class="hl-tag">xsd:import</span> <span class="hl-attribute">namespace</span>=<span class="hl-value">"http://www.w3.org/XML/1998/namespace"</span>/>
+ <<span class="hl-tag">xsd:import</span> <span class="hl-attribute">namespace</span>=<span class="hl-value">"http://www.springframework.org/schema/beans"</span>/>
+ <<span class="hl-tag">xsd:import</span> <span class="hl-attribute">namespace</span>=<span class="hl-value">"http://www.springframework.org/schema/tool"</span>/>
+
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Namespace</span> <span class="hl-attribute">support</span> <span class="hl-attribute">for</span> <span class="hl-attribute">the</span> <span class="hl-attribute">core</span> <span class="hl-attribute">services</span> <span class="hl-attribute">provided</span> <span class="hl-attribute">by</span> <span class="hl-attribute">Eclipse</span> <span class="hl-attribute">Gemini</span> <span class="hl-attribute">Blueprint.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+
+ <span class="hl-attribute"><xsd:attributeGroup</span> <span class="hl-attribute">name</span>=<span class="hl-value">"defaults"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[Defaults</span> <span class="hl-attribute">for</span> <span class="hl-attribute">Gemini</span> <span class="hl-attribute">Blueprint</span> <span class="hl-attribute">declarations.]]></span>
+ <span class="hl-attribute"></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"><!--</span> <span class="hl-attribute">attributes</span> <span class="hl-attribute">--></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"default-timeout"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:nonNegativeInteger"</span> <span class="hl-attribute">default</span>=<span class="hl-value">"30000"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Default</span> <span class="hl-attribute">timeout</span> <span class="hl-attribute">(in</span> <span class="hl-attribute">milliseconds)</span> <span class="hl-attribute">for</span> <span class="hl-attribute">all</span> <span class="hl-attribute">reference</span> <span class="hl-attribute">(service</span> <span class="hl-attribute">importers)</span> <span class="hl-attribute">elements</span> <span class="hl-attribute">that</span> <span class="hl-attribute">do</span> <span class="hl-attribute">not</span> <span class="hl-attribute">explicitly</span> <span class="hl-attribute">specify</span> <span class="hl-attribute">one.</span>
+ <span class="hl-attribute">Default</span> <span class="hl-attribute">value</span> <span class="hl-attribute">is</span> <span class="hl-attribute">300000</span> <span class="hl-attribute">ms</span> <span class="hl-attribute">(5</span> <span class="hl-attribute">minutes).</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"default-availablility"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"TavailabilityOptions"</span> <span class="hl-attribute">default</span>=<span class="hl-value">"mandatory"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Default</span> <span class="hl-attribute">availability</span> <span class="hl-attribute">for</span> <span class="hl-attribute">all</span> <span class="hl-attribute">OSGi</span> <span class="hl-attribute">references</span> <span class="hl-attribute">(singular</span> <span class="hl-attribute">or</span> <span class="hl-attribute">collections)</span> <span class="hl-attribute">elements</span> <span class="hl-attribute">that</span> <span class="hl-attribute">do</span> <span class="hl-attribute">not</span> <span class="hl-attribute">explicitly</span> <span class="hl-attribute">specify</span> <span class="hl-attribute">one.</span>
+ <span class="hl-attribute">Default</span> <span class="hl-attribute">value</span> <span class="hl-attribute">is</span> <span class="hl-attribute">'mandatory'</span> <span class="hl-attribute">which</span> <span class="hl-attribute">means</span> <span class="hl-attribute">that</span> <span class="hl-attribute">a</span> <span class="hl-attribute">backing</span> <span class="hl-attribute">service</span> <span class="hl-attribute">must</span> <span class="hl-attribute">exist</span> <span class="hl-attribute">while</span> <span class="hl-attribute">'optional'</span> <span class="hl-attribute">indicates</span> <span class="hl-attribute">that</span> <span class="hl-attribute">it</span> <span class="hl-attribute">is</span>
+ <span class="hl-attribute">acceptable</span> <span class="hl-attribute">to</span> <span class="hl-attribute">be</span> <span class="hl-attribute">no</span> <span class="hl-attribute">backing</span> <span class="hl-attribute">service.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"default-cardinality"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"TdefaultCardinalityOptions"</span> <span class="hl-attribute">default</span>=<span class="hl-value">"1..X"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">As</span> <span class="hl-attribute">of</span> <span class="hl-attribute">Eclipse</span> <span class="hl-attribute">Gemini</span> <span class="hl-attribute">Blueprint,</span> <span class="hl-attribute">'default-cardinality'</span> <span class="hl-attribute">has</span> <span class="hl-attribute">been</span> <span class="hl-attribute">replaced</span> <span class="hl-attribute">by</span> <span class="hl-attribute">'default-availability'</span> <span class="hl-attribute">attribute.</span>
+
+ <span class="hl-attribute">Default</span> <span class="hl-attribute">cardinality</span> <span class="hl-attribute">(of</span> <span class="hl-attribute">the</span> <span class="hl-attribute">relationship</span> <span class="hl-attribute">to</span> <span class="hl-attribute">the</span> <span class="hl-attribute">backing</span> <span class="hl-attribute">service(s))</span> <span class="hl-attribute">for</span> <span class="hl-attribute">all</span> <span class="hl-attribute">OSGi</span> <span class="hl-attribute">references</span> <span class="hl-attribute">(singular</span> <span class="hl-attribute">or</span> <span class="hl-attribute">collections)</span>
+ <span class="hl-attribute">elements</span> <span class="hl-attribute">that</span> <span class="hl-attribute">do</span> <span class="hl-attribute">not</span> <span class="hl-attribute">explicitly</span> <span class="hl-attribute">specify</span> <span class="hl-attribute">one.</span>
+ <span class="hl-attribute">Default</span> <span class="hl-attribute">value</span> <span class="hl-attribute">is</span> <span class="hl-attribute">'1..X'</span> <span class="hl-attribute">(resolved</span> <span class="hl-attribute">to</span> <span class="hl-attribute">'1..1'</span> <span class="hl-attribute">for</span> <span class="hl-attribute">osgi:reference</span> <span class="hl-attribute">and</span> <span class="hl-attribute">'1..N'</span> <span class="hl-attribute">for</span> <span class="hl-attribute">osgi:list/set)</span> <span class="hl-attribute">which</span> <span class="hl-attribute">means</span> <span class="hl-attribute">that</span> <span class="hl-attribute">a</span> <span class="hl-attribute">backing</span>
+ <span class="hl-attribute">service</span> <span class="hl-attribute">must</span> <span class="hl-attribute">exist</span> <span class="hl-attribute">(this</span> <span class="hl-attribute">is</span> <span class="hl-attribute">a</span> <span class="hl-attribute">mandatory</span> <span class="hl-attribute">service</span> <span class="hl-attribute">reference).</span> <span class="hl-attribute">A</span> <span class="hl-attribute">value</span> <span class="hl-attribute">of</span> <span class="hl-attribute">'0..X'</span> <span class="hl-attribute">(resolved</span> <span class="hl-attribute">to</span> <span class="hl-attribute">'0..1'</span> <span class="hl-attribute">for</span> <span class="hl-attribute">osgi:reference</span>
+ <span class="hl-attribute">and</span> <span class="hl-attribute">'0..N'</span> <span class="hl-attribute">for</span> <span class="hl-attribute">osgi:list/set)</span> <span class="hl-attribute">indicates</span> <span class="hl-attribute">that</span> <span class="hl-attribute">it</span> <span class="hl-attribute">is</span> <span class="hl-attribute">acceptable</span> <span class="hl-attribute">to</span> <span class="hl-attribute">be</span> <span class="hl-attribute">no</span> <span class="hl-attribute">backing</span> <span class="hl-attribute">service</span> <span class="hl-attribute">(an</span> <span class="hl-attribute">optional</span> <span class="hl-attribute">service</span> <span class="hl-attribute">reference).</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"></xsd:attributeGroup></span>
+
+ <span class="hl-attribute"><xsd:simpleType</span> <span class="hl-attribute">name</span>=<span class="hl-value">"TavailabilityOptions"</span>>
+ <<span class="hl-tag">xsd:restriction</span> <span class="hl-attribute">base</span>=<span class="hl-value">"xsd:NMTOKEN"</span>>
+ <<span class="hl-tag">xsd:enumeration</span> <span class="hl-attribute">value</span>=<span class="hl-value">"mandatory"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Mandatory</span> <span class="hl-attribute">service</span> <span class="hl-attribute">reference</span> <span class="hl-attribute">-</span> <span class="hl-attribute">a</span> <span class="hl-attribute">backing</span> <span class="hl-attribute">service</span> <span class="hl-attribute">must</span> <span class="hl-attribute">exist.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:enumeration></span>
+ <span class="hl-attribute"><xsd:enumeration</span> <span class="hl-attribute">value</span>=<span class="hl-value">"optional"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Optional</span> <span class="hl-attribute">service</span> <span class="hl-attribute">reference</span> <span class="hl-attribute">-</span> <span class="hl-attribute">A</span> <span class="hl-attribute">backing</span> <span class="hl-attribute">service</span> <span class="hl-attribute">can</span> <span class="hl-attribute">be</span> <span class="hl-attribute">missing.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:enumeration></span>
+ <span class="hl-attribute"></xsd:restriction></span>
+ <span class="hl-attribute"></xsd:simpleType></span>
+
+ <span class="hl-attribute"><xsd:simpleType</span> <span class="hl-attribute">name</span>=<span class="hl-value">"TdefaultCardinalityOptions"</span>>
+ <<span class="hl-tag">xsd:restriction</span> <span class="hl-attribute">base</span>=<span class="hl-value">"xsd:NMTOKEN"</span>>
+ <<span class="hl-tag">xsd:enumeration</span> <span class="hl-attribute">value</span>=<span class="hl-value">"1..X"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">A</span> <span class="hl-attribute">backing</span> <span class="hl-attribute">service</span> <span class="hl-attribute">must</span> <span class="hl-attribute">exist</span> <span class="hl-attribute">(this</span> <span class="hl-attribute">is</span> <span class="hl-attribute">a</span> <span class="hl-attribute">mandatory</span> <span class="hl-attribute">service</span> <span class="hl-attribute">reference).</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:enumeration></span>
+ <span class="hl-attribute"><xsd:enumeration</span> <span class="hl-attribute">value</span>=<span class="hl-value">"0..X"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">A</span> <span class="hl-attribute">backing</span> <span class="hl-attribute">service</span> <span class="hl-attribute">can</span> <span class="hl-attribute">be</span> <span class="hl-attribute">missing</span> <span class="hl-attribute">(this</span> <span class="hl-attribute">is</span> <span class="hl-attribute">an</span> <span class="hl-attribute">optional</span> <span class="hl-attribute">service</span> <span class="hl-attribute">reference).</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:enumeration></span>
+ <span class="hl-attribute"></xsd:restriction></span>
+ <span class="hl-attribute"></xsd:simpleType></span>
+
+ <span class="hl-attribute"><!--</span> <span class="hl-attribute">reference</span> <span class="hl-attribute">--></span>
+ <span class="hl-attribute"><xsd:element</span> <span class="hl-attribute">name</span>=<span class="hl-value">"reference"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"TsingleReference"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Defines</span> <span class="hl-attribute">a</span> <span class="hl-attribute">reference</span> <span class="hl-attribute">to</span> <span class="hl-attribute">a</span> <span class="hl-attribute">service</span> <span class="hl-attribute">obtained</span> <span class="hl-attribute">via</span> <span class="hl-attribute">the</span> <span class="hl-attribute">OSGi</span> <span class="hl-attribute">service</span> <span class="hl-attribute">registry.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:element></span>
+
+ <span class="hl-attribute"><xsd:complexType</span> <span class="hl-attribute">name</span>=<span class="hl-value">"Treference"</span>>
+ <<span class="hl-tag">xsd:complexContent</span>>
+ <<span class="hl-tag">xsd:extension</span> <span class="hl-attribute">base</span>=<span class="hl-value">"beans:identifiedType"</span>>
+ <<span class="hl-tag">xsd:sequence</span> <span class="hl-attribute">minOccurs</span>=<span class="hl-value">"0"</span> <span class="hl-attribute">maxOccurs</span>=<span class="hl-value">"1"</span>>
+ <<span class="hl-tag">xsd:element</span> <span class="hl-attribute">name</span>=<span class="hl-value">"interfaces"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"beans:listOrSetType"</span> <span class="hl-attribute">minOccurs</span>=<span class="hl-value">"0"</span> <span class="hl-attribute">maxOccurs</span>=<span class="hl-value">"1"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">The</span> <span class="hl-attribute">set</span> <span class="hl-attribute">of</span> <span class="hl-attribute">service</span> <span class="hl-attribute">interfaces</span> <span class="hl-attribute">that</span> <span class="hl-attribute">the</span> <span class="hl-attribute">services</span> <span class="hl-attribute">obtained</span> <span class="hl-attribute">via</span> <span class="hl-attribute">the</span> <span class="hl-attribute">registry</span> <span class="hl-attribute">are</span> <span class="hl-attribute">required</span> <span class="hl-attribute">to</span> <span class="hl-attribute">support.</span>
+ <span class="hl-attribute">By</span> <span class="hl-attribute">convention,</span> <span class="hl-attribute">the</span> <span class="hl-attribute">interface</span> <span class="hl-attribute">attribute</span> <span class="hl-attribute">is</span> <span class="hl-attribute">a</span> <span class="hl-attribute">Java</span> <span class="hl-attribute">interface</span> <span class="hl-attribute">type,</span> <span class="hl-attribute">but</span> <span class="hl-attribute">may</span> <span class="hl-attribute">also</span> <span class="hl-attribute">be</span> <span class="hl-attribute">a</span> <span class="hl-attribute">(non-final)</span>
+ <span class="hl-attribute">class</span> <span class="hl-attribute">type.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:element></span>
+ <span class="hl-attribute"><xsd:element</span> <span class="hl-attribute">name</span>=<span class="hl-value">"reference-listener"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"Tlistener"</span> <span class="hl-attribute">minOccurs</span>=<span class="hl-value">"0"</span> <span class="hl-attribute">maxOccurs</span>=<span class="hl-value">"unbounded"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Defines</span> <span class="hl-attribute">a</span> <span class="hl-attribute">listener</span> <span class="hl-attribute">that</span> <span class="hl-attribute">will</span> <span class="hl-attribute">receive</span> <span class="hl-attribute">notification</span> <span class="hl-attribute">when</span> <span class="hl-attribute">a</span> <span class="hl-attribute">service</span> <span class="hl-attribute">backing</span> <span class="hl-attribute">this</span> <span class="hl-attribute">reference</span> <span class="hl-attribute">is</span>
+ <span class="hl-attribute">bound</span> <span class="hl-attribute">or</span> <span class="hl-attribute">unbound.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:element></span>
+ <span class="hl-attribute"><xsd:element</span> <span class="hl-attribute">name</span>=<span class="hl-value">"listener"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"Tlistener"</span> <span class="hl-attribute">minOccurs</span>=<span class="hl-value">"0"</span> <span class="hl-attribute">maxOccurs</span>=<span class="hl-value">"unbounded"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Defines</span> <span class="hl-attribute">a</span> <span class="hl-attribute">listener</span> <span class="hl-attribute">that</span> <span class="hl-attribute">will</span> <span class="hl-attribute">receive</span> <span class="hl-attribute">notification</span> <span class="hl-attribute">when</span> <span class="hl-attribute">a</span> <span class="hl-attribute">service</span> <span class="hl-attribute">backing</span> <span class="hl-attribute">this</span> <span class="hl-attribute">reference</span> <span class="hl-attribute">is</span>
+ <span class="hl-attribute">bound</span> <span class="hl-attribute">or</span> <span class="hl-attribute">unbound.</span> <span class="hl-attribute">Deprecated</span> <span class="hl-attribute">since</span> <span class="hl-attribute">Gemini</span> <span class="hl-attribute">Blueprint,</span> <span class="hl-attribute">in</span> <span class="hl-attribute">favour</span> <span class="hl-attribute">of</span> <span class="hl-attribute">'reference-listener'.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:element></span>
+ <span class="hl-attribute"></xsd:sequence></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"interface"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:token"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">The</span> <span class="hl-attribute">service</span> <span class="hl-attribute">interface</span> <span class="hl-attribute">that</span> <span class="hl-attribute">the</span> <span class="hl-attribute">services</span> <span class="hl-attribute">obtained</span> <span class="hl-attribute">via</span> <span class="hl-attribute">the</span> <span class="hl-attribute">registry</span> <span class="hl-attribute">are</span> <span class="hl-attribute">required</span> <span class="hl-attribute">to</span> <span class="hl-attribute">support.</span>
+ <span class="hl-attribute">By</span> <span class="hl-attribute">convention</span> <span class="hl-attribute">this</span> <span class="hl-attribute">is</span> <span class="hl-attribute">a</span> <span class="hl-attribute">Java</span> <span class="hl-attribute">interface</span> <span class="hl-attribute">type,</span> <span class="hl-attribute">but</span> <span class="hl-attribute">may</span> <span class="hl-attribute">also</span> <span class="hl-attribute">be</span> <span class="hl-attribute">a</span> <span class="hl-attribute">(non-final)</span> <span class="hl-attribute">class</span> <span class="hl-attribute">type.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"><xsd:appinfo></span>
+ <span class="hl-attribute"><tool:annotation></span>
+ <span class="hl-attribute"><tool:expected-type</span> <span class="hl-attribute">type</span>=<span class="hl-value">"java.lang.Class"</span> />
+ <<span class="hl-tag">/tool:annotation</span>>
+ <<span class="hl-tag">/xsd:appinfo</span>>
+ <<span class="hl-tag">/xsd:annotation</span>>
+ <<span class="hl-tag">/xsd:attribute</span>>
+ <<span class="hl-tag">xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"filter"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:string"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Defines</span> <span class="hl-attribute">an</span> <span class="hl-attribute">OSGi</span> <span class="hl-attribute">filter</span> <span class="hl-attribute">expression</span> <span class="hl-attribute">that</span> <span class="hl-attribute">is</span> <span class="hl-attribute">used</span> <span class="hl-attribute">to</span> <span class="hl-attribute">constrain</span> <span class="hl-attribute">the</span> <span class="hl-attribute">set</span> <span class="hl-attribute">of</span> <span class="hl-attribute">matching</span> <span class="hl-attribute">services</span>
+ <span class="hl-attribute">in</span> <span class="hl-attribute">the</span> <span class="hl-attribute">service</span> <span class="hl-attribute">registry.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"depends-on"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:string"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Used</span> <span class="hl-attribute">to</span> <span class="hl-attribute">refer</span> <span class="hl-attribute">to</span> <span class="hl-attribute">the</span> <span class="hl-attribute">name</span> <span class="hl-attribute">of</span> <span class="hl-attribute">another</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">that</span> <span class="hl-attribute">this</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">depends</span> <span class="hl-attribute">on.</span> <span class="hl-attribute">Ensures</span> <span class="hl-attribute">that</span> <span class="hl-attribute">the</span>
+ <span class="hl-attribute">service</span> <span class="hl-attribute">registry</span> <span class="hl-attribute">look-up</span> <span class="hl-attribute">does</span> <span class="hl-attribute">not</span> <span class="hl-attribute">happen</span> <span class="hl-attribute">until</span> <span class="hl-attribute">after</span> <span class="hl-attribute">the</span> <span class="hl-attribute">dependent</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">has</span> <span class="hl-attribute">been</span> <span class="hl-attribute">created</span>
+ <span class="hl-attribute">(most</span> <span class="hl-attribute">commonly</span> <span class="hl-attribute">used</span> <span class="hl-attribute">to</span> <span class="hl-attribute">refer</span> <span class="hl-attribute">to</span> <span class="hl-attribute">a</span> <span class="hl-attribute">bundle</span> <span class="hl-attribute">bean).</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"bean-name"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:string"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Convenient</span> <span class="hl-attribute">shortcut</span> <span class="hl-attribute">for</span> <span class="hl-attribute">specifying</span> <span class="hl-attribute">a</span> <span class="hl-attribute">filter</span> <span class="hl-attribute">expression</span> <span class="hl-attribute">that</span> <span class="hl-attribute">matches</span> <span class="hl-attribute">on</span> <span class="hl-attribute">the</span> <span class="hl-attribute">bean-name</span> <span class="hl-attribute">property</span>
+ <span class="hl-attribute">that</span> <span class="hl-attribute">is</span> <span class="hl-attribute">automatically</span> <span class="hl-attribute">advertised</span> <span class="hl-attribute">for</span> <span class="hl-attribute">beans</span> <span class="hl-attribute">published</span> <span class="hl-attribute">using</span> <span class="hl-attribute">the</span> <span class="hl-attribute">service</span> <span class="hl-attribute">element.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"context-class-loader"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"TreferenceClassLoaderOptions"</span> <span class="hl-attribute">default</span>=<span class="hl-value">"client"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Defines</span> <span class="hl-attribute">how</span> <span class="hl-attribute">the</span> <span class="hl-attribute">context</span> <span class="hl-attribute">class</span> <span class="hl-attribute">loader</span> <span class="hl-attribute">is</span> <span class="hl-attribute">managed</span> <span class="hl-attribute">when</span> <span class="hl-attribute">invoking</span> <span class="hl-attribute">operations</span> <span class="hl-attribute">on</span> <span class="hl-attribute">a</span> <span class="hl-attribute">service</span>
+ <span class="hl-attribute">backing</span> <span class="hl-attribute">this</span> <span class="hl-attribute">service</span> <span class="hl-attribute">reference.</span> <span class="hl-attribute">The</span> <span class="hl-attribute">default</span> <span class="hl-attribute">value</span> <span class="hl-attribute">is</span> <span class="hl-attribute">'client'</span> <span class="hl-attribute">which</span> <span class="hl-attribute">means</span> <span class="hl-attribute">that</span> <span class="hl-attribute">the</span> <span class="hl-attribute">context</span>
+ <span class="hl-attribute">class</span> <span class="hl-attribute">loader</span> <span class="hl-attribute">has</span> <span class="hl-attribute">visibility</span> <span class="hl-attribute">of</span> <span class="hl-attribute">the</span> <span class="hl-attribute">resources</span> <span class="hl-attribute">on</span> <span class="hl-attribute">this</span> <span class="hl-attribute">bundle's</span> <span class="hl-attribute">classpath.</span> <span class="hl-attribute">Alternate</span>
+ <span class="hl-attribute">options</span> <span class="hl-attribute">are</span> <span class="hl-attribute">'service-provider'</span> <span class="hl-attribute">which</span> <span class="hl-attribute">means</span> <span class="hl-attribute">that</span> <span class="hl-attribute">the</span> <span class="hl-attribute">context</span> <span class="hl-attribute">class</span> <span class="hl-attribute">loader</span> <span class="hl-attribute">has</span> <span class="hl-attribute">visibility</span> <span class="hl-attribute">of</span>
+ <span class="hl-attribute">resources</span> <span class="hl-attribute">on</span> <span class="hl-attribute">the</span> <span class="hl-attribute">bundle</span> <span class="hl-attribute">classpath</span> <span class="hl-attribute">of</span> <span class="hl-attribute">the</span> <span class="hl-attribute">bundle</span> <span class="hl-attribute">that</span> <span class="hl-attribute">exported</span> <span class="hl-attribute">the</span> <span class="hl-attribute">service,</span> <span class="hl-attribute">and</span> <span class="hl-attribute">'unmanaged'</span>
+ <span class="hl-attribute">which</span> <span class="hl-attribute">does</span> <span class="hl-attribute">not</span> <span class="hl-attribute">do</span> <span class="hl-attribute">any</span> <span class="hl-attribute">management</span> <span class="hl-attribute">of</span> <span class="hl-attribute">the</span> <span class="hl-attribute">context</span> <span class="hl-attribute">class</span> <span class="hl-attribute">loader.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"></xsd:extension></span>
+ <span class="hl-attribute"></xsd:complexContent></span>
+ <span class="hl-attribute"></xsd:complexType></span>
+
+ <span class="hl-attribute"><xsd:simpleType</span> <span class="hl-attribute">name</span>=<span class="hl-value">"TreferenceClassLoaderOptions"</span>>
+ <<span class="hl-tag">xsd:restriction</span> <span class="hl-attribute">base</span>=<span class="hl-value">"xsd:NMTOKEN"</span>>
+ <<span class="hl-tag">xsd:enumeration</span> <span class="hl-attribute">value</span>=<span class="hl-value">"client"</span>/>
+ <<span class="hl-tag">xsd:enumeration</span> <span class="hl-attribute">value</span>=<span class="hl-value">"service-provider"</span>/>
+ <<span class="hl-tag">xsd:enumeration</span> <span class="hl-attribute">value</span>=<span class="hl-value">"unmanaged"</span>/>
+ <<span class="hl-tag">/xsd:restriction</span>>
+ <<span class="hl-tag">/xsd:simpleType</span>>
+
+ <<span class="hl-tag">xsd:complexType</span> <span class="hl-attribute">name</span>=<span class="hl-value">"Tlistener"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Defines</span> <span class="hl-attribute">a</span> <span class="hl-attribute">listener</span> <span class="hl-attribute">that</span> <span class="hl-attribute">will</span> <span class="hl-attribute">be</span> <span class="hl-attribute">notified</span> <span class="hl-attribute">when</span> <span class="hl-attribute">the</span> <span class="hl-attribute">service</span> <span class="hl-attribute">backing</span> <span class="hl-attribute">the</span> <span class="hl-attribute">enclosing</span> <span class="hl-attribute">service</span> <span class="hl-attribute">reference</span> <span class="hl-attribute">element</span> <span class="hl-attribute">is</span> <span class="hl-attribute">bound</span> <span class="hl-attribute">or</span>
+ <span class="hl-attribute">unbound.</span> <span class="hl-attribute">Use</span> <span class="hl-attribute">either</span> <span class="hl-attribute">the</span> <span class="hl-attribute">'ref'</span> <span class="hl-attribute">attribute</span> <span class="hl-attribute">or</span> <span class="hl-attribute">a</span> <span class="hl-attribute">nested</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">declaration</span> <span class="hl-attribute">for</span> <span class="hl-attribute">the</span> <span class="hl-attribute">listener</span> <span class="hl-attribute">bean.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"><xsd:sequence</span> <span class="hl-attribute">minOccurs</span>=<span class="hl-value">"0"</span> <span class="hl-attribute">maxOccurs</span>=<span class="hl-value">"1"</span>>
+ <<span class="hl-comment">!-- nested bean declaration --</span>>
+ <<span class="hl-tag">xsd:any</span> <span class="hl-attribute">namespace</span>=<span class="hl-value">"##other"</span> <span class="hl-attribute">minOccurs</span>=<span class="hl-value">"1"</span> <span class="hl-attribute">maxOccurs</span>=<span class="hl-value">"1"</span> <span class="hl-attribute">processContents</span>=<span class="hl-value">"skip"</span>/>
+ <<span class="hl-tag">/xsd:sequence</span>>
+
+ <<span class="hl-comment">!-- shortcut for bean references --</span>>
+ <<span class="hl-tag">xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"ref"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:string"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Refers</span> <span class="hl-attribute">by</span> <span class="hl-attribute">name</span> <span class="hl-attribute">to</span> <span class="hl-attribute">the</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">that</span> <span class="hl-attribute">will</span> <span class="hl-attribute">receive</span> <span class="hl-attribute">bind</span> <span class="hl-attribute">and</span> <span class="hl-attribute">unbind</span> <span class="hl-attribute">events</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"bind-method"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:token"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">The</span> <span class="hl-attribute">name</span> <span class="hl-attribute">of</span> <span class="hl-attribute">the</span> <span class="hl-attribute">method</span> <span class="hl-attribute">to</span> <span class="hl-attribute">be</span> <span class="hl-attribute">invoked</span> <span class="hl-attribute">when</span> <span class="hl-attribute">a</span> <span class="hl-attribute">backing</span> <span class="hl-attribute">service</span> <span class="hl-attribute">is</span> <span class="hl-attribute">bound.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"unbind-method"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:token"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">The</span> <span class="hl-attribute">name</span> <span class="hl-attribute">of</span> <span class="hl-attribute">the</span> <span class="hl-attribute">method</span> <span class="hl-attribute">to</span> <span class="hl-attribute">be</span> <span class="hl-attribute">invoked</span> <span class="hl-attribute">when</span> <span class="hl-attribute">a</span> <span class="hl-attribute">backing</span> <span class="hl-attribute">service</span> <span class="hl-attribute">is</span> <span class="hl-attribute">unbound.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"></xsd:complexType></span>
+
+ <span class="hl-attribute"><!--</span> <span class="hl-attribute">single</span> <span class="hl-attribute">reference</span> <span class="hl-attribute">--></span>
+ <span class="hl-attribute"><xsd:complexType</span> <span class="hl-attribute">name</span>=<span class="hl-value">"TsingleReference"</span>>
+ <<span class="hl-tag">xsd:complexContent</span>>
+ <<span class="hl-tag">xsd:extension</span> <span class="hl-attribute">base</span>=<span class="hl-value">"Treference"</span>>
+ <<span class="hl-tag">xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"availability"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"TavailabilityOptions"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Defines</span> <span class="hl-attribute">the</span> <span class="hl-attribute">required</span> <span class="hl-attribute">availability</span> <span class="hl-attribute">of</span> <span class="hl-attribute">the</span> <span class="hl-attribute">backing</span> <span class="hl-attribute">service.</span> <span class="hl-attribute">If</span> <span class="hl-attribute">not</span> <span class="hl-attribute">specified,</span>
+ <span class="hl-attribute">the</span> <span class="hl-attribute">default-availability</span> <span class="hl-attribute">attribute</span> <span class="hl-attribute">will</span> <span class="hl-attribute">apply.</span> <span class="hl-attribute">'mandatory'</span> <span class="hl-attribute">means</span> <span class="hl-attribute">that</span> <span class="hl-attribute">a</span> <span class="hl-attribute">backing</span> <span class="hl-attribute">service</span>
+ <span class="hl-attribute">must</span> <span class="hl-attribute">exist,</span> <span class="hl-attribute">'optional'</span> <span class="hl-attribute">indicates</span> <span class="hl-attribute">that</span> <span class="hl-attribute">it</span> <span class="hl-attribute">is</span> <span class="hl-attribute">acceptable</span> <span class="hl-attribute">to</span> <span class="hl-attribute">have</span> <span class="hl-attribute">no</span> <span class="hl-attribute">backing</span> <span class="hl-attribute">service.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"cardinality"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"TsingleReferenceCardinality"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">As</span> <span class="hl-attribute">of</span> <span class="hl-attribute">Gemini</span> <span class="hl-attribute">Blueprint,</span> <span class="hl-attribute">'cardinality'</span> <span class="hl-attribute">has</span> <span class="hl-attribute">been</span> <span class="hl-attribute">replaced</span> <span class="hl-attribute">by</span> <span class="hl-attribute">the</span> <span class="hl-attribute">'availability'</span> <span class="hl-attribute">attribute.</span>
+
+ <span class="hl-attribute">Defines</span> <span class="hl-attribute">the</span> <span class="hl-attribute">required</span> <span class="hl-attribute">cardinality</span> <span class="hl-attribute">of</span> <span class="hl-attribute">the</span> <span class="hl-attribute">relationship</span> <span class="hl-attribute">to</span> <span class="hl-attribute">the</span> <span class="hl-attribute">backing</span> <span class="hl-attribute">service.</span> <span class="hl-attribute">If</span> <span class="hl-attribute">not</span> <span class="hl-attribute">specified,</span>
+ <span class="hl-attribute">the</span> <span class="hl-attribute">default-cardinality</span> <span class="hl-attribute">attribute</span> <span class="hl-attribute">will</span> <span class="hl-attribute">apply.</span> <span class="hl-attribute">A</span> <span class="hl-attribute">value</span> <span class="hl-attribute">of</span> <span class="hl-attribute">'1..1'</span> <span class="hl-attribute">means</span> <span class="hl-attribute">that</span> <span class="hl-attribute">a</span> <span class="hl-attribute">backing</span> <span class="hl-attribute">service</span>
+ <span class="hl-attribute">must</span> <span class="hl-attribute">exist</span> <span class="hl-attribute">(this</span> <span class="hl-attribute">is</span> <span class="hl-attribute">a</span> <span class="hl-attribute">mandatory</span> <span class="hl-attribute">service</span> <span class="hl-attribute">reference).</span> <span class="hl-attribute">A</span> <span class="hl-attribute">value</span> <span class="hl-attribute">of</span> <span class="hl-attribute">'0..1'</span> <span class="hl-attribute">indicates</span> <span class="hl-attribute">that</span> <span class="hl-attribute">it</span> <span class="hl-attribute">is</span>
+ <span class="hl-attribute">acceptable</span> <span class="hl-attribute">to</span> <span class="hl-attribute">be</span> <span class="hl-attribute">no</span> <span class="hl-attribute">backing</span> <span class="hl-attribute">service</span> <span class="hl-attribute">(an</span> <span class="hl-attribute">optional</span> <span class="hl-attribute">service</span> <span class="hl-attribute">reference).</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"timeout"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:nonNegativeInteger"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">For</span> <span class="hl-attribute">a</span> <span class="hl-attribute">'reference'</span> <span class="hl-attribute">element,</span> <span class="hl-attribute">the</span> <span class="hl-attribute">amount</span> <span class="hl-attribute">of</span> <span class="hl-attribute">time</span> <span class="hl-attribute">(in</span> <span class="hl-attribute">milliseconds)</span> <span class="hl-attribute">to</span> <span class="hl-attribute">wait</span> <span class="hl-attribute">for</span> <span class="hl-attribute">a</span> <span class="hl-attribute">backing</span> <span class="hl-attribute">service</span> <span class="hl-attribute">to</span> <span class="hl-attribute">be</span>
+ <span class="hl-attribute">available</span> <span class="hl-attribute">when</span> <span class="hl-attribute">an</span> <span class="hl-attribute">operation</span> <span class="hl-attribute">is</span> <span class="hl-attribute">invoked.</span> <span class="hl-attribute">If</span> <span class="hl-attribute">not</span> <span class="hl-attribute">specified,</span> <span class="hl-attribute">the</span> <span class="hl-attribute">default-timeout</span> <span class="hl-attribute">attribute</span> <span class="hl-attribute">will</span> <span class="hl-attribute">apply.</span>
+ <span class="hl-attribute">See</span> <span class="hl-attribute">also</span> <span class="hl-attribute">the</span> <span class="hl-attribute">default-timeout</span> <span class="hl-attribute">attribute</span> <span class="hl-attribute">of</span> <span class="hl-attribute">the</span> <span class="hl-attribute">osgi</span> <span class="hl-attribute">element.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"sticky"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:boolean"</span> <span class="hl-attribute">default</span>=<span class="hl-value">"true"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Defines</span> <span class="hl-attribute">whether</span> <span class="hl-attribute">the</span> <span class="hl-attribute">backing</span> <span class="hl-attribute">service</span> <span class="hl-attribute">should</span> <span class="hl-attribute">be</span> <span class="hl-attribute">changed</span> <span class="hl-attribute">if</span> <span class="hl-attribute">a</span> <span class="hl-attribute">'better'</span> <span class="hl-attribute">OSGi</span> <span class="hl-attribute">service</span> <span class="hl-attribute">becomes</span>
+ <span class="hl-attribute">available.</span> <span class="hl-attribute">If</span> <span class="hl-attribute">'true',</span> <span class="hl-attribute">the</span> <span class="hl-attribute">proxy</span> <span class="hl-attribute">will</span> <span class="hl-attribute">rebind</span> <span class="hl-attribute">only</span> <span class="hl-attribute">if</span> <span class="hl-attribute">the</span> <span class="hl-attribute">backing</span> <span class="hl-attribute">service</span> <span class="hl-attribute">is</span> <span class="hl-attribute">no</span> <span class="hl-attribute">longer</span> <span class="hl-attribute">available.</span>
+ <span class="hl-attribute">If</span> <span class="hl-attribute">'false',</span> <span class="hl-attribute">the</span> <span class="hl-attribute">rebind</span> <span class="hl-attribute">will</span> <span class="hl-attribute">occur</span> <span class="hl-attribute">every</span> <span class="hl-attribute">time</span> <span class="hl-attribute">a</span> <span class="hl-attribute">'better'</span> <span class="hl-attribute">candidate</span> <span class="hl-attribute">appears.</span> <span class="hl-attribute">A</span> <span class="hl-attribute">better</span> <span class="hl-attribute">service</span> <span class="hl-attribute">is</span>
+ <span class="hl-attribute">defined</span> <span class="hl-attribute">by</span> <span class="hl-attribute">having</span> <span class="hl-attribute">either</span> <span class="hl-attribute">a</span> <span class="hl-attribute">higher</span> <span class="hl-attribute">ranking</span> <span class="hl-attribute">or</span> <span class="hl-attribute">the</span> <span class="hl-attribute">same</span> <span class="hl-attribute">ranking</span> <span class="hl-attribute">and</span> <span class="hl-attribute">a</span> <span class="hl-attribute">lower</span> <span class="hl-attribute">service</span> <span class="hl-attribute">id.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"></xsd:extension></span>
+ <span class="hl-attribute"></xsd:complexContent></span>
+ <span class="hl-attribute"></xsd:complexType></span>
+
+ <span class="hl-attribute"><xsd:simpleType</span> <span class="hl-attribute">name</span>=<span class="hl-value">"TsingleReferenceCardinality"</span>>
+ <<span class="hl-tag">xsd:restriction</span> <span class="hl-attribute">base</span>=<span class="hl-value">"xsd:NMTOKEN"</span>>
+ <<span class="hl-tag">xsd:enumeration</span> <span class="hl-attribute">value</span>=<span class="hl-value">"1..1"</span>/>
+ <<span class="hl-tag">xsd:enumeration</span> <span class="hl-attribute">value</span>=<span class="hl-value">"0..1"</span>/>
+ <<span class="hl-tag">/xsd:restriction</span>>
+ <<span class="hl-tag">/xsd:simpleType</span>>
+
+ <<span class="hl-comment">!-- reference collections (set, list) --</span>>
+ <<span class="hl-tag">xsd:element</span> <span class="hl-attribute">name</span>=<span class="hl-value">"list"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"TreferenceCollection"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span> <span class="hl-attribute">source</span>=<span class="hl-value">"java:org.eclipse.gemini.blueprint.service.importer.support.OsgiServiceCollectionProxyFactoryBean"</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Defines</span> <span class="hl-attribute">a</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">of</span> <span class="hl-attribute">type</span> <span class="hl-attribute">'List'</span> <span class="hl-attribute">that</span> <span class="hl-attribute">contains</span> <span class="hl-attribute">all</span> <span class="hl-attribute">of</span> <span class="hl-attribute">the</span> <span class="hl-attribute">services</span> <span class="hl-attribute">matching</span> <span class="hl-attribute">the</span> <span class="hl-attribute">given</span> <span class="hl-attribute">criteria.</span>
+ <span class="hl-attribute">The</span> <span class="hl-attribute">list</span> <span class="hl-attribute">members</span> <span class="hl-attribute">are</span> <span class="hl-attribute">managed</span> <span class="hl-attribute">dynamically</span> <span class="hl-attribute">as</span> <span class="hl-attribute">matching</span> <span class="hl-attribute">backing</span> <span class="hl-attribute">services</span> <span class="hl-attribute">come</span> <span class="hl-attribute">and</span> <span class="hl-attribute">go.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"><xsd:appinfo></span>
+ <span class="hl-attribute"><tool:annotation></span>
+ <span class="hl-attribute"><tool:exports</span> <span class="hl-attribute">type</span>=<span class="hl-value">"java.util.List"</span>/>
+ <<span class="hl-tag">/tool:annotation</span>>
+ <<span class="hl-tag">/xsd:appinfo</span>>
+ <<span class="hl-tag">/xsd:annotation</span>>
+ <<span class="hl-tag">/xsd:element</span>>
+
+ <<span class="hl-tag">xsd:element</span> <span class="hl-attribute">name</span>=<span class="hl-value">"set"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"TreferenceCollection"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span> <span class="hl-attribute">source</span>=<span class="hl-value">"java:org.eclipse.gemini.blueprint.service.importer.support.OsgiServiceCollectionProxyFactoryBean"</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Defines</span> <span class="hl-attribute">a</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">of</span> <span class="hl-attribute">type</span> <span class="hl-attribute">'Set'</span> <span class="hl-attribute">that</span> <span class="hl-attribute">contains</span> <span class="hl-attribute">all</span> <span class="hl-attribute">of</span> <span class="hl-attribute">the</span> <span class="hl-attribute">services</span> <span class="hl-attribute">matching</span> <span class="hl-attribute">the</span> <span class="hl-attribute">given</span> <span class="hl-attribute">criteria.</span>
+ <span class="hl-attribute">The</span> <span class="hl-attribute">set</span> <span class="hl-attribute">members</span> <span class="hl-attribute">are</span> <span class="hl-attribute">managed</span> <span class="hl-attribute">dynamically</span> <span class="hl-attribute">as</span> <span class="hl-attribute">matching</span> <span class="hl-attribute">backing</span> <span class="hl-attribute">services</span> <span class="hl-attribute">come</span> <span class="hl-attribute">and</span> <span class="hl-attribute">go.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"><xsd:appinfo></span>
+ <span class="hl-attribute"><tool:annotation></span>
+ <span class="hl-attribute"><tool:exports</span> <span class="hl-attribute">type</span>=<span class="hl-value">"java.util.Set"</span>/>
+ <<span class="hl-tag">/tool:annotation</span>>
+ <<span class="hl-tag">/xsd:appinfo</span>>
+ <<span class="hl-tag">/xsd:annotation</span>>
+ <<span class="hl-tag">/xsd:element</span>>
+
+ <<span class="hl-tag">xsd:complexType</span> <span class="hl-attribute">name</span>=<span class="hl-value">"TreferenceCollection"</span>>
+ <<span class="hl-tag">xsd:complexContent</span>>
+ <<span class="hl-tag">xsd:extension</span> <span class="hl-attribute">base</span>=<span class="hl-value">"Treference"</span>>
+ <<span class="hl-tag">xsd:sequence</span> <span class="hl-attribute">minOccurs</span>=<span class="hl-value">"0"</span> <span class="hl-attribute">maxOccurs</span>=<span class="hl-value">"1"</span>>
+ <<span class="hl-tag">xsd:element</span> <span class="hl-attribute">name</span>=<span class="hl-value">"comparator"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"Tcomparator"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span> <span class="hl-attribute">source</span>=<span class="hl-value">"java:java.util.Comparator"</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Used</span> <span class="hl-attribute">to</span> <span class="hl-attribute">define</span> <span class="hl-attribute">an</span> <span class="hl-attribute">inline</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">of</span> <span class="hl-attribute">type</span> <span class="hl-attribute">Comparator</span> <span class="hl-attribute">that</span> <span class="hl-attribute">will</span> <span class="hl-attribute">be</span> <span class="hl-attribute">used</span> <span class="hl-attribute">to</span> <span class="hl-attribute">sort</span> <span class="hl-attribute">the</span> <span class="hl-attribute">matching</span> <span class="hl-attribute">services.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"><xsd:appinfo></span>
+ <span class="hl-attribute"><tool:annotation></span>
+ <span class="hl-attribute"><tool:expected-type</span> <span class="hl-attribute">type</span>=<span class="hl-value">"java.util.Comparator"</span> />
+ <<span class="hl-tag">/tool:annotation</span>>
+ <<span class="hl-tag">/xsd:appinfo</span>>
+ <<span class="hl-tag">/xsd:annotation</span>>
+ <<span class="hl-tag">/xsd:element</span>>
+ <<span class="hl-tag">/xsd:sequence</span>>
+ <<span class="hl-tag">xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"comparator-ref"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:string"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Used</span> <span class="hl-attribute">to</span> <span class="hl-attribute">refer</span> <span class="hl-attribute">to</span> <span class="hl-attribute">a</span> <span class="hl-attribute">named</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">implementing</span> <span class="hl-attribute">the</span> <span class="hl-attribute">Comparator</span> <span class="hl-attribute">interface</span> <span class="hl-attribute">that</span> <span class="hl-attribute">will</span> <span class="hl-attribute">be</span> <span class="hl-attribute">used</span> <span class="hl-attribute">to</span>
+ <span class="hl-attribute">sort</span> <span class="hl-attribute">the</span> <span class="hl-attribute">matching</span> <span class="hl-attribute">services.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"availability"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"TavailabilityOptions"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Defines</span> <span class="hl-attribute">the</span> <span class="hl-attribute">required</span> <span class="hl-attribute">availability</span> <span class="hl-attribute">of</span> <span class="hl-attribute">the</span> <span class="hl-attribute">backing</span> <span class="hl-attribute">service.</span> <span class="hl-attribute">If</span> <span class="hl-attribute">not</span> <span class="hl-attribute">specified,</span>
+ <span class="hl-attribute">the</span> <span class="hl-attribute">default-availability</span> <span class="hl-attribute">attribute</span> <span class="hl-attribute">will</span> <span class="hl-attribute">apply.</span> <span class="hl-attribute">'mandatory'</span> <span class="hl-attribute">means</span> <span class="hl-attribute">that</span> <span class="hl-attribute">a</span> <span class="hl-attribute">backing</span> <span class="hl-attribute">service</span>
+ <span class="hl-attribute">must</span> <span class="hl-attribute">exist,</span> <span class="hl-attribute">'optional'</span> <span class="hl-attribute">indicates</span> <span class="hl-attribute">that</span> <span class="hl-attribute">it</span> <span class="hl-attribute">is</span> <span class="hl-attribute">acceptable</span> <span class="hl-attribute">to</span> <span class="hl-attribute">have</span> <span class="hl-attribute">no</span> <span class="hl-attribute">backing</span> <span class="hl-attribute">service.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"cardinality"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"TcollectionCardinality"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">As</span> <span class="hl-attribute">of</span> <span class="hl-attribute">Gemini</span> <span class="hl-attribute">Blueprint,</span> <span class="hl-attribute">'cardinality'</span> <span class="hl-attribute">has</span> <span class="hl-attribute">been</span> <span class="hl-attribute">replaced</span> <span class="hl-attribute">by</span> <span class="hl-attribute">the</span> <span class="hl-attribute">'availability'</span> <span class="hl-attribute">attribute.</span>
+
+ <span class="hl-attribute">Defines</span> <span class="hl-attribute">the</span> <span class="hl-attribute">required</span> <span class="hl-attribute">cardinality</span> <span class="hl-attribute">of</span> <span class="hl-attribute">the</span> <span class="hl-attribute">relationship</span> <span class="hl-attribute">to</span> <span class="hl-attribute">the</span> <span class="hl-attribute">backing</span> <span class="hl-attribute">services.</span> <span class="hl-attribute">If</span> <span class="hl-attribute">not</span> <span class="hl-attribute">specified,</span>
+ <span class="hl-attribute">the</span> <span class="hl-attribute">default-cardinality</span> <span class="hl-attribute">attribute</span> <span class="hl-attribute">will</span> <span class="hl-attribute">apply.</span> <span class="hl-attribute">A</span> <span class="hl-attribute">value</span> <span class="hl-attribute">of</span> <span class="hl-attribute">'1..N'</span> <span class="hl-attribute">means</span> <span class="hl-attribute">that</span> <span class="hl-attribute">at</span> <span class="hl-attribute">least</span> <span class="hl-attribute">one</span> <span class="hl-attribute">backing</span>
+ <span class="hl-attribute">service</span> <span class="hl-attribute">must</span> <span class="hl-attribute">exist</span> <span class="hl-attribute">(this</span> <span class="hl-attribute">is</span> <span class="hl-attribute">a</span> <span class="hl-attribute">mandatory</span> <span class="hl-attribute">service</span> <span class="hl-attribute">reference.</span> <span class="hl-attribute">A</span> <span class="hl-attribute">value</span> <span class="hl-attribute">of</span> <span class="hl-attribute">'0..N'</span> <span class="hl-attribute">indicates</span> <span class="hl-attribute">that</span> <span class="hl-attribute">it</span>
+ <span class="hl-attribute">is</span> <span class="hl-attribute">acceptable</span> <span class="hl-attribute">for</span> <span class="hl-attribute">there</span> <span class="hl-attribute">to</span> <span class="hl-attribute">be</span> <span class="hl-attribute">no</span> <span class="hl-attribute">backing</span> <span class="hl-attribute">service</span> <span class="hl-attribute">(an</span> <span class="hl-attribute">optional</span> <span class="hl-attribute">service</span> <span class="hl-attribute">reference).</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"greedy-proxying"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:boolean"</span> <span class="hl-attribute">default</span>=<span class="hl-value">"false"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Indicates</span> <span class="hl-attribute">whether</span> <span class="hl-attribute">the</span> <span class="hl-attribute">proxies</span> <span class="hl-attribute">created</span> <span class="hl-attribute">for</span> <span class="hl-attribute">the</span> <span class="hl-attribute">imported</span> <span class="hl-attribute">OSGi</span> <span class="hl-attribute">services</span> <span class="hl-attribute">will</span> <span class="hl-attribute">be</span> <span class="hl-attribute">generated</span> <span class="hl-attribute">using</span>
+ <span class="hl-attribute">just</span> <span class="hl-attribute">the</span> <span class="hl-attribute">classes</span> <span class="hl-attribute">specified</span> <span class="hl-attribute">(false)</span> <span class="hl-attribute">or</span> <span class="hl-attribute">all</span> <span class="hl-attribute">the</span> <span class="hl-attribute">classes</span> <span class="hl-attribute">exported</span> <span class="hl-attribute">by</span> <span class="hl-attribute">the</span> <span class="hl-attribute">service</span> <span class="hl-attribute">and</span> <span class="hl-attribute">visible</span> <span class="hl-attribute">to</span>
+ <span class="hl-attribute">the</span> <span class="hl-attribute">importing</span> <span class="hl-attribute">bundle</span> <span class="hl-attribute">(true).</span> <span class="hl-attribute">The</span> <span class="hl-attribute">default</span> <span class="hl-attribute">value</span> <span class="hl-attribute">is</span> <span class="hl-attribute">false.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"member-type"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"TmemberType"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span> <span class="hl-attribute">default</span>=<span class="hl-value">"service-object"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>>
+ <<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Indicates</span> <span class="hl-attribute">the</span> <span class="hl-attribute">type</span> <span class="hl-attribute">of</span> <span class="hl-attribute">object</span> <span class="hl-attribute">that</span> <span class="hl-attribute">will</span> <span class="hl-attribute">be</span> <span class="hl-attribute">placed</span> <span class="hl-attribute">within</span> <span class="hl-attribute">the</span> <span class="hl-attribute">reference</span> <span class="hl-attribute">collection.</span>
+ <span class="hl-attribute">'service-object'</span> <span class="hl-attribute">indicates</span> <span class="hl-attribute">the</span> <span class="hl-attribute">collection</span> <span class="hl-attribute">contains</span> <span class="hl-attribute">service</span> <span class="hl-attribute">proxies</span> <span class="hl-attribute">for</span> <span class="hl-attribute">imported</span> <span class="hl-attribute">services.</span>
+ <span class="hl-attribute">'service-reference'</span> <span class="hl-attribute">indicates</span> <span class="hl-attribute">the</span> <span class="hl-attribute">collection</span> <span class="hl-attribute">contains</span> <span class="hl-attribute">ServiceReference</span> <span class="hl-attribute">objects</span> <span class="hl-attribute">matching</span> <span class="hl-attribute">the</span>
+ <span class="hl-attribute">target</span> <span class="hl-attribute">service</span> <span class="hl-attribute">type.</span>
+ <span class="hl-attribute">]]></span>
+ <span class="hl-attribute"></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"></xsd:extension></span>
+ <span class="hl-attribute"></xsd:complexContent></span>
+ <span class="hl-attribute"></xsd:complexType></span>
+
+ <span class="hl-attribute"><xsd:complexType</span> <span class="hl-attribute">name</span>=<span class="hl-value">"Tcomparator"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span> <span class="hl-attribute">source</span>=<span class="hl-value">"java:java.util.Comparator"</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Used</span> <span class="hl-attribute">to</span> <span class="hl-attribute">define</span> <span class="hl-attribute">an</span> <span class="hl-attribute">inline</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">of</span> <span class="hl-attribute">type</span> <span class="hl-attribute">Comparator</span> <span class="hl-attribute">that</span> <span class="hl-attribute">will</span> <span class="hl-attribute">be</span> <span class="hl-attribute">used</span> <span class="hl-attribute">to</span> <span class="hl-attribute">sort</span> <span class="hl-attribute">the</span> <span class="hl-attribute">matching</span> <span class="hl-attribute">services.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"><xsd:appinfo></span>
+ <span class="hl-attribute"><tool:annotation></span>
+ <span class="hl-attribute"><tool:exports</span> <span class="hl-attribute">type</span>=<span class="hl-value">"java.util.Comparator"</span> />
+ <<span class="hl-tag">/tool:annotation</span>>
+ <<span class="hl-tag">/xsd:appinfo</span>>
+ <<span class="hl-tag">/xsd:annotation</span>>
+ <<span class="hl-tag">xsd:choice</span>>
+ <<span class="hl-tag">xsd:element</span> <span class="hl-attribute">name</span>=<span class="hl-value">"natural"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"TnaturalOrdering"</span>/>
+ <<span class="hl-tag">xsd:sequence</span> <span class="hl-attribute">minOccurs</span>=<span class="hl-value">"1"</span> <span class="hl-attribute">maxOccurs</span>=<span class="hl-value">"1"</span>>
+ <<span class="hl-comment">!-- nested bean declaration --</span>>
+ <<span class="hl-tag">xsd:any</span> <span class="hl-attribute">namespace</span>=<span class="hl-value">"##other"</span> <span class="hl-attribute">minOccurs</span>=<span class="hl-value">"1"</span> <span class="hl-attribute">maxOccurs</span>=<span class="hl-value">"1"</span> <span class="hl-attribute">processContents</span>=<span class="hl-value">"skip"</span>/>
+ <<span class="hl-tag">/xsd:sequence</span>>
+ <<span class="hl-tag">/xsd:choice</span>>
+ <<span class="hl-tag">/xsd:complexType</span>>
+
+ <<span class="hl-tag">xsd:complexType</span> <span class="hl-attribute">name</span>=<span class="hl-value">"TnaturalOrdering"</span>>
+ <<span class="hl-tag">xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"basis"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"TorderingBasis"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"required"</span>/>
+ <<span class="hl-tag">/xsd:complexType</span>>
+
+ <<span class="hl-tag">xsd:simpleType</span> <span class="hl-attribute">name</span>=<span class="hl-value">"TorderingBasis"</span>>
+ <<span class="hl-tag">xsd:restriction</span> <span class="hl-attribute">base</span>=<span class="hl-value">"xsd:NMTOKEN"</span>>
+ <<span class="hl-tag">xsd:enumeration</span> <span class="hl-attribute">value</span>=<span class="hl-value">"service"</span>/>
+ <<span class="hl-tag">xsd:enumeration</span> <span class="hl-attribute">value</span>=<span class="hl-value">"service-reference"</span>/>
+ <<span class="hl-tag">/xsd:restriction</span>>
+ <<span class="hl-tag">/xsd:simpleType</span>>
+
+ <<span class="hl-tag">xsd:simpleType</span> <span class="hl-attribute">name</span>=<span class="hl-value">"TmemberType"</span>>
+ <<span class="hl-tag">xsd:restriction</span> <span class="hl-attribute">base</span>=<span class="hl-value">"xsd:NMTOKEN"</span>>
+ <<span class="hl-tag">xsd:enumeration</span> <span class="hl-attribute">value</span>=<span class="hl-value">"service-object"</span> />
+ <<span class="hl-tag">xsd:enumeration</span> <span class="hl-attribute">value</span>=<span class="hl-value">"service-reference"</span> />
+ <<span class="hl-tag">/xsd:restriction</span>>
+ <<span class="hl-tag">/xsd:simpleType</span>>
+
+ <<span class="hl-tag">xsd:simpleType</span> <span class="hl-attribute">name</span>=<span class="hl-value">"TcollectionCardinality"</span>>
+ <<span class="hl-tag">xsd:restriction</span> <span class="hl-attribute">base</span>=<span class="hl-value">"xsd:NMTOKEN"</span>>
+ <<span class="hl-tag">xsd:enumeration</span> <span class="hl-attribute">value</span>=<span class="hl-value">"1..N"</span>/>
+ <<span class="hl-tag">xsd:enumeration</span> <span class="hl-attribute">value</span>=<span class="hl-value">"0..N"</span>/>
+ <<span class="hl-tag">/xsd:restriction</span>>
+ <<span class="hl-tag">/xsd:simpleType</span>>
+
+ <<span class="hl-comment">!-- service --</span>>
+
+ <<span class="hl-tag">xsd:element</span> <span class="hl-attribute">name</span>=<span class="hl-value">"service"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"Tservice"</span>/>
+
+ <<span class="hl-tag">xsd:complexType</span> <span class="hl-attribute">name</span>=<span class="hl-value">"TbaseService"</span>>
+ <<span class="hl-tag">xsd:complexContent</span>>
+ <<span class="hl-tag">xsd:extension</span> <span class="hl-attribute">base</span>=<span class="hl-value">"beans:identifiedType"</span>>
+ <<span class="hl-tag">xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"interface"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:token"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Defines</span> <span class="hl-attribute">the</span> <span class="hl-attribute">interface</span> <span class="hl-attribute">to</span> <span class="hl-attribute">advertise</span> <span class="hl-attribute">for</span> <span class="hl-attribute">this</span> <span class="hl-attribute">service</span> <span class="hl-attribute">in</span> <span class="hl-attribute">the</span> <span class="hl-attribute">service</span> <span class="hl-attribute">registry.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"><xsd:appinfo></span>
+ <span class="hl-attribute"><tool:annotation></span>
+ <span class="hl-attribute"><tool:expected-type</span> <span class="hl-attribute">type</span>=<span class="hl-value">"java.lang.Class"</span> />
+ <<span class="hl-tag">/tool:annotation</span>>
+ <<span class="hl-tag">/xsd:appinfo</span>>
+ <<span class="hl-tag">/xsd:annotation</span>>
+ <<span class="hl-tag">/xsd:attribute</span>>
+ <<span class="hl-tag">xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"depends-on"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:string"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Used</span> <span class="hl-attribute">to</span> <span class="hl-attribute">ensure</span> <span class="hl-attribute">that</span> <span class="hl-attribute">the</span> <span class="hl-attribute">service</span> <span class="hl-attribute">is</span> <span class="hl-attribute">not</span> <span class="hl-attribute">exported</span> <span class="hl-attribute">to</span> <span class="hl-attribute">the</span> <span class="hl-attribute">registry</span> <span class="hl-attribute">before</span> <span class="hl-attribute">the</span> <span class="hl-attribute">named</span> <span class="hl-attribute">bean</span>
+ <span class="hl-attribute">has</span> <span class="hl-attribute">been</span> <span class="hl-attribute">created.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"context-class-loader"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"TserviceClassLoaderOptions"</span> <span class="hl-attribute">default</span>=<span class="hl-value">"unmanaged"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Defines</span> <span class="hl-attribute">how</span> <span class="hl-attribute">the</span> <span class="hl-attribute">context</span> <span class="hl-attribute">class</span> <span class="hl-attribute">loader</span> <span class="hl-attribute">will</span> <span class="hl-attribute">be</span> <span class="hl-attribute">managed</span> <span class="hl-attribute">when</span> <span class="hl-attribute">an</span> <span class="hl-attribute">operation</span> <span class="hl-attribute">is</span> <span class="hl-attribute">invoked</span> <span class="hl-attribute">on</span> <span class="hl-attribute">the</span>
+ <span class="hl-attribute">exported</span> <span class="hl-attribute">service.</span> <span class="hl-attribute">The</span> <span class="hl-attribute">default</span> <span class="hl-attribute">value</span> <span class="hl-attribute">is</span> <span class="hl-attribute">'unmanaged'</span> <span class="hl-attribute">which</span> <span class="hl-attribute">means</span> <span class="hl-attribute">that</span> <span class="hl-attribute">no</span> <span class="hl-attribute">management</span> <span class="hl-attribute">of</span>
+ <span class="hl-attribute">the</span> <span class="hl-attribute">context</span> <span class="hl-attribute">class</span> <span class="hl-attribute">loader</span> <span class="hl-attribute">is</span> <span class="hl-attribute">attempted.</span> <span class="hl-attribute">A</span> <span class="hl-attribute">value</span> <span class="hl-attribute">of</span> <span class="hl-attribute">'service-provider'</span> <span class="hl-attribute">guarantees</span> <span class="hl-attribute">that</span>
+ <span class="hl-attribute">the</span> <span class="hl-attribute">context</span> <span class="hl-attribute">class</span> <span class="hl-attribute">loader</span> <span class="hl-attribute">will</span> <span class="hl-attribute">have</span> <span class="hl-attribute">visibility</span> <span class="hl-attribute">of</span> <span class="hl-attribute">all</span> <span class="hl-attribute">the</span> <span class="hl-attribute">resources</span> <span class="hl-attribute">on</span> <span class="hl-attribute">the</span> <span class="hl-attribute">class</span> <span class="hl-attribute">path</span> <span class="hl-attribute">of</span>
+ <span class="hl-attribute">bundle</span> <span class="hl-attribute">exporting</span> <span class="hl-attribute">the</span> <span class="hl-attribute">service.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"auto-export"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"TautoExportModes"</span> <span class="hl-attribute">default</span>=<span class="hl-value">"disabled"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Enables</span> <span class="hl-attribute">Spring</span> <span class="hl-attribute">to</span> <span class="hl-attribute">automatically</span> <span class="hl-attribute">manage</span> <span class="hl-attribute">the</span> <span class="hl-attribute">set</span> <span class="hl-attribute">of</span> <span class="hl-attribute">service</span> <span class="hl-attribute">interfaces</span> <span class="hl-attribute">advertised</span> <span class="hl-attribute">for</span> <span class="hl-attribute">the</span>
+ <span class="hl-attribute">service.</span> <span class="hl-attribute">By</span> <span class="hl-attribute">default</span> <span class="hl-attribute">this</span> <span class="hl-attribute">facility</span> <span class="hl-attribute">is</span> <span class="hl-attribute">disabled.</span> <span class="hl-attribute">A</span> <span class="hl-attribute">value</span> <span class="hl-attribute">of</span> <span class="hl-attribute">'interfaces'</span> <span class="hl-attribute">advertises</span> <span class="hl-attribute">all</span>
+ <span class="hl-attribute">of</span> <span class="hl-attribute">the</span> <span class="hl-attribute">Java</span> <span class="hl-attribute">interfaces</span> <span class="hl-attribute">supported</span> <span class="hl-attribute">by</span> <span class="hl-attribute">the</span> <span class="hl-attribute">exported</span> <span class="hl-attribute">service.</span> <span class="hl-attribute">A</span> <span class="hl-attribute">value</span> <span class="hl-attribute">of</span> <span class="hl-attribute">'class-hierarchy'</span>
+ <span class="hl-attribute">advertises</span> <span class="hl-attribute">all</span> <span class="hl-attribute">the</span> <span class="hl-attribute">Java</span> <span class="hl-attribute">classes</span> <span class="hl-attribute">in</span> <span class="hl-attribute">the</span> <span class="hl-attribute">hierarchy</span> <span class="hl-attribute">of</span> <span class="hl-attribute">the</span> <span class="hl-attribute">exported</span> <span class="hl-attribute">service.</span> <span class="hl-attribute">A</span> <span class="hl-attribute">value</span> <span class="hl-attribute">of</span>
+ <span class="hl-attribute">'all-classes'</span> <span class="hl-attribute">advertises</span> <span class="hl-attribute">all</span> <span class="hl-attribute">Java</span> <span class="hl-attribute">interfaces</span> <span class="hl-attribute">and</span> <span class="hl-attribute">classes.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"></xsd:extension></span>
+ <span class="hl-attribute"></xsd:complexContent></span>
+ <span class="hl-attribute"></xsd:complexType></span>
+
+ <span class="hl-attribute"><xsd:complexType</span> <span class="hl-attribute">name</span>=<span class="hl-value">"Tservice"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span> <span class="hl-attribute">source</span>=<span class="hl-value">"java:org.eclipse.gemini.blueprint.service.exporter.support.OsgiServiceFactoryBean"</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Exports</span> <span class="hl-attribute">the</span> <span class="hl-attribute">reference</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">as</span> <span class="hl-attribute">a</span> <span class="hl-attribute">service</span> <span class="hl-attribute">in</span> <span class="hl-attribute">the</span> <span class="hl-attribute">OSGi</span> <span class="hl-attribute">service</span> <span class="hl-attribute">registry.</span> <span class="hl-attribute">The</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">defined</span> <span class="hl-attribute">by</span> <span class="hl-attribute">this</span> <span class="hl-attribute">element</span> <span class="hl-attribute">is</span> <span class="hl-attribute">of</span>
+ <span class="hl-attribute">type</span> <span class="hl-attribute">org.osgi.framework.ServiceRegistration.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"><xsd:appinfo></span>
+ <span class="hl-attribute"><tool:annotation></span>
+ <span class="hl-attribute"><tool:exports</span> <span class="hl-attribute">type</span>=<span class="hl-value">"org.osgi.framework.ServiceRegistration"</span>/>
+ <<span class="hl-tag">/tool:annotation</span>>
+ <<span class="hl-tag">/xsd:appinfo</span>>
+ <<span class="hl-tag">/xsd:annotation</span>>
+ <<span class="hl-tag">xsd:complexContent</span>>
+ <<span class="hl-tag">xsd:extension</span> <span class="hl-attribute">base</span>=<span class="hl-value">"TbaseService"</span>>
+ <<span class="hl-tag">xsd:sequence</span> <span class="hl-attribute">minOccurs</span>=<span class="hl-value">"0"</span> <span class="hl-attribute">maxOccurs</span>=<span class="hl-value">"1"</span>>
+ <<span class="hl-tag">xsd:element</span> <span class="hl-attribute">name</span>=<span class="hl-value">"interfaces"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"beans:listOrSetType"</span> <span class="hl-attribute">minOccurs</span>=<span class="hl-value">"0"</span> <span class="hl-attribute">maxOccurs</span>=<span class="hl-value">"1"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">The</span> <span class="hl-attribute">set</span> <span class="hl-attribute">of</span> <span class="hl-attribute">service</span> <span class="hl-attribute">interfaces</span> <span class="hl-attribute">to</span> <span class="hl-attribute">advertise</span> <span class="hl-attribute">in</span> <span class="hl-attribute">the</span> <span class="hl-attribute">service</span> <span class="hl-attribute">registry.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:element></span>
+ <span class="hl-attribute"><xsd:element</span> <span class="hl-attribute">name</span>=<span class="hl-value">"registration-listener"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"TserviceRegistrationListener"</span> <span class="hl-attribute">minOccurs</span>=<span class="hl-value">"0"</span> <span class="hl-attribute">maxOccurs</span>=<span class="hl-value">"unbounded"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Defines</span> <span class="hl-attribute">a</span> <span class="hl-attribute">listener</span> <span class="hl-attribute">that</span> <span class="hl-attribute">will</span> <span class="hl-attribute">be</span> <span class="hl-attribute">notified</span> <span class="hl-attribute">when</span> <span class="hl-attribute">this</span> <span class="hl-attribute">service</span> <span class="hl-attribute">is</span> <span class="hl-attribute">registered</span> <span class="hl-attribute">or</span> <span class="hl-attribute">unregistered</span> <span class="hl-attribute">in</span> <span class="hl-attribute">the</span>
+ <span class="hl-attribute">OSGi</span> <span class="hl-attribute">service</span> <span class="hl-attribute">registry.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:element></span>
+ <span class="hl-attribute"><xsd:element</span> <span class="hl-attribute">name</span>=<span class="hl-value">"service-properties"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"TserviceProperties"</span> <span class="hl-attribute">minOccurs</span>=<span class="hl-value">"0"</span> <span class="hl-attribute">maxOccurs</span>=<span class="hl-value">"1"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Defines</span> <span class="hl-attribute">the</span> <span class="hl-attribute">service</span> <span class="hl-attribute">properties.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:element></span>
+ <span class="hl-attribute"><!--</span> <span class="hl-attribute">nested</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">declaration</span> <span class="hl-attribute">--></span>
+ <span class="hl-attribute"><xsd:any</span> <span class="hl-attribute">namespace</span>=<span class="hl-value">"##other"</span> <span class="hl-attribute">minOccurs</span>=<span class="hl-value">"0"</span> <span class="hl-attribute">maxOccurs</span>=<span class="hl-value">"1"</span> <span class="hl-attribute">processContents</span>=<span class="hl-value">"skip"</span>/>
+ <<span class="hl-tag">/xsd:sequence</span>>
+ <<span class="hl-tag">xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"ref"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:string"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Refers</span> <span class="hl-attribute">to</span> <span class="hl-attribute">the</span> <span class="hl-attribute">named</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">to</span> <span class="hl-attribute">be</span> <span class="hl-attribute">exported</span> <span class="hl-attribute">as</span> <span class="hl-attribute">a</span> <span class="hl-attribute">service</span> <span class="hl-attribute">in</span> <span class="hl-attribute">the</span> <span class="hl-attribute">service</span> <span class="hl-attribute">registry.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"ranking"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:int"</span> <span class="hl-attribute">default</span>=<span class="hl-value">"0"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Specifies</span> <span class="hl-attribute">the</span> <span class="hl-attribute">service</span> <span class="hl-attribute">ranking</span> <span class="hl-attribute">to</span> <span class="hl-attribute">be</span> <span class="hl-attribute">used</span> <span class="hl-attribute">when</span> <span class="hl-attribute">advertising</span> <span class="hl-attribute">the</span> <span class="hl-attribute">service.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"cache-target"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:boolean"</span> <span class="hl-attribute">default</span>=<span class="hl-value">"false"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Specifies</span> <span class="hl-attribute">the</span> <span class="hl-attribute">caching</span> <span class="hl-attribute">of</span> <span class="hl-attribute">the</span> <span class="hl-attribute">exported</span> <span class="hl-attribute">target</span> <span class="hl-attribute">object.</span> <span class="hl-attribute">When</span> <span class="hl-attribute">enabled,</span> <span class="hl-attribute">the</span> <span class="hl-attribute">exporter</span> <span class="hl-attribute">will</span> <span class="hl-attribute">ignore</span> <span class="hl-attribute">the</span> <span class="hl-attribute">scope</span> <span class="hl-attribute">of</span> <span class="hl-attribute">the</span>
+ <span class="hl-attribute">target</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">and</span> <span class="hl-attribute">use</span> <span class="hl-attribute">only</span> <span class="hl-attribute">the</span> <span class="hl-attribute">first</span> <span class="hl-attribute">resolved</span> <span class="hl-attribute">instance</span> <span class="hl-attribute">for</span> <span class="hl-attribute">registration.</span> <span class="hl-attribute">When</span> <span class="hl-attribute">disabled</span> <span class="hl-attribute">(default),</span> <span class="hl-attribute">the</span> <span class="hl-attribute">scope</span> <span class="hl-attribute">of</span>
+ <span class="hl-attribute">the</span> <span class="hl-attribute">target</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">is</span> <span class="hl-attribute">considered</span> <span class="hl-attribute">and</span> <span class="hl-attribute">each</span> <span class="hl-attribute">service</span> <span class="hl-attribute">request,</span> <span class="hl-attribute">will</span> <span class="hl-attribute">be</span> <span class="hl-attribute">directed</span> <span class="hl-attribute">to</span> <span class="hl-attribute">the</span> <span class="hl-attribute">container.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"></xsd:extension></span>
+ <span class="hl-attribute"></xsd:complexContent></span>
+ <span class="hl-attribute"></xsd:complexType></span>
+
+ <span class="hl-attribute"><xsd:complexType</span> <span class="hl-attribute">name</span>=<span class="hl-value">"TserviceProperties"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Services</span> <span class="hl-attribute">properties</span> <span class="hl-attribute">used</span> <span class="hl-attribute">by</span> <span class="hl-attribute">the</span> <span class="hl-attribute">service</span> <span class="hl-attribute">exporter.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"><xsd:appinfo></span>
+ <span class="hl-attribute"><tool:annotation></span>
+ <span class="hl-attribute"><tool:exports</span> <span class="hl-attribute">type</span>=<span class="hl-value">"java.util.Map"</span>/>
+ <<span class="hl-tag">/tool:annotation</span>>
+ <<span class="hl-tag">/xsd:appinfo</span>>
+ <<span class="hl-tag">/xsd:annotation</span>>
+
+ <<span class="hl-tag">xsd:complexContent</span>>
+ <<span class="hl-tag">xsd:extension</span> <span class="hl-attribute">base</span>=<span class="hl-value">"beans:mapType"</span>>
+ <<span class="hl-comment">!-- shortcut for bean references --</span>>
+ <<span class="hl-tag">xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"ref"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:string"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Refers</span> <span class="hl-attribute">by</span> <span class="hl-attribute">name</span> <span class="hl-attribute">to</span> <span class="hl-attribute">the</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">that</span> <span class="hl-attribute">will</span> <span class="hl-attribute">receive</span> <span class="hl-attribute">register</span> <span class="hl-attribute">and</span> <span class="hl-attribute">unregister</span> <span class="hl-attribute">events.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"></xsd:extension></span>
+ <span class="hl-attribute"></xsd:complexContent></span>
+ <span class="hl-attribute"></xsd:complexType></span>
+
+ <span class="hl-attribute"><xsd:complexType</span> <span class="hl-attribute">name</span>=<span class="hl-value">"TserviceRegistrationListener"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Defines</span> <span class="hl-attribute">a</span> <span class="hl-attribute">listener</span> <span class="hl-attribute">that</span> <span class="hl-attribute">will</span> <span class="hl-attribute">be</span> <span class="hl-attribute">notified</span> <span class="hl-attribute">when</span> <span class="hl-attribute">the</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">is</span> <span class="hl-attribute">registered</span> <span class="hl-attribute">or</span> <span class="hl-attribute">unregistered</span> <span class="hl-attribute">in</span> <span class="hl-attribute">the</span> <span class="hl-attribute">OSGi</span> <span class="hl-attribute">Service</span> <span class="hl-attribute">Registry.</span>
+ <span class="hl-attribute">Use</span> <span class="hl-attribute">either</span> <span class="hl-attribute">the</span> <span class="hl-attribute">'ref'</span> <span class="hl-attribute">attribute</span> <span class="hl-attribute">or</span> <span class="hl-attribute">a</span> <span class="hl-attribute">nested</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">declaration</span> <span class="hl-attribute">for</span> <span class="hl-attribute">the</span> <span class="hl-attribute">listener</span> <span class="hl-attribute">bean.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"><xsd:sequence</span> <span class="hl-attribute">minOccurs</span>=<span class="hl-value">"0"</span> <span class="hl-attribute">maxOccurs</span>=<span class="hl-value">"1"</span>>
+ <<span class="hl-comment">!-- nested bean declaration --</span>>
+ <<span class="hl-tag">xsd:any</span> <span class="hl-attribute">namespace</span>=<span class="hl-value">"##other"</span> <span class="hl-attribute">minOccurs</span>=<span class="hl-value">"1"</span> <span class="hl-attribute">maxOccurs</span>=<span class="hl-value">"1"</span> <span class="hl-attribute">processContents</span>=<span class="hl-value">"skip"</span>/>
+ <<span class="hl-tag">/xsd:sequence</span>>
+
+ <<span class="hl-comment">!-- shortcut for bean references --</span>>
+ <<span class="hl-tag">xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"ref"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:string"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Refers</span> <span class="hl-attribute">by</span> <span class="hl-attribute">name</span> <span class="hl-attribute">to</span> <span class="hl-attribute">the</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">that</span> <span class="hl-attribute">will</span> <span class="hl-attribute">receive</span> <span class="hl-attribute">register</span> <span class="hl-attribute">and</span> <span class="hl-attribute">unregister</span> <span class="hl-attribute">events.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"registration-method"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:token"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">The</span> <span class="hl-attribute">name</span> <span class="hl-attribute">of</span> <span class="hl-attribute">the</span> <span class="hl-attribute">method</span> <span class="hl-attribute">to</span> <span class="hl-attribute">be</span> <span class="hl-attribute">invoked</span> <span class="hl-attribute">when</span> <span class="hl-attribute">the</span> <span class="hl-attribute">service</span> <span class="hl-attribute">is</span> <span class="hl-attribute">registered.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"unregistration-method"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:token"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">The</span> <span class="hl-attribute">name</span> <span class="hl-attribute">of</span> <span class="hl-attribute">the</span> <span class="hl-attribute">method</span> <span class="hl-attribute">to</span> <span class="hl-attribute">be</span> <span class="hl-attribute">invoked</span> <span class="hl-attribute">when</span> <span class="hl-attribute">the</span> <span class="hl-attribute">service</span> <span class="hl-attribute">is</span> <span class="hl-attribute">unregistered.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"></xsd:complexType></span>
+
+ <span class="hl-attribute"><xsd:simpleType</span> <span class="hl-attribute">name</span>=<span class="hl-value">"TserviceClassLoaderOptions"</span>>
+ <<span class="hl-tag">xsd:restriction</span> <span class="hl-attribute">base</span>=<span class="hl-value">"xsd:NMTOKEN"</span>>
+ <<span class="hl-tag">xsd:enumeration</span> <span class="hl-attribute">value</span>=<span class="hl-value">"service-provider"</span>/>
+ <<span class="hl-tag">xsd:enumeration</span> <span class="hl-attribute">value</span>=<span class="hl-value">"unmanaged"</span>/>
+ <<span class="hl-tag">/xsd:restriction</span>>
+ <<span class="hl-tag">/xsd:simpleType</span>>
+
+ <<span class="hl-tag">xsd:simpleType</span> <span class="hl-attribute">name</span>=<span class="hl-value">"TautoExportModes"</span>>
+ <<span class="hl-tag">xsd:restriction</span> <span class="hl-attribute">base</span>=<span class="hl-value">"xsd:NMTOKEN"</span>>
+ <<span class="hl-tag">xsd:enumeration</span> <span class="hl-attribute">value</span>=<span class="hl-value">"disabled"</span>/>
+ <<span class="hl-tag">xsd:enumeration</span> <span class="hl-attribute">value</span>=<span class="hl-value">"interfaces"</span>/>
+ <<span class="hl-tag">xsd:enumeration</span> <span class="hl-attribute">value</span>=<span class="hl-value">"class-hierarchy"</span>/>
+ <<span class="hl-tag">xsd:enumeration</span> <span class="hl-attribute">value</span>=<span class="hl-value">"all-classes"</span>/>
+ <<span class="hl-tag">/xsd:restriction</span>>
+ <<span class="hl-tag">/xsd:simpleType</span>>
+
+ <<span class="hl-comment">!-- bundle --</span>>
+
+ <<span class="hl-tag">xsd:element</span> <span class="hl-attribute">name</span>=<span class="hl-value">"bundle"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"Tbundle"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span> <span class="hl-attribute">source</span>=<span class="hl-value">"java:org.eclipse.gemini.blueprint.bundle.BundleFactoryBean"</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Defines</span> <span class="hl-attribute">a</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">representing</span> <span class="hl-attribute">a</span> <span class="hl-attribute">Bundle</span> <span class="hl-attribute">object.</span> <span class="hl-attribute">May</span> <span class="hl-attribute">be</span> <span class="hl-attribute">used</span> <span class="hl-attribute">to</span> <span class="hl-attribute">drive</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">lifecycle</span> <span class="hl-attribute">transitions.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"><xsd:appinfo></span>
+ <span class="hl-attribute"><tool:annotation></span>
+ <span class="hl-attribute"><tool:exports</span> <span class="hl-attribute">type</span>=<span class="hl-value">"org.osgi.framework.Bundle"</span>/>
+ <<span class="hl-tag">/tool:annotation</span>>
+ <<span class="hl-tag">/xsd:appinfo</span>>
+ <<span class="hl-tag">/xsd:annotation</span>>
+ <<span class="hl-tag">/xsd:element</span>>
+
+ <<span class="hl-tag">xsd:complexType</span> <span class="hl-attribute">name</span>=<span class="hl-value">"Tbundle"</span>>
+ <<span class="hl-tag">xsd:complexContent</span>>
+ <<span class="hl-tag">xsd:extension</span> <span class="hl-attribute">base</span>=<span class="hl-value">"beans:identifiedType"</span>>
+ <<span class="hl-comment">!-- optional nested bean declaration --</span>>
+ <<span class="hl-tag">xsd:sequence</span> <span class="hl-attribute">minOccurs</span>=<span class="hl-value">"0"</span> <span class="hl-attribute">maxOccurs</span>=<span class="hl-value">"1"</span>>
+ <<span class="hl-tag">xsd:any</span> <span class="hl-attribute">namespace</span>=<span class="hl-value">"##other"</span> <span class="hl-attribute">minOccurs</span>=<span class="hl-value">"1"</span> <span class="hl-attribute">maxOccurs</span>=<span class="hl-value">"1"</span> <span class="hl-attribute">processContents</span>=<span class="hl-value">"lax"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">OSGi</span> <span class="hl-attribute">bundle</span> <span class="hl-attribute">to</span> <span class="hl-attribute">work</span> <span class="hl-attribute">with.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"><xsd:appinfo></span>
+ <span class="hl-attribute"><tool:annotation></span>
+ <span class="hl-attribute"><tool:expected-type</span> <span class="hl-attribute">type</span>=<span class="hl-value">"org.osgi.framework.Bundle"</span> />
+ <<span class="hl-tag">/tool:annotation</span>>
+ <<span class="hl-tag">/xsd:appinfo</span>>
+ <<span class="hl-tag">/xsd:annotation</span>>
+ <<span class="hl-tag">/xsd:any</span>>
+ <<span class="hl-tag">/xsd:sequence</span>>
+
+ <<span class="hl-tag">xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"symbolic-name"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:string"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">The</span> <span class="hl-attribute">bundle</span> <span class="hl-attribute">symbolic</span> <span class="hl-attribute">name</span> <span class="hl-attribute">of</span> <span class="hl-attribute">the</span> <span class="hl-attribute">bundle</span> <span class="hl-attribute">object.</span> <span class="hl-attribute">Normally</span> <span class="hl-attribute">used</span> <span class="hl-attribute">when</span> <span class="hl-attribute">interacting</span> <span class="hl-attribute">with</span> <span class="hl-attribute">an</span> <span class="hl-attribute">already</span>
+ <span class="hl-attribute">installed</span> <span class="hl-attribute">bundle.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"depends-on"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:string"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Indicates</span> <span class="hl-attribute">that</span> <span class="hl-attribute">this</span> <span class="hl-attribute">bundle</span> <span class="hl-attribute">object</span> <span class="hl-attribute">should</span> <span class="hl-attribute">not</span> <span class="hl-attribute">be</span> <span class="hl-attribute">created</span> <span class="hl-attribute">until</span> <span class="hl-attribute">the</span> <span class="hl-attribute">named</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">has</span> <span class="hl-attribute">been</span> <span class="hl-attribute">created.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"location"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:string"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Location</span> <span class="hl-attribute">used</span> <span class="hl-attribute">to</span> <span class="hl-attribute">install,</span> <span class="hl-attribute">update</span> <span class="hl-attribute">or/and</span> <span class="hl-attribute">identify</span> <span class="hl-attribute">a</span> <span class="hl-attribute">bundle.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"action"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"TbundleAction"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Lifecyle</span> <span class="hl-attribute">action</span> <span class="hl-attribute">to</span> <span class="hl-attribute">drive</span> <span class="hl-attribute">on</span> <span class="hl-attribute">the</span> <span class="hl-attribute">bundle.</span> <span class="hl-attribute">'start'</span> <span class="hl-attribute">starts</span> <span class="hl-attribute">the</span> <span class="hl-attribute">bundle,</span> <span class="hl-attribute">installing</span> <span class="hl-attribute">if</span> <span class="hl-attribute">necessary.</span>
+ <span class="hl-attribute">'stop'</span> <span class="hl-attribute">stops</span> <span class="hl-attribute">the</span> <span class="hl-attribute">bundle</span> <span class="hl-attribute">if</span> <span class="hl-attribute">it</span> <span class="hl-attribute">is</span> <span class="hl-attribute">currently</span> <span class="hl-attribute">ACTIVE.</span> <span class="hl-attribute">'install'</span> <span class="hl-attribute">installs</span> <span class="hl-attribute">the</span> <span class="hl-attribute">bundle</span> <span class="hl-attribute">if</span> <span class="hl-attribute">it</span> <span class="hl-attribute">is</span>
+ <span class="hl-attribute">currently</span> <span class="hl-attribute">uninstalled.</span> <span class="hl-attribute">'uninstall'</span> <span class="hl-attribute">stops</span> <span class="hl-attribute">the</span> <span class="hl-attribute">bundle</span> <span class="hl-attribute">if</span> <span class="hl-attribute">needed,</span> <span class="hl-attribute">and</span> <span class="hl-attribute">then</span> <span class="hl-attribute">uninstalls</span> <span class="hl-attribute">it.</span>
+ <span class="hl-attribute">'update'</span> <span class="hl-attribute">installs</span> <span class="hl-attribute">the</span> <span class="hl-attribute">bundle</span> <span class="hl-attribute">if</span> <span class="hl-attribute">needed,</span> <span class="hl-attribute">and</span> <span class="hl-attribute">then</span> <span class="hl-attribute">invokes</span> <span class="hl-attribute">the</span> <span class="hl-attribute">Bundle.update()</span> <span class="hl-attribute">operation.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"destroy-action"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"TbundleAction"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Lifecyle</span> <span class="hl-attribute">action</span> <span class="hl-attribute">to</span> <span class="hl-attribute">drive</span> <span class="hl-attribute">on</span> <span class="hl-attribute">the</span> <span class="hl-attribute">bundle.</span> <span class="hl-attribute">'start'</span> <span class="hl-attribute">starts</span> <span class="hl-attribute">the</span> <span class="hl-attribute">bundle,</span> <span class="hl-attribute">installing</span> <span class="hl-attribute">if</span> <span class="hl-attribute">necessary.</span>
+ <span class="hl-attribute">'stop'</span> <span class="hl-attribute">stops</span> <span class="hl-attribute">the</span> <span class="hl-attribute">bundle</span> <span class="hl-attribute">if</span> <span class="hl-attribute">it</span> <span class="hl-attribute">is</span> <span class="hl-attribute">currently</span> <span class="hl-attribute">ACTIVE.</span> <span class="hl-attribute">'install'</span> <span class="hl-attribute">installs</span> <span class="hl-attribute">the</span> <span class="hl-attribute">bundle</span> <span class="hl-attribute">if</span> <span class="hl-attribute">it</span> <span class="hl-attribute">is</span>
+ <span class="hl-attribute">currently</span> <span class="hl-attribute">uninstalled.</span> <span class="hl-attribute">'uninstall'</span> <span class="hl-attribute">stops</span> <span class="hl-attribute">the</span> <span class="hl-attribute">bundle</span> <span class="hl-attribute">if</span> <span class="hl-attribute">needed,</span> <span class="hl-attribute">and</span> <span class="hl-attribute">then</span> <span class="hl-attribute">uninstalls</span> <span class="hl-attribute">it.</span>
+ <span class="hl-attribute">'update'</span> <span class="hl-attribute">installs</span> <span class="hl-attribute">the</span> <span class="hl-attribute">bundle</span> <span class="hl-attribute">if</span> <span class="hl-attribute">needed,</span> <span class="hl-attribute">and</span> <span class="hl-attribute">then</span> <span class="hl-attribute">invokes</span> <span class="hl-attribute">the</span> <span class="hl-attribute">Bundle.update()</span> <span class="hl-attribute">operation.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"start-level"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:int"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span> <span class="hl-attribute">default</span>=<span class="hl-value">"0"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Start</span> <span class="hl-attribute">level</span> <span class="hl-attribute">to</span> <span class="hl-attribute">set</span> <span class="hl-attribute">for</span> <span class="hl-attribute">the</span> <span class="hl-attribute">bundle.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"></xsd:extension></span>
+ <span class="hl-attribute"></xsd:complexContent></span>
+ <span class="hl-attribute"></xsd:complexType></span>
+
+ <span class="hl-attribute"><xsd:simpleType</span> <span class="hl-attribute">name</span>=<span class="hl-value">"TbundleAction"</span>>
+ <<span class="hl-tag">xsd:restriction</span> <span class="hl-attribute">base</span>=<span class="hl-value">"xsd:NMTOKEN"</span>>
+ <<span class="hl-tag">xsd:enumeration</span> <span class="hl-attribute">value</span>=<span class="hl-value">"start"</span>/>
+ <<span class="hl-tag">xsd:enumeration</span> <span class="hl-attribute">value</span>=<span class="hl-value">"stop"</span>/>
+ <<span class="hl-tag">xsd:enumeration</span> <span class="hl-attribute">value</span>=<span class="hl-value">"install"</span>/>
+ <<span class="hl-tag">xsd:enumeration</span> <span class="hl-attribute">value</span>=<span class="hl-value">"uninstall"</span>/>
+ <<span class="hl-tag">xsd:enumeration</span> <span class="hl-attribute">value</span>=<span class="hl-value">"update"</span>/>
+ <<span class="hl-tag">/xsd:restriction</span>>
+ <<span class="hl-tag">/xsd:simpleType</span>>
+
+<<span class="hl-tag">/xsd:schema</span>>
+ </pre><p>Gemini Blueprint Compendium Schema</p><pre class="programlisting"><<span class="hl-tag">?xml version="1.0" encoding="UTF-8" standalone="no"?</span>>
+
+<<span class="hl-tag">xsd:schema</span> <span class="hl-attribute">xmlns</span>=<span class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium"</span>
+ <span class="hl-attribute">xmlns:xsd</span>=<span class="hl-value">"http://www.w3.org/2001/XMLSchema"</span>
+ <span class="hl-attribute">xmlns:beans</span>=<span class="hl-value">"http://www.springframework.org/schema/beans"</span>
+ <span class="hl-attribute">xmlns:osgi</span>=<span class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint"</span>
+ <span class="hl-attribute">xmlns:tool</span>=<span class="hl-value">"http://www.springframework.org/schema/tool"</span>
+ <span class="hl-attribute">targetNamespace</span>=<span class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium"</span>
+ <span class="hl-attribute">elementFormDefault</span>=<span class="hl-value">"qualified"</span>
+ <span class="hl-attribute">attributeFormDefault</span>=<span class="hl-value">"unqualified"</span>
+ <span class="hl-attribute">version</span>=<span class="hl-value">"1.0.0"</span>>
+
+ <<span class="hl-tag">xsd:import</span> <span class="hl-attribute">namespace</span>=<span class="hl-value">"http://www.w3.org/XML/1998/namespace"</span>/>
+ <<span class="hl-tag">xsd:import</span> <span class="hl-attribute">namespace</span>=<span class="hl-value">"http://www.springframework.org/schema/beans"</span>/>
+ <<span class="hl-tag">xsd:import</span> <span class="hl-attribute">namespace</span>=<span class="hl-value">"http://www.springframework.org/schema/tool"</span>/>
+ <<span class="hl-tag">xsd:import</span> <span class="hl-attribute">namespace</span>=<span class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint"</span>
+ <span class="hl-attribute">schemaLocation</span>=<span class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint/gemini-blueprint.xsd"</span>/>
+
+
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Namespace</span> <span class="hl-attribute">support</span> <span class="hl-attribute">for</span> <span class="hl-attribute">the</span> <span class="hl-attribute">compendium</span> <span class="hl-attribute">services</span> <span class="hl-attribute">provided</span> <span class="hl-attribute">by</span> <span class="hl-attribute">Eclipse</span> <span class="hl-attribute">Gemini</span> <span class="hl-attribute">Blueprint.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+
+ <span class="hl-attribute"><!--</span> <span class="hl-attribute">internal</span> <span class="hl-attribute">reusable</span> <span class="hl-attribute">type</span> <span class="hl-attribute">--></span>
+ <span class="hl-attribute"><xsd:attributeGroup</span> <span class="hl-attribute">name</span>=<span class="hl-value">"updateAttributes"</span>>
+ <<span class="hl-tag">xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"autowire-on-update"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:boolean"</span> <span class="hl-attribute">default</span>=<span class="hl-value">"false"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Whether</span> <span class="hl-attribute">or</span> <span class="hl-attribute">not</span> <span class="hl-attribute">the</span> <span class="hl-attribute">container</span> <span class="hl-attribute">should</span> <span class="hl-attribute">autowire</span> <span class="hl-attribute">the</span> <span class="hl-attribute">target</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">everytime</span> <span class="hl-attribute">an</span> <span class="hl-attribute">update</span> <span class="hl-attribute">occurs.</span>
+ <span class="hl-attribute">When</span> <span class="hl-attribute">'true'</span> <span class="hl-attribute">is</span> <span class="hl-attribute">specified,</span> <span class="hl-attribute">the</span> <span class="hl-attribute">container</span> <span class="hl-attribute">will</span> <span class="hl-attribute">perform</span> <span class="hl-attribute">autowire</span> <span class="hl-attribute">(by</span> <span class="hl-attribute">name)</span> <span class="hl-attribute">the</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">instance</span> <span class="hl-attribute">with</span> <span class="hl-attribute">the</span>
+ <span class="hl-attribute">newly</span> <span class="hl-attribute">set</span> <span class="hl-attribute">properties.</span> <span class="hl-attribute">In</span> <span class="hl-attribute">case</span> <span class="hl-attribute">'update-method'</span> <span class="hl-attribute">attribute</span> <span class="hl-attribute">is</span> <span class="hl-attribute">used</span> <span class="hl-attribute">as</span> <span class="hl-attribute">well,</span> <span class="hl-attribute">the</span> <span class="hl-attribute">autowiring</span> <span class="hl-attribute">process</span> <span class="hl-attribute">will</span>
+ <span class="hl-attribute">take</span> <span class="hl-attribute">precedence.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"update-method"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:string"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"optional"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">The</span> <span class="hl-attribute">update-method</span> <span class="hl-attribute">to</span> <span class="hl-attribute">invoke</span> <span class="hl-attribute">whenever</span> <span class="hl-attribute">an</span> <span class="hl-attribute">update</span> <span class="hl-attribute">occurs</span> <span class="hl-attribute">in</span> <span class="hl-attribute">the</span> <span class="hl-attribute">configuration</span> <span class="hl-attribute">data.</span> <span class="hl-attribute">Allows</span> <span class="hl-attribute">the</span> <span class="hl-attribute">target</span>
+ <span class="hl-attribute">bean</span> <span class="hl-attribute">to</span> <span class="hl-attribute">process</span> <span class="hl-attribute">the</span> <span class="hl-attribute">update</span> <span class="hl-attribute">information</span> <span class="hl-attribute">itself.</span> <span class="hl-attribute">In</span> <span class="hl-attribute">case</span> <span class="hl-attribute">'autowire-on-update'</span> <span class="hl-attribute">is</span> <span class="hl-attribute">also</span> <span class="hl-attribute">used,</span> <span class="hl-attribute">the</span> <span class="hl-attribute">'update-method'</span>
+ <span class="hl-attribute">will</span> <span class="hl-attribute">be</span> <span class="hl-attribute">invoked</span> <span class="hl-attribute">after</span> <span class="hl-attribute">the</span> <span class="hl-attribute">autowiring</span> <span class="hl-attribute">takes</span> <span class="hl-attribute">place.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"></xsd:attributeGroup></span>
+
+
+ <span class="hl-attribute"><xsd:element</span> <span class="hl-attribute">name</span>=<span class="hl-value">"managed-properties"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Defines</span> <span class="hl-attribute">a</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">based</span> <span class="hl-attribute">on</span> <span class="hl-attribute">the</span> <span class="hl-attribute">given</span> <span class="hl-attribute">class</span> <span class="hl-attribute">name</span> <span class="hl-attribute">and</span> <span class="hl-attribute">configuration,</span> <span class="hl-attribute">with</span> <span class="hl-attribute">properties</span> <span class="hl-attribute">autowired-by-name</span>
+ <span class="hl-attribute">based</span> <span class="hl-attribute">on</span> <span class="hl-attribute">the</span> <span class="hl-attribute">configuration</span> <span class="hl-attribute">stored</span> <span class="hl-attribute">under</span> <span class="hl-attribute">the</span> <span class="hl-attribute">given</span> <span class="hl-attribute">persistent</span> <span class="hl-attribute">id.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"><xsd:complexType></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"persistent-id"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:string"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"required"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">The</span> <span class="hl-attribute">persistent-id</span> <span class="hl-attribute">under</span> <span class="hl-attribute">which</span> <span class="hl-attribute">the</span> <span class="hl-attribute">configuration</span> <span class="hl-attribute">for</span> <span class="hl-attribute">this</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">is</span> <span class="hl-attribute">stored</span> <span class="hl-attribute">in</span>
+ <span class="hl-attribute">the</span> <span class="hl-attribute">Configuration</span> <span class="hl-attribute">Admin</span> <span class="hl-attribute">service.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attributeGroup</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"updateAttributes"</span>/>
+ <<span class="hl-tag">/xsd:complexType</span>>
+ <<span class="hl-tag">/xsd:element</span>>
+
+ <<span class="hl-comment">!-- managed-service-factory --</span>>
+
+ <<span class="hl-tag">xsd:element</span> <span class="hl-attribute">name</span>=<span class="hl-value">"managed-service-factory"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Defines</span> <span class="hl-attribute">a</span> <span class="hl-attribute">collection</span> <span class="hl-attribute">of</span> <span class="hl-attribute">beans</span> <span class="hl-attribute">based</span> <span class="hl-attribute">on</span> <span class="hl-attribute">the</span> <span class="hl-attribute">given</span> <span class="hl-attribute">class</span> <span class="hl-attribute">name,</span> <span class="hl-attribute">with</span> <span class="hl-attribute">properties</span> <span class="hl-attribute">autowired-by-name</span> <span class="hl-attribute">based</span>
+ <span class="hl-attribute">on</span> <span class="hl-attribute">the</span> <span class="hl-attribute">configuration</span> <span class="hl-attribute">sets</span> <span class="hl-attribute">stored</span> <span class="hl-attribute">under</span> <span class="hl-attribute">the</span> <span class="hl-attribute">given</span> <span class="hl-attribute">factory</span> <span class="hl-attribute">persistent</span> <span class="hl-attribute">id.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"><xsd:complexType></span>
+ <span class="hl-attribute"><xsd:complexContent></span>
+ <span class="hl-attribute"><xsd:extension</span> <span class="hl-attribute">base</span>=<span class="hl-value">"osgi:TbaseService"</span>>
+ <<span class="hl-tag">xsd:sequence</span>>
+ <<span class="hl-tag">xsd:element</span> <span class="hl-attribute">name</span>=<span class="hl-value">"interfaces"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"beans:listOrSetType"</span> <span class="hl-attribute">minOccurs</span>=<span class="hl-value">"0"</span> <span class="hl-attribute">maxOccurs</span>=<span class="hl-value">"1"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">The</span> <span class="hl-attribute">set</span> <span class="hl-attribute">of</span> <span class="hl-attribute">service</span> <span class="hl-attribute">interfaces</span> <span class="hl-attribute">to</span> <span class="hl-attribute">advertise</span> <span class="hl-attribute">in</span> <span class="hl-attribute">the</span> <span class="hl-attribute">service</span> <span class="hl-attribute">registry.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:element></span>
+ <span class="hl-attribute"><xsd:element</span> <span class="hl-attribute">name</span>=<span class="hl-value">"registration-listener"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"osgi:TserviceRegistrationListener"</span> <span class="hl-attribute">minOccurs</span>=<span class="hl-value">"0"</span> <span class="hl-attribute">maxOccurs</span>=<span class="hl-value">"unbounded"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Defines</span> <span class="hl-attribute">a</span> <span class="hl-attribute">listener</span> <span class="hl-attribute">that</span> <span class="hl-attribute">will</span> <span class="hl-attribute">be</span> <span class="hl-attribute">notified</span> <span class="hl-attribute">when</span> <span class="hl-attribute">this</span> <span class="hl-attribute">service</span> <span class="hl-attribute">is</span> <span class="hl-attribute">registered</span> <span class="hl-attribute">or</span> <span class="hl-attribute">unregistered</span> <span class="hl-attribute">in</span> <span class="hl-attribute">the</span>
+ <span class="hl-attribute">OSGi</span> <span class="hl-attribute">service</span> <span class="hl-attribute">registry.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:element></span>
+ <span class="hl-attribute"><xsd:element</span> <span class="hl-attribute">name</span>=<span class="hl-value">"service-properties"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"osgi:TserviceProperties"</span> <span class="hl-attribute">minOccurs</span>=<span class="hl-value">"0"</span> <span class="hl-attribute">maxOccurs</span>=<span class="hl-value">"1"</span>/>
+ <<span class="hl-comment">!-- the bean definition template --</span>>
+ <<span class="hl-tag">xsd:any</span> <span class="hl-attribute">namespace</span>=<span class="hl-value">"##other"</span> <span class="hl-attribute">minOccurs</span>=<span class="hl-value">"1"</span> <span class="hl-attribute">maxOccurs</span>=<span class="hl-value">"1"</span> <span class="hl-attribute">processContents</span>=<span class="hl-value">"skip"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Defines</span> <span class="hl-attribute">the</span> <span class="hl-attribute">service</span> <span class="hl-attribute">definition</span> <span class="hl-attribute">template.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:any></span>
+ <span class="hl-attribute"></xsd:sequence></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"factory-pid"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:string"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"required"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">The</span> <span class="hl-attribute">persistent-id</span> <span class="hl-attribute">under</span> <span class="hl-attribute">which</span> <span class="hl-attribute">the</span> <span class="hl-attribute">configuration</span> <span class="hl-attribute">for</span> <span class="hl-attribute">this</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">is</span> <span class="hl-attribute">stored</span> <span class="hl-attribute">in</span>
+ <span class="hl-attribute">the</span> <span class="hl-attribute">Configuration</span> <span class="hl-attribute">Admin</span> <span class="hl-attribute">service.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attributeGroup</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"updateAttributes"</span>/>
+ <<span class="hl-tag">/xsd:extension</span>>
+ <<span class="hl-tag">/xsd:complexContent</span>>
+ <<span class="hl-tag">/xsd:complexType</span>>
+ <<span class="hl-tag">/xsd:element</span>>
+
+
+ <<span class="hl-comment">!-- cm-properties --</span>>
+ <<span class="hl-tag">xsd:element</span> <span class="hl-attribute">name</span>=<span class="hl-value">"cm-properties"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span> <span class="hl-attribute">source</span>=<span class="hl-value">"java:org.eclipse.gemini.blueprint.compendium.cm.ConfigAdminPropertiesFactoryBean"</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Exposes</span> <span class="hl-attribute">the</span> <span class="hl-attribute">properties</span> <span class="hl-attribute">found</span> <span class="hl-attribute">in</span> <span class="hl-attribute">the</span> <span class="hl-attribute">Configuration</span> <span class="hl-attribute">Admin</span> <span class="hl-attribute">service</span> <span class="hl-attribute">under</span> <span class="hl-attribute">the</span> <span class="hl-attribute">given</span> <span class="hl-attribute">persistent</span> <span class="hl-attribute">id.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"><xsd:appinfo></span>
+ <span class="hl-attribute"><tool:annotation></span>
+ <span class="hl-attribute"><tool:exports</span> <span class="hl-attribute">type</span>=<span class="hl-value">"java.util.Properties"</span>/>
+ <<span class="hl-tag">/tool:annotation</span>>
+ <<span class="hl-tag">/xsd:appinfo</span>>
+ <<span class="hl-tag">/xsd:annotation</span>>
+ <<span class="hl-tag">xsd:complexType</span>>
+ <<span class="hl-tag">xsd:complexContent</span>>
+ <<span class="hl-tag">xsd:extension</span> <span class="hl-attribute">base</span>=<span class="hl-value">"beans:propsType"</span>>
+ <<span class="hl-tag">xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"id"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:ID"</span>/>
+ <<span class="hl-tag">xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"persistent-id"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:string"</span> <span class="hl-attribute">use</span>=<span class="hl-value">"required"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">The</span> <span class="hl-attribute">persistent</span> <span class="hl-attribute">id</span> <span class="hl-attribute">under</span> <span class="hl-attribute">which</span> <span class="hl-attribute">the</span> <span class="hl-attribute">properties</span> <span class="hl-attribute">reside.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"local-override"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:boolean"</span> <span class="hl-attribute">default</span>=<span class="hl-value">"false"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Specifies</span> <span class="hl-attribute">whether</span> <span class="hl-attribute">local</span> <span class="hl-attribute">properties</span> <span class="hl-attribute">override</span> <span class="hl-attribute">properties</span> <span class="hl-attribute">from</span> <span class="hl-attribute">the</span> <span class="hl-attribute">Configuration</span> <span class="hl-attribute">Admin</span> <span class="hl-attribute">service.</span>
+ <span class="hl-attribute">Default</span> <span class="hl-attribute">is</span> <span class="hl-attribute">"false":</span> <span class="hl-attribute">properties</span> <span class="hl-attribute">from</span> <span class="hl-attribute">Configuration</span> <span class="hl-attribute">Admin</span> <span class="hl-attribute">service</span> <span class="hl-attribute">override</span> <span class="hl-attribute">local</span> <span class="hl-attribute">defaults.</span>
+ <span class="hl-attribute">If</span> <span class="hl-attribute">set</span> <span class="hl-attribute">to</span> <span class="hl-attribute">"true",</span> <span class="hl-attribute">local</span> <span class="hl-attribute">properties</span> <span class="hl-attribute">will</span> <span class="hl-attribute">override</span> <span class="hl-attribute">properties</span> <span class="hl-attribute">from</span> <span class="hl-attribute">Configuration</span> <span class="hl-attribute">Admin</span> <span class="hl-attribute">service.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"dynamic"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:boolean"</span> <span class="hl-attribute">default</span>=<span class="hl-value">"false"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Specifies</span> <span class="hl-attribute">whether</span> <span class="hl-attribute">changes</span> <span class="hl-attribute">to</span> <span class="hl-attribute">the</span> <span class="hl-attribute">Configuration</span> <span class="hl-attribute">Admin</span> <span class="hl-attribute">service</span> <span class="hl-attribute">will</span> <span class="hl-attribute">be</span> <span class="hl-attribute">reflected</span> <span class="hl-attribute">by</span> <span class="hl-attribute">the</span> <span class="hl-attribute">properties.</span>
+ <span class="hl-attribute">Default</span> <span class="hl-attribute">is</span> <span class="hl-attribute">"false":</span> <span class="hl-attribute">once</span> <span class="hl-attribute">resolved</span> <span class="hl-attribute">from</span> <span class="hl-attribute">the</span> <span class="hl-attribute">Configuration</span> <span class="hl-attribute">Admin,</span> <span class="hl-attribute">the</span> <span class="hl-attribute">properties</span> <span class="hl-attribute">will</span> <span class="hl-attribute">not</span> <span class="hl-attribute">change.</span>
+ <span class="hl-attribute">If</span> <span class="hl-attribute">set</span> <span class="hl-attribute">to</span> <span class="hl-attribute">"true",</span> <span class="hl-attribute">the</span> <span class="hl-attribute">properties</span> <span class="hl-attribute">object</span> <span class="hl-attribute">content</span> <span class="hl-attribute">will</span> <span class="hl-attribute">update</span> <span class="hl-attribute">accordingly</span> <span class="hl-attribute">(after</span> <span class="hl-attribute">initialization)</span> <span class="hl-attribute">to</span> <span class="hl-attribute">the</span> <span class="hl-attribute">changes</span> <span class="hl-attribute">in</span> <span class="hl-attribute">the</span> <span class="hl-attribute">Configuration</span> <span class="hl-attribute">Admin.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"init-lazy"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:boolean"</span> <span class="hl-attribute">default</span>=<span class="hl-value">"true"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Specifies</span> <span class="hl-attribute">whether</span> <span class="hl-attribute">the</span> <span class="hl-attribute">properties</span> <span class="hl-attribute">reflecting</span> <span class="hl-attribute">the</span> <span class="hl-attribute">Configuration</span> <span class="hl-attribute">Admin</span> <span class="hl-attribute">service</span> <span class="hl-attribute">entry</span> <span class="hl-attribute">will</span> <span class="hl-attribute">be</span> <span class="hl-attribute">initialized</span> <span class="hl-attribute">lazy</span> <span class="hl-attribute">or</span> <span class="hl-attribute">not.</span>
+ <span class="hl-attribute">Default</span> <span class="hl-attribute">is</span> <span class="hl-attribute">"true":</span> <span class="hl-attribute">meaning</span> <span class="hl-attribute">the</span> <span class="hl-attribute">properties</span> <span class="hl-attribute">will</span> <span class="hl-attribute">be</span> <span class="hl-attribute">initialized</span> <span class="hl-attribute">just</span> <span class="hl-attribute">before</span> <span class="hl-attribute">being</span> <span class="hl-attribute">requested</span> <span class="hl-attribute">(from</span> <span class="hl-attribute">the</span> <span class="hl-attribute">factory)</span> <span class="hl-attribute">for</span> <span class="hl-attribute">the</span> <span class="hl-attribute">first</span> <span class="hl-attribute">time.</span> <span class="hl-attribute">This</span> <span class="hl-attribute">is</span>
+ <span class="hl-attribute">the</span> <span class="hl-attribute">common</span> <span class="hl-attribute">case</span> <span class="hl-attribute">as</span> <span class="hl-attribute">it</span> <span class="hl-attribute">allows</span> <span class="hl-attribute">the</span> <span class="hl-attribute">most</span> <span class="hl-attribute">recent</span> <span class="hl-attribute">entry</span> <span class="hl-attribute">to</span> <span class="hl-attribute">be</span> <span class="hl-attribute">used.</span>
+ <span class="hl-attribute">If</span> <span class="hl-attribute">set</span> <span class="hl-attribute">to</span> <span class="hl-attribute">"false",</span> <span class="hl-attribute">the</span> <span class="hl-attribute">properties</span> <span class="hl-attribute">object</span> <span class="hl-attribute">will</span> <span class="hl-attribute">be</span> <span class="hl-attribute">initialized</span> <span class="hl-attribute">at</span> <span class="hl-attribute">startup,</span> <span class="hl-attribute">along</span> <span class="hl-attribute">with</span> <span class="hl-attribute">the</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">factory.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"><xsd:attribute</span> <span class="hl-attribute">name</span>=<span class="hl-value">"init-timeout"</span> <span class="hl-attribute">type</span>=<span class="hl-value">"xsd:nonNegativeInteger"</span> <span class="hl-attribute">default</span>=<span class="hl-value">"0"</span>>
+ <<span class="hl-tag">xsd:annotation</span>>
+ <<span class="hl-tag">xsd:documentation</span>><<span class="hl-tag">![CDATA[</span>
+ <span class="hl-attribute">Specifies</span> <span class="hl-attribute">the</span> <span class="hl-attribute">amount</span> <span class="hl-attribute">of</span> <span class="hl-attribute">time</span> <span class="hl-attribute">(in</span> <span class="hl-attribute">milliseconds)</span> <span class="hl-attribute">the</span> <span class="hl-attribute">bean</span> <span class="hl-attribute">factory</span> <span class="hl-attribute">will</span> <span class="hl-attribute">wait</span> <span class="hl-attribute">for</span> <span class="hl-attribute">the</span> <span class="hl-attribute">Configuration</span> <span class="hl-attribute">Admin</span> <span class="hl-attribute">entry</span> <span class="hl-attribute">to</span>
+ <span class="hl-attribute">be</span> <span class="hl-attribute">initialized</span> <span class="hl-attribute">(return</span> <span class="hl-attribute">a</span> <span class="hl-attribute">non-null</span> <span class="hl-attribute">value).</span> <span class="hl-attribute">If</span> <span class="hl-attribute">the</span> <span class="hl-attribute">entry</span> <span class="hl-attribute">is</span> <span class="hl-attribute">not</span> <span class="hl-attribute">null</span> <span class="hl-attribute">at</span> <span class="hl-attribute">startup,</span> <span class="hl-attribute">no</span> <span class="hl-attribute">waiting</span> <span class="hl-attribute">will</span> <span class="hl-attribute">be</span> <span class="hl-attribute">performed.</span>
+ <span class="hl-attribute">Similar</span> <span class="hl-attribute">to</span> <span class="hl-attribute">the</span> <span class="hl-attribute">other</span> <span class="hl-attribute">timeout</span> <span class="hl-attribute">options,</span> <span class="hl-attribute">a</span> <span class="hl-attribute">value</span> <span class="hl-attribute">of</span> <span class="hl-attribute">'0'</span> <span class="hl-attribute">means</span> <span class="hl-attribute">no</span> <span class="hl-attribute">waiting.</span> <span class="hl-attribute">By</span> <span class="hl-attribute">default,</span> <span class="hl-attribute">no</span> <span class="hl-attribute">waiting</span> <span class="hl-attribute">(0)</span> <span class="hl-attribute">is</span> <span class="hl-attribute">performed.</span>
+ <span class="hl-attribute">]]></xsd:documentation></span>
+ <span class="hl-attribute"></xsd:annotation></span>
+ <span class="hl-attribute"></xsd:attribute></span>
+ <span class="hl-attribute"></xsd:extension></span>
+ <span class="hl-attribute"></xsd:complexContent></span>
+ <span class="hl-attribute"></xsd:complexType></span>
+ <span class="hl-attribute"></xsd:element></span>
+<span class="hl-attribute"></xsd:schema></span>
+ </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> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix-ack.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix E. Gemini Blueprint OSGi Repository </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"> Appendix G. Acknowledgments</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/appendix-security.html b/blueprint/documentation/reference/1.0.1.RELEASE/html/appendix-security.html
new file mode 100644
index 0000000..c06842d
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/appendix-security.html
@@ -0,0 +1,15 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Appendix A. Security Integration</title><link rel="stylesheet" href="css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.72.0"><link rel="start" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="appendixes.html" title="Part IV. Appendixes"><link rel="prev" href="appendixes.html" title="Part IV. Appendixes"><link rel="next" href="appendix-pde-integration.html" title="Appendix B. Eclipse Plug-in Development integration"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="appendix-security"></a>Appendix A. Security Integration</h2></div></div></div><p>Since Spring DM 1.2.0, Gemini Blueprint integrates with Java 2 <a href="">security</a>.
+ Namely Gemini Blueprint uses <a 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 A.1. Gemini Blueprint Permission Table</b></p><div class="table-contents"><table summary="Gemini Blueprint Permission Table" width="100%" border="1"><colgroup><col><col><col><col></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>, <<ALL FILES>> 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> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix-pde-integration.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part IV. Appendixes </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"> Appendix B. Eclipse Plug-in Development integration</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/appendix-tips.html b/blueprint/documentation/reference/1.0.1.RELEASE/html/appendix-tips.html
new file mode 100644
index 0000000..a4b5e30
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/appendix-tips.html
@@ -0,0 +1,24 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Appendix C. Useful OSGi tips</title><link rel="stylesheet" href="css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.72.0"><link rel="start" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="appendixes.html" title="Part IV. Appendixes"><link rel="prev" href="appendix-pde-integration.html" title="Appendix B. Eclipse Plug-in Development integration"><link rel="next" href="appendix-roadmap.html" title="Appendix D. Roadmap"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="appendix-tips"></a>Appendix C. Useful OSGi tips</h2></div></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="appendix-tips:fragments"></a>C.1. OSGi Fragments</h2></div></div></div><div class="sidebar"><p class="title"><b>Check the target OSGi platform fragment support</b></p><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">a bundle that is <span class="emphasis"><em>attached</em></span> to a <span class="emphasis"><em>host bundle</em></span></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">...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>”</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: <host bundle symbolic name></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"><img src="images/callouts/1.png" alt="(1)"></span>
+Bundle-ManifestVersion: 2 <span class="co"><img src="images/callouts/2.png" alt="(2)"></span>
+Fragment-Host: org.eclipse.gemini.blueprint.extender <span class="co"><img src="images/callouts/3.png" alt="(3)"></span>
+Bundle-SymbolicName: org.mydomain.project.fragment <span class="co"><img src="images/callouts/4.png" alt="(4)"></span>
+Bundle-Name: my-fragment <span class="co"><img src="images/callouts/5.png" alt="(5)"></span>
+Bundle-Description: Fragment attached to Gemini Blueprint extender <span class="co"><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"><img src="images/callouts/1.png" alt="1" border="0"></td><td valign="top" align="left"><p>Manifest version.</p></td></tr><tr><td width="5%" valign="top" align="left"><img src="images/callouts/2.png" alt="2" border="0"></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"><img src="images/callouts/3.png" alt="3" border="0"></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"><img src="images/callouts/4.png" alt="4" border="0"></td><td valign="top" align="left"><p>The fragment symbolic name.</p></td></tr><tr><td width="5%" valign="top" align="left"><img src="images/callouts/5.png" alt="5" border="0"></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"><img src="images/callouts/6.png" alt="6" border="0"></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,∞)</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> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix-roadmap.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix B. Eclipse Plug-in Development integration </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"> Appendix D. Roadmap</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/appendixes.html b/blueprint/documentation/reference/1.0.1.RELEASE/html/appendixes.html
new file mode 100644
index 0000000..d2d67c1
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/appendixes.html
@@ -0,0 +1,18 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Part IV. Appendixes</title><link rel="stylesheet" href="css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.72.0"><link rel="start" 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 13. Useful Links"><link rel="next" href="appendix-security.html" title="Appendix A. Security Integration"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="appendixes"></a>Part IV. Appendixes</h1></div></div></div><div class="partintro" lang="en"><div><div><div><h1 class="title"><a name="d18e6180"></a>Document structure</h1></div></div></div><p>
+ Various appendixes outside the reference documentation.
+ </p><p><a href="appendix-security.html" title="Appendix A. Security Integration">Appendix A, <i xmlns:xlink="http://www.w3.org/1999/xlink">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 href="appendix-pde-integration.html" title="Appendix B. Eclipse Plug-in Development integration">Appendix B, <i xmlns:xlink="http://www.w3.org/1999/xlink">Eclipse Plug-in Development integration</i></a> describes how to integrate Gemini Blueprint
+ with Eclipse Plug-in Development Environment.</p><p><a href="">???</a> describes the Gemini Blueprint Maven 2 archetype
+ usage.</p><p><a href="appendix-tips.html" title="Appendix C. Useful OSGi tips">Appendix C, <i xmlns:xlink="http://www.w3.org/1999/xlink">Useful OSGi tips</i></a> provides some useful OSGi tips, especially
+ meaningful when used along with Gemini Blueprint.</p><p><a href="appendix-roadmap.html" title="Appendix D. Roadmap">Appendix D, <i xmlns:xlink="http://www.w3.org/1999/xlink">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 href="appendix-osgi-repo.html" title="Appendix E. Gemini Blueprint OSGi Repository">Appendix E, <i xmlns:xlink="http://www.w3.org/1999/xlink">Gemini Blueprint OSGi Repository</i></a> describes the repository used by Gemini Blueprint
+ for its osgi artifacts.</p><p><a href="appendix-schema.html" title="Appendix F. Gemini Blueprint Schema">Appendix F, <i xmlns:xlink="http://www.w3.org/1999/xlink">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> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix-security.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 13. Useful Links </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"> Appendix A. Security Integration</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/blueprint.html b/blueprint/documentation/reference/1.0.1.RELEASE/html/blueprint.html
new file mode 100644
index 0000000..520296c
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/blueprint.html
@@ -0,0 +1,106 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Chapter 6. OSGi 4.2 Blueprint Container</title><link rel="stylesheet" href="css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.72.0"><link rel="start" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="reference.html" title="Part II. Reference Documentation"><link rel="prev" href="reference.html" title="Part II. Reference Documentation"><link rel="next" href="bnd-app-ctx.html" title="Chapter 7. Bundles and Application Contexts"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="blueprint"></a>Chapter 6. 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 2.0 serves as
+ the Blueprint Reference <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://en.wikipedia.org/wiki/Reference_implementation" target="_top">Implementation</a>
+ - the official, complete implementation of the spec.
+ </p><p>For this reason, users familiar with Gemini Blueprint, will find Blueprint very familiar and vice versa.
+ In fact, we recommend that the Blueprint specification is used as a complement to this documentation. It should be
+ mentioned that various aspects of Gemini Blueprint 1.x have been adjusted or slightly changed in 2.0, for consistency reason,
+ to closely follow the Blueprint specification. As a general rule, unless mentioned otherwise, the Gemini Blueprint 2.x and
+ Blueprint behaviour should be the same.</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.
+ That is, one can declare inside the same configuration, beans using both namespaces, at any point, without
+ having to make an up-front choice.</p><p>Please note that this documentation will focus on Gemini Blueprint specific configurations and option; for Blueprint specific
+ behaviour please refer to the OSGi 4.2 Compendium spec, section 121.</p><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="blueprint:requirements"></a>6.1. 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="blueprint:differences"></a>6.2. 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 href="app-deploy.html#app-deploy:headers:blueprint" title="8.2. Blueprint Manifest Configuration Comparison">Section 8.2, “Blueprint Manifest Configuration Comparison”</a> or <a href="service-registry.html#service-registry:export:blueprint" title="9.1.10.2. Blueprint service Comparison">Section 9.1.10.2, “Blueprint <code class="literal">service</code> Comparison”</a>).
+ Again, one can simply switch between the two definition styles, if need be.</p><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="blueprint:differences:xml"></a>6.2.1. XML Declarations</h3></div></div></div><p>Most of the XML declarations are similar between Spring and Blueprint. Using the Spring
+ <a xmlns:xlink="http://www.w3.org/1999/xlink" 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 6.1. XML Configuration Differences</b></p><div class="table-contents"><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"><beans></code></td><td><code class="literal"><blueprint></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"><beans></code></td><td><code class="literal"><blueprint></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"><alias></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"><constructor-arg></code></td><td><code class="literal"><argument></code></td></tr><tr><td>Property</td><td><code class="literal"><property></code></td><td><code class="literal"><property></code></td></tr><tr><td>Value</td><td><code class="literal"><value></code></td><td><code class="literal"><value></code></td></tr><tr><td>Service Exporter</td><td><code class="literal"><service></code></td><td><code class="literal"><service></code></td></tr><tr><td>Service Importer</td><td><code class="literal"><reference>/<list>/<set></code></td><td><code class="literal"><reference>/<list></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 class="hl-tag">?xml version="1.0" encoding="UTF-8"?</span>>
+<<span class="hl-tag">blueprint</span> <span class="hl-attribute">xmlns</span>=<span class="hl-value">"http://www.osgi.org/xmlns/blueprint/v1.0.0"</span> <span class="hl-attribute">default-activation</span>=<span class="hl-value">"lazy"</span>>
+ <<span class="hl-tag">bean</span> <span class="hl-attribute">id</span>=<span class="hl-value">"object"</span> <span class="hl-attribute">class</span>=<span class="hl-value">"java.lang.Object"</span>/>
+
+ <<span class="hl-tag">bean</span> <span class="hl-attribute">id</span>=<span class="hl-value">"length"</span> <span class="hl-attribute">class</span>=<span class="hl-value">"java.lang.Integer"</span>>
+ <<span class="hl-tag">argument</span> <span class="hl-attribute">value</span>=<span class="hl-value">"4"</span>/>
+ <<span class="hl-tag">/bean</span>>
+
+ <<span class="hl-tag">bean</span> <span class="hl-attribute">id</span>=<span class="hl-value">"buffer"</span> <span class="hl-attribute">class</span>=<span class="hl-value">"java.lang.StringBuffer"</span> <span class="hl-attribute">depends-on</span>=<span class="hl-value">"simple"</span>>
+ <<span class="hl-tag">property</span> <span class="hl-attribute">name</span>=<span class="hl-value">"length"</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"length"</span>/>
+ <<span class="hl-tag">/bean</span>>
+
+ <<span class="hl-tag">bean</span> <span class="hl-attribute">id</span>=<span class="hl-value">"current-time"</span> <span class="hl-attribute">class</span>=<span class="hl-value">"java.lang.System"</span> <span class="hl-attribute">factory-method</span>=<span class="hl-value">"currentTimeMillis"</span> <span class="hl-attribute">scope</span>=<span class="hl-value">"prototype"</span>/>
+
+ <<span class="hl-tag">bean</span> <span class="hl-attribute">id</span>=<span class="hl-value">"list"</span> <span class="hl-attribute">class</span>=<span class="hl-value">"java.util.ArrayList"</span> <span class="hl-attribute">destroy-method</span>=<span class="hl-value">"clear"</span> <span class="hl-attribute">activation</span>=<span class="hl-value">"eager"</span>>
+ <<span class="hl-tag">argument</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"length"</span>/>
+ <<span class="hl-tag">/bean</span>>
+<<span class="hl-tag">/blueprint</span>></pre><pre class="programlisting"><<span class="hl-tag">?xml version="1.0" encoding="UTF-8"?</span>>
+<<span class="hl-tag">beans</span> <span class="hl-attribute">xmlns</span>=<span class="hl-value">"http://www.springframework.org/schema/beans"</span>
+ <span class="hl-attribute">xmlns:xsi</span>=<span class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span class="hl-attribute">xsi:schemaLocation</span>=<span class="hl-value">"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"</span>
+ <span class="hl-attribute">default-lazy-init</span>=<span class="hl-value">"true"</span>>
+
+ <<span class="hl-tag">bean</span> <span class="hl-attribute">id</span>=<span class="hl-value">"object"</span> <span class="hl-attribute">class</span>=<span class="hl-value">"java.lang.Object"</span>/>
+
+ <<span class="hl-tag">bean</span> <span class="hl-attribute">id</span>=<span class="hl-value">"length"</span> <span class="hl-attribute">class</span>=<span class="hl-value">"java.lang.Integer"</span>>
+ <<span class="hl-tag">constructor-arg</span> <span class="hl-attribute">value</span>=<span class="hl-value">"4"</span>/>
+ <<span class="hl-tag">/bean</span>>
+
+ <<span class="hl-tag">bean</span> <span class="hl-attribute">id</span>=<span class="hl-value">"buffer"</span> <span class="hl-attribute">class</span>=<span class="hl-value">"java.lang.StringBuffer"</span> <span class="hl-attribute">depends-on</span>=<span class="hl-value">"simple"</span>>
+ <<span class="hl-tag">property</span> <span class="hl-attribute">name</span>=<span class="hl-value">"length"</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"length"</span>/>
+ <<span class="hl-tag">/bean</span>>
+
+ <<span class="hl-tag">bean</span> <span class="hl-attribute">id</span>=<span class="hl-value">"current-time"</span> <span class="hl-attribute">class</span>=<span class="hl-value">"java.lang.System"</span> <span class="hl-attribute">factory-method</span>=<span class="hl-value">"currentTimeMillis"</span> <span class="hl-attribute">scope</span>=<span class="hl-value">"prototype"</span>/>
+
+ <<span class="hl-tag">bean</span> <span class="hl-attribute">id</span>=<span class="hl-value">"list"</span> <span class="hl-attribute">class</span>=<span class="hl-value">"java.util.ArrayList"</span> <span class="hl-attribute">destroy-method</span>=<span class="hl-value">"clear"</span> <span class="hl-attribute">lazy-init</span>=<span class="hl-value">"false"</span>>
+ <<span class="hl-tag">constructor-arg</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"length"</span>/>
+ <<span class="hl-tag">/bean</span>>
+<<span class="hl-tag">/beans</span>></pre><p>As mentioned before, in Gemini Blueprint one can mix and match the namespaces:</p><pre class="programlisting"><<span class="hl-tag">beans</span> <span class="hl-attribute">xmlns</span>=<span class="hl-value">"http://www.springframework.org/schema/beans"</span>
+ <span class="hl-attribute">xmlns:xsi</span>=<span class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span class="hl-attribute">xmlns:bp</span>=<span class="hl-value">"http://www.osgi.org/xmlns/blueprint/v1.0.0"</span>
+ <span class="hl-attribute">xmlns:p</span>=<span class="hl-value">"http://www.springframework.org/schema/p"</span>
+ <span class="hl-attribute">xmlns:osgi</span>=<span class="hl-value">"http://www.springframework.org/schema/osgi"</span>
+ <span class="hl-attribute">xmlns:task</span>=<span class="hl-value">"http://www.springframework.org/schema/task"</span>
+ <span class="hl-attribute">xmlns:util</span>=<span class="hl-value">"http://www.springframework.org/schema/util"</span>
+ <span class="hl-attribute">xsi:schemaLocation</span>=<span 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
+ http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd
+ http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd
+ http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"</span>>
+
+ <<span class="hl-tag">util:constant</span> <span class="hl-attribute">id</span>=<span class="hl-value">"thread-priority"</span> <span class="hl-attribute">static-field</span>=<span class="hl-value">"java.lang.Thread.MIN_PRIORITY"</span>/>
+
+ <<span class="hl-tag">bean</span> <span class="hl-attribute">id</span>=<span class="hl-value">"exampleThread"</span> <span class="hl-attribute">class</span>=<span class="hl-value">"java.lang.Thread"</span> <span class="hl-attribute">p:priority-ref</span>=<span class="hl-value">"thread-priority"</span>>
+ <<span class="hl-tag">constructor-arg</span>>
+ <<span class="hl-tag">bp:bean</span> <span class="hl-attribute">class</span>=<span class="hl-value">"org.example.SomeRunnable"</span>/>
+ <<span class="hl-tag">/constructor-arg</span>>
+ <<span class="hl-tag">/bean</span>>
+
+ <<span class="hl-tag">task:executor</span> <span class="hl-attribute">id</span>=<span class="hl-value">"rangeWithBoundedQueue"</span> <span class="hl-attribute">size</span>=<span class="hl-value">"7-42"</span> <span class="hl-attribute">queue-capacity</span>=<span class="hl-value">"#{ T(java.lang.Math).random() * 30.0 }"</span>/>
+
+ <<span class="hl-tag">bp:reference-list</span> <span class="hl-attribute">id</span>=<span class="hl-value">"cloneableServices"</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"java.lang.Cloneable"</span> />
+<<span class="hl-tag">beans</span>></pre><p>The example above, uses the Spring <code class="literal">beans</code>, <code class="literal">util</code>, <code class="literal">p</code>, Spring Expression Language (SpEL)
+ and the <code class="literal">task</code> namespace introduced in Spring 3.x, and Gemini Blueprint namespace.</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="blueprint:differences:container"></a>6.2.2. 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 6.2. Container Capabilities Differences</b></p><div class="table-contents"><table summary="Container Capabilities Differences" width="100%" border="1"><colgroup><col><col><col></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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="blueprint:using"></a>6.3. 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> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="bnd-app-ctx.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part II. Reference Documentation </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"> Chapter 7. Bundles and Application Contexts</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/bnd-app-ctx.html b/blueprint/documentation/reference/1.0.1.RELEASE/html/bnd-app-ctx.html
new file mode 100644
index 0000000..843f4ca
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/bnd-app-ctx.html
@@ -0,0 +1,207 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Chapter 7. Bundles and Application Contexts</title><link rel="stylesheet" href="css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.72.0"><link rel="start" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="reference.html" title="Part II. Reference Documentation"><link rel="prev" href="blueprint.html" title="Chapter 6. OSGi 4.2 Blueprint Container"><link rel="next" href="app-deploy.html" title="Chapter 8. Packaging and Deploying Spring-based OSGi applications"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="bnd-app-ctx"></a>Chapter 7. 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="bnd-app-ctx:extender"></a>7.1. The Gemini Blueprint Extender Bundle</h2></div></div></div><div class="sidebar"><a name="extender-pattern"></a><p class="title"><b>Extender Pattern</b></p><p>A common pattern in OSGi applications is the <span class="emphasis"><em>extender</em></span>, that
+ (quoting <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.aqute.biz/Blog/HomePage" target="_top">Peter Kriens</a>,
+ OSGi Technical Director), “<span class="quote">allows other bundles to extend the functionality in a specific domain</span>”.
+ See <a xmlns:xlink="http://www.w3.org/1999/xlink" 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 xmlns:xlink="http://www.w3.org/1999/xlink" 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 href="app-deploy.html#app-deploy:headers" title="8.1. Bundle Format And Manifest Headers">Section 8.1, “Bundle Format And Manifest Headers”</a>
+ describes what the extender recognizes as a "Spring-powered bundle" while
+ <a href="app-deploy.html#app-deploy:extender-configuration" title="8.3. Extender Configuration Options">Section 8.3, “Extender Configuration Options”</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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="bnd-app-ctx:app-creation"></a>7.2. 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 href="app-deploy.html#app-deploy:headers" title="8.1. Bundle Format And Manifest Headers">Section 8.1, “Bundle Format And Manifest Headers”</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" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="bnd-app-ctx:app-creation:mandatory-deps"></a>7.2.1. 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 href="app-deploy.html#app-deploy:headers" title="8.1. Bundle Format And Manifest Headers">Section 8.1, “Bundle Format And Manifest Headers”</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 href="service-registry.html#service-registry:refs:availability" title="9.2.1. Imported Service Availability">Section 9.2.1, “Imported Service Availability”</a></p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="bnd-app-ctx:app-creation:app-ctx-publication"></a>7.2.2. 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 href="app-deploy.html#app-deploy:headers" title="8.1. Bundle Format And Manifest Headers">Section 8.1, “Bundle Format And Manifest Headers”</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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="bnd-app-ctx:bnd-lifecycle"></a>7.3. 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="bnd-app-ctx:osgi-resource"></a>7.4. The Resource Abstraction</h2></div></div></div><p>The Spring Framework defines a resource abstraction for loading
+ resources within an application context (see <a xmlns:xlink="http://www.w3.org/1999/xlink" 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 7.1. OSGi resource search strategies</b></p><div class="table-contents"><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 xmlns:xlink="http://www.w3.org/1999/xlink" 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 xmlns:xlink="http://www.w3.org/1999/xlink" 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="bnd-app-ctx:bundle-scope"></a>7.5. 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 href="service-registry.html" title="Chapter 9. The Service Registry">Chapter 9, <i xmlns:xlink="http://www.w3.org/1999/xlink">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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="bnd-app-ctx:access-bnd-ctx"></a>7.6. 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"><span class="hl-keyword">public</span> <span class="hl-keyword">interface</span> BundleContextAware {
+ <span class="hl-keyword">public</span> <span class="hl-keyword">void</span> 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="bnd-app-ctx:app-destruction"></a>7.7. 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="bnd-app-ctx:access-bnd-ctx:stop-extender"></a>7.8. Stopping the Extender Bundle</h2></div></div></div><div class="sidebar"><a name="shutdown-2.x"></a><p class="title"><b>Shutdown algorithm change in 2.x</b></p><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 type="1"><li><p><a name="bnd-app-ctx:access-bnd-ctx:stop-extender:shutdown.step.1"></a>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><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 href="bnd-app-ctx.html#bnd-app-ctx:access-bnd-ctx:stop-extender:shutdown.step.1">step 1</a> again.</p></li><li><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 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> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="app-deploy.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 6. OSGi 4.2 Blueprint Container </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"> Chapter 8. Packaging and Deploying Spring-based OSGi applications</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/bundles.html b/blueprint/documentation/reference/1.0.1.RELEASE/html/bundles.html
new file mode 100644
index 0000000..ea31493
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/bundles.html
@@ -0,0 +1,38 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Chapter 10. Working With Bundles</title><link rel="stylesheet" href="css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.72.0"><link rel="start" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="reference.html" title="Part II. Reference Documentation"><link rel="prev" href="service-registry.html" title="Chapter 9. The Service Registry"><link rel="next" href="compendium.html" title="Chapter 11. Compendium Services"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="bundles"></a>Chapter 10. 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"><<span class="hl-tag">bundle</span> <span class="hl-attribute">id</span>=<span class="hl-value">"aBundle"</span> <span class="hl-attribute">symbolic-name</span>=<span class="hl-value">"org.xyz.abundle"</span>/></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 10.1. <bundle> <code class="literal">action</code> values</b></p><div class="table-contents"><table summary="<bundle> 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"><<span class="hl-comment">!-- ensure this bundle is installed and started --</span>>
+<<span class="hl-tag">bundle</span> <span class="hl-attribute">id</span>=<span class="hl-value">"aBundle"</span> <span class="hl-attribute">symbolic-name</span>=<span class="hl-value">"org.xyz.abundle"</span>
+ <span class="hl-attribute">location</span>=<span class="hl-value">"http://www.xyz.com/bundles/org.xyz.abundle.jar"</span>
+ <span class="hl-attribute">action</span>=<span class="hl-value">"start"</span>/></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 10.2. <bundle> attributes</b></p><div class="table-contents"><table summary="<bundle> attributes" width="100%" border="1"><colgroup><col><col align="center"><col align="center"><col align="center"><col align="center"><col align="center"><col align="justify"></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> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="compendium.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 9. The Service Registry </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"> Chapter 11. Compendium Services</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/compendium.html b/blueprint/documentation/reference/1.0.1.RELEASE/html/compendium.html
new file mode 100644
index 0000000..bcc1dc5
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/compendium.html
@@ -0,0 +1,220 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Chapter 11. Compendium Services</title><link rel="stylesheet" href="css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.72.0"><link rel="start" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="reference.html" title="Part II. Reference Documentation"><link rel="prev" href="bundles.html" title="Chapter 10. Working With Bundles"><link rel="next" href="testing.html" title="Chapter 12. Testing OSGi based Applications"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="compendium"></a>Chapter 11. 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 class="hl-tag">?xml version="1.0" encoding="UTF-8"?</span>>
+<<span class="hl-tag">beans:beans</span> <span class="hl-attribute">xmlns</span>=<span class="hl-value">"http://www.springframework.org/schema/osgi"</span>
+ <span class="hl-attribute">xmlns:xsi</span>=<span class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span class="hl-attribute">xmlns:</span><span class="co"><img src="images/callouts/1.png" alt="(1)"></span><span class="hl-attribute">osgix</span>=<span class="hl-value">"http://www.springframework.org/schema/osgi-compendium"</span> <span class="co"><img src="images/callouts/1.png" alt="(1)"></span>
+ <span class="hl-attribute">xmlns:beans</span>=<span class="hl-value">"http://www.springframework.org/schema/beans"</span>
+ <span class="hl-attribute">xsi:schemaLocation</span>=<span class="hl-value">"http://www.springframework.org/schema/osgi
+ http://www.springframework.org/schema/osgi/spring-osgi.xsd
+ http://www.springframework.org/schema/osgi-compendium</span> <span class="co"><img src="images/callouts/2.png" alt="(2)"></span><span class="hl-value">
+ http://www.springframework.org/schema/osgi-compendium/spring-osgi-compendium.xsd</span> <span class="co"><img src="images/callouts/3.png" alt="(3)"></span><span class="hl-value">
+ http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans.xsd"</span>>
+
+ <<span class="hl-comment">!-- use the OSGi namespace elements directly --</span>>
+ <<span class="hl-tag">service</span> <span class="hl-attribute">id</span>=<span class="hl-value">"simpleServiceOsgi"</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"simpleService"</span>
+ <span class="hl-attribute">interface</span>=<span class="hl-value">"org.xyz.MyService"</span> />
+
+ <<span class="hl-comment">!-- qualify compendium namespace elements --</span>>
+ <<span class="hl-tag">osgix:cm-properties</span> <span class="hl-attribute">id</span>=<span class="hl-value">"cm"</span> <span class="hl-attribute">persistent-id</span>=<span class="hl-value">"com.xyz.myapp"</span>/>
+
+<<span class="hl-tag">/beans:beans</span>></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><img src="images/callouts/1.png" alt="1" border="0"></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"><img src="images/callouts/2.png" alt="2" border="0"></td><td valign="top" align="left"><p>Schema location (namespace URI)</p></td></tr><tr><td width="5%" valign="top" align="left"><img src="images/callouts/3.png" alt="3" border="0"></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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="compendium:cm"></a>11.1. Configuration Admin</h2></div></div></div><p>One of the most important compendium services, is the <a xmlns:xlink="http://www.w3.org/1999/xlink" 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" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="compendium:cm:props"></a>11.1.1. 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"><<span class="hl-tag">osgix:cm-properties</span> <span class="hl-attribute">id</span>=<span class="hl-value">"ds.cfg"</span> <span class="hl-attribute">persistent-id</span>=<span class="hl-value">"data.source.office.1"</span>/></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 xmlns:xlink="http://www.w3.org/1999/xlink" href="http://static.springframework.org/spring/docs/2.5.x/reference/xsd-config.html#xsd-config-body-schemas-util" target="_top">util namespace</a> will
+ find <code class="literal"><osgi:cm-properties/></code> element similar to <code class="literal"><util:properties/></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 class="hl-tag">?xml version="1.0" encoding="UTF-8"?</span>>
+<<span class="hl-tag">beans:beans</span> <span class="hl-attribute">xmlns</span>=<span class="hl-value">"http://www.springframework.org/schema/osgi-compendium"</span>
+ <span class="hl-attribute">xmlns:xsi</span>=<span class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span class="hl-attribute">xmlns:beans</span>=<span class="hl-value">"http://www.springframework.org/schema/beans"</span>
+ <span class="hl-attribute">xmlns:osgix</span>=<span class="hl-value">"http://www.springframework.org/schema/osgi-compendium"</span>
+ <span class="hl-attribute">xsi:schemaLocation</span>=<span class="hl-value">"
+ http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://www.springframework.org/schema/osgi-compendium
+ http://www.springframework.org/schema/osgi-compendium/spring-osgi-compendium.xsd"</span>>
+
+ <<span class="hl-tag">osgix:cm-properties</span> <span class="hl-attribute">id</span>=<span class="hl-value">"cfg.with.defaults"</span> <span class="hl-attribute">persistent-id</span>=<span class="hl-value">"data.source.office.2"</span>>
+ <<span class="hl-tag">beans:prop</span> <span class="hl-attribute">key</span>=<span class="hl-value">"host"</span>>localhost<<span class="hl-tag">/beans:prop</span>>
+ <<span class="hl-tag">beans:prop</span> <span class="hl-attribute">key</span>=<span class="hl-value">"port"</span>>3306<<span class="hl-tag">/beans:prop</span>>
+ <<span class="hl-tag">/osgix:cm-properties</span>>
+
+<<span class="hl-tag">/beans:beans</span>></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 xmlns:xlink="http://www.w3.org/1999/xlink" href="http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-factory-placeholderconfigurer" target="_top">PropertyPlaceholderConfigurer</a></code>
+ and <code class="classname"><a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-factory-overrideconfigurer" target="_top">PropertyOverrideConfigurer</a></code>
+ to externalize and customize environment-specific properties:</p><pre class="programlisting"><<span class="hl-tag">?xml version="1.0" encoding="UTF-8"?</span>>
+<<span class="hl-tag">beans</span> <span class="hl-attribute">xmlns</span>=<span class="hl-value">"http://www.springframework.org/schema/beans"</span>
+ <span class="hl-attribute">xmlns:xsi</span>=<span class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span class="hl-attribute">xmlns:osgix</span>=<span class="hl-value">"http://www.springframework.org/schema/osgi-compendium"</span>
+ <span class="hl-attribute">xmlns:ctx</span>=<span class="hl-value">"http://www.springframework.org/schema/context"</span>
+ <span class="hl-attribute">xsi:schemaLocation</span>=<span class="hl-value">"
+ http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://www.springframework.org/schema/context
+ http://www.springframework.org/schema/context/spring-context.xsd
+ http://www.springframework.org/schema/osgi-compendium
+ http://www.springframework.org/schema/osgi-compendium/spring-osgi-compendium.xsd"</span>>
+
+ <<span class="hl-comment">!-- Configuration Admin entry --</span>>
+ <<span class="hl-tag">osgix:cm-properties</span> <span class="hl-attribute">id</span>=<span class="hl-value">"cmProps"</span> <span class="hl-attribute">persistent-id</span>=<span class="hl-value">"com.xyz.myapp"</span>>
+ <<span class="hl-tag">prop</span> <span class="hl-attribute">key</span>=<span class="hl-value">"host"</span>>localhost<<span class="hl-tag">/prop</span>>
+ <<span class="hl-tag">/osgix:cm-properties</span>>
+
+ <<span class="hl-comment">!-- placeholder configurer --</span>>
+ <<span class="hl-tag">ctx:property-placeholder</span> <span class="hl-attribute">properties-ref</span>=<span class="hl-value">"cmProps"</span> />
+
+ <<span class="hl-tag">bean</span> <span class="hl-attribute">id</span>=<span class="hl-value">"dataSource"</span> <span class="hl-attribute">...></span>
+ <span class="hl-attribute"><property</span> <span class="hl-attribute">name</span>=<span class="hl-value">"host"</span> <span class="hl-attribute">value</span>=<span class="hl-value">"${host}"</span>/>
+ <<span class="hl-tag">property</span> <span class="hl-attribute">name</span>=<span class="hl-value">"timeout"</span> <span class="hl-attribute">value</span>=<span class="hl-value">"${timeout}"</span>/>
+ <<span class="hl-tag">/bean</span>>
+
+<<span class="hl-tag">/beans</span>></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" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="compendium:cm:managed-properties"></a>11.1.2. 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"><<span class="hl-tag">bean</span> <span class="hl-attribute">id</span>=<span class="hl-value">"managedComponent"</span> <span class="hl-attribute">class</span>=<span class="hl-value">"MessageTank"</span>>
+ <<span class="hl-tag">osgix:managed-properties</span> <span class="hl-attribute">persistent-id</span>=<span class="hl-value">"com.xyz.messageservice"</span>/>
+<<span class="hl-tag">/bean</span>></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"><span class="hl-keyword">public</span> <span class="hl-keyword">class</span> MessageTank {
+ <span class="hl-keyword">private</span> <span class="hl-keyword">int</span> amount;
+ <span class="hl-keyword">public</span> <span class="hl-keyword">int</span> getAmount() { <span class="hl-keyword">return</span> <span class="hl-keyword">this</span>.amount; }
+ <span class="hl-keyword">public</span> <span class="hl-keyword">void</span> setAmount(<span class="hl-keyword">int</span> amount) { <span class="hl-keyword">this</span>.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"><<span class="hl-tag">bean</span> <span class="hl-attribute">id</span>=<span class="hl-value">"managedComponent"</span> <span class="hl-attribute">class</span>=<span class="hl-value">"MessageTank"</span>>
+ <<span class="hl-tag">osgix:managed-properties</span> <span class="hl-attribute">persistent-id</span>=<span class="hl-value">"com.xyz.messageservice"</span>/>
+ <<span class="hl-tag">property</span> <span class="hl-attribute">name</span>=<span class="hl-value">"amount"</span> <span class="hl-attribute">value</span>=<span class="hl-value">"100"</span>/>
+ <<span class="hl-tag">property</span> <span class="hl-attribute">name</span>=<span class="hl-value">"threshold"</span> <span class="hl-attribute">value</span>=<span class="hl-value">"500"</span>/>
+<<span class="hl-tag">/bean</span>></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" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="compendium:cm:managed-properties:update"></a>11.1.2.1. 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">update-strategy</code>
+ attribute, which can have a value of either <code class="literal">bean-managed</code> or <code class="literal">container-managed</code>.</p><p><code class="literal">bean-managed</code> strategy will pass all the updates made to the configuration to a callback present on the bean, specified
+ through the <code class="literal">update-method</code> attribute (which becomes required). The update method must have one of the following signatures:</p><pre class="programlisting"><span class="hl-keyword">public</span> <span class="hl-keyword">void</span> anyMethodName(Map properties)
+<span class="hl-keyword">public</span> <span class="hl-keyword">void</span> anyMethodName(Map<String,?> properties); <span class="hl-comment">// for Java 5</span></pre><p>In contrast, the <code class="literal">container-managed</code> update strategy will re-inject bean properties by name based on the new properties
+ received in the update. For <code class="literal">container-managed</code> updates, 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"><span class="hl-keyword">public</span> <span class="hl-keyword">class</span> ContainerManagedBean {
+ <span class="hl-comment">// will be reinjected (since it has a setter)</span>
+ <span class="hl-keyword">private</span> Integer integer;
+ <span class="hl-comment">// will not be reinjected (no setter present)</span>
+ <span class="hl-keyword">private</span> Long waitTime;
+
+ <span class="hl-keyword">public</span> <span class="hl-keyword">void</span> setInteger(Integer integer) { <span class="hl-keyword">this</span>.integer = integer; }
+}
+
+
+<span class="hl-keyword">public</span> <span class="hl-keyword">class</span> SelfManagedBean {
+
+ <span class="hl-comment">// update callback</span>
+ <span class="hl-keyword">public</span> <span class="hl-keyword">void</span> updateCallback(Map properties) {
+ System.out.println(<span class="hl-string">"Received properties "</span> + properties);
+ System.out.println(<span class="hl-string">"Props can be used as a Dictionary "</span> + (Dictionary) properties);
+ <span class="hl-comment">// do more work ... </span>
+ }
+}</pre><p>and configuraton:</p><pre class="programlisting"><<span class="hl-tag">bean</span> <span class="hl-attribute">id</span>=<span class="hl-value">"containerManaged"</span> <span class="hl-attribute">class</span>=<span class="hl-value">"ContainerManagedBean"</span>>
+ <<span class="hl-tag">osgix:managed-properties</span> <span class="hl-attribute">persistent-id</span>=<span class="hl-value">"labX"</span> <span class="hl-attribute">update-strategy</span>=<span class="hl-value">"container-managed"</span>/>
+ <<span class="hl-tag">property</span> <span class="hl-attribute">name</span>=<span class="hl-value">"integer"</span> <span class="hl-attribute">value</span>=<span class="hl-value">"23"</span>/>
+<<span class="hl-tag">/bean</span>>
+
+<<span class="hl-tag">bean</span> <span class="hl-attribute">id</span>=<span class="hl-value">"beanManaged"</span> <span class="hl-attribute">class</span>=<span class="hl-value">"SelfManagedBean"</span>>
+ <<span class="hl-tag">osgix:managed-properties</span> <span class="hl-attribute">persistent-id</span>=<span class="hl-value">"labY"</span> <span class="hl-attribute">update-strategy</span>=<span class="hl-value">"bean-managed"</span> <span class="hl-attribute">update-method</span>=<span class="hl-value">"updateCallback"</span>/>
+<<span class="hl-tag">/bean</span>></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 11.1. Managed Properties Update Options</b></p><div class="table-contents"><table summary="Managed Properties Update Options" width="100%" border="1"><colgroup><col><col><col></colgroup><thead><tr><th><code class="literal">update-strategy</code></th><th><code class="literal">update-method</code></th><th>Behaviour</th></tr></thead><tbody><tr><td><code class="literal">container-managed</code></td><td><span class="emphasis"><em>ignored</em></span></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">bean-managed</code> approach.</td></tr><tr><td><code class="literal">bean-managed</code></td><td><span class="emphasis"><em>required</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" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="compendium:cm:managed-service-factories"></a>11.1.3. 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"><osgix:managed-service-factory id=<span class="hl-string">"simple-msf"</span>
+ factory-pid=<span class="hl-string">"com.xyz.messageservice"</span> <span class="co"><img src="images/callouts/1.png" alt="(1)"></span>
+ auto-export=<span class="hl-string">"all-classes"</span>> <span class="co"><img src="images/callouts/2.png" alt="(2)"></span>
+
+ <bean <span class="hl-keyword">class</span>=<span class="hl-string">"com.xyz.MessageTank"</span>/> <span class="co"><img src="images/callouts/3.png" alt="(3)"></span>
+</osgix:managed-service-factory></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><img src="images/callouts/1.png" alt="1" border="0"></td><td valign="top" align="left"><p>factory persistent id (pid)</p></td></tr><tr><td width="5%" valign="top" align="left"><img src="images/callouts/2.png" alt="2" border="0"></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"><img src="images/callouts/3.png" alt="3" border="0"></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 href="service-registry.html#service-registry:export" title="9.1. Exporting A Spring Bean As An OSGi Service"><code class="literal">service</code></a> element but supporting the concept of
+ <a href="compendium.html#compendium:cm:managed-properties" title="11.1.2. 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 11.2. Managed Service Factory Options</b></p><div class="table-contents"><table summary="Managed Service Factory Options" width="100%" border="1"><colgroup><col><col><col><col><col><col></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">update-strategy</td><td align="center">none <code class="literal">(default)</code></td><td align="center">bean-managed</td><td colspan="2" align="center">container-managed</td><td align="center">Defines the update strategy for configuration modifications made after the associated beans have been created.</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 href="service-registry.html#service-registry:export:intfs" title="9.1.3. Controlling The Set Of Advertised Service Interfaces For An Exported Service">Section 9.1.3, “Controlling The Set Of Advertised Service Interfaces For
+ An Exported Service”</a> and
+ <a href="service-registry.html#service-registry:export:lifecycle" title="9.1.10. Service Registration And Unregistration Lifecycle">Section 9.1.10, “Service Registration And Unregistration Lifecycle”</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"><<span class="hl-tag">bean</span> <span class="hl-attribute">id</span>=<span class="hl-value">"queueTracker"</span> <span class="hl-attribute">class</span>=<span class="hl-value">"org.xyz.queue.QueueTracker"</span>/>
+
+<<span class="hl-tag">osgix:managed-service-factory</span> <span class="hl-attribute">id</span>=<span class="hl-value">"data-msf"</span>
+ <span class="hl-attribute">factory-pid</span>=<span class="hl-value">"org.xyz.labX"</span> <span class="co"><img src="images/callouts/1.png" alt="(1)"></span>
+ <span class="hl-attribute">update-strategy</span>=<span class="hl-value">"bean-managed"</span> <span class="co"><img src="images/callouts/2.png" alt="(2)"></span>
+ <span class="hl-attribute">update-method</span>=<span class="hl-value">"refresh"</span>> <span class="co"><img src="images/callouts/3.png" alt="(3)"></span>
+ <<span class="hl-tag">osgix:interfaces</span>>
+ <<span class="hl-tag">value</span>>java.util.Collection<<span class="hl-tag">/value</span>> <span class="co"><img src="images/callouts/4.png" alt="(4)"></span>
+ <<span class="hl-tag">value</span>>java.util.Queue<<span class="hl-tag">/value</span>> <span class="co"><img src="images/callouts/4.png" alt="(4)"></span>
+ <<span class="hl-tag">/osgix:interfaces</span>>
+ <<span class="hl-tag">osgix:registration-listener</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"queueTracker"</span> <span class="co"><img src="images/callouts/5.png" alt="(5)"></span>
+ <span class="hl-attribute">registration-method</span>=<span class="hl-value">"track"</span> <span class="co"><img src="images/callouts/6.png" alt="(6)"></span>
+ <span class="hl-attribute">unregistration-method</span>=<span class="hl-value">"untrack"</span>/> <span class="co"><img src="images/callouts/7.png" alt="(7)"></span>
+
+ <<span class="hl-tag">bean</span> <span class="hl-attribute">class</span>=<span class="hl-value">"com.xyz.ResizableQueue"</span>> <span class="co"><img src="images/callouts/8.png" alt="(8)"></span>
+ <<span class="hl-tag">property</span> <span class="hl-attribute">name</span>=<span class="hl-value">"size"</span> <span class="hl-attribute">value</span>=<span class="hl-value">"100"</span>/>
+ <<span class="hl-tag">property</span> <span class="hl-attribute">name</span>=<span class="hl-value">"concurrency"</span> <span class="hl-attribute">value</span>=<span class="hl-value">"10"</span>/>
+ <<span class="hl-tag">property</span> <span class="hl-attribute">name</span>=<span class="hl-value">"fair"</span> <span class="hl-attribute">value</span>=<span class="hl-value">"false"</span>/>
+ <<span class="hl-tag">/bean</span>>
+<<span class="hl-tag">/osgix:managed-service-factory</span>></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><img src="images/callouts/1.png" alt="1" border="0"></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"><img src="images/callouts/2.png" alt="2" border="0"></td><td valign="top" align="left"><p>how should Gemini Blueprint behave when a <code class="interfacename">Configuration</code> is updated</p></td></tr><tr><td width="5%" valign="top" align="left"><img src="images/callouts/3.png" alt="3" border="0"></td><td valign="top" align="left"><p>the method to invoke when for <code class="literal">bean-managed</code> updates</p></td></tr><tr><td width="5%" valign="top" align="left"><img src="images/callouts/4.png" alt="4" border="0"></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"><img src="images/callouts/5.png" alt="5" border="0"></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"><img src="images/callouts/6.png" alt="6" border="0"></td><td valign="top" align="left"><p>custom (optional) service registration method</p></td></tr><tr><td width="5%" valign="top" align="left"><img src="images/callouts/7.png" alt="7" border="0"></td><td valign="top" align="left"><p>custom (optional) service unregistration method</p></td></tr><tr><td width="5%" valign="top" align="left"><img src="images/callouts/8.png" alt="8" border="0"></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">update-strategy</code>, any updates executed to each CM configuration will cause the
+ <code class="methodname">refresh</code> callback to be invoked on the associated bean instance.</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="compendium:cm:dict"></a>11.1.4. 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"><<span class="hl-tag">osgi:service</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"org.osgi.service.cm.ManagedService"</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"myManagedService"</span>>
+ <<span class="hl-tag">osgi:service-properties</span>>
+ <<span class="hl-tag">entry</span> <span class="hl-attribute">key</span>=<span class="hl-value">"service.pid"</span> <span class="hl-attribute">value</span>=<span class="hl-value">"my.managed.service.pid"</span>/>
+ <<span class="hl-tag">/osgi:service-properties</span>>
+<<span class="hl-tag">/osgi:service</span>>
+
+<<span class="hl-tag">bean</span> <span class="hl-attribute">id</span>=<span class="hl-value">"myManagedService"</span> <span class="hl-attribute">class</span>=<span class="hl-value">"com.xyz.MyManagedService"</span>/></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> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="testing.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 10. Working With Bundles </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"> Chapter 12. Testing OSGi based Applications</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/css/highlight.css b/blueprint/documentation/reference/1.0.1.RELEASE/html/css/highlight.css
new file mode 100644
index 0000000..525efc4
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/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/blueprint/documentation/reference/1.0.1.RELEASE/html/css/html.css b/blueprint/documentation/reference/1.0.1.RELEASE/html/css/html.css
new file mode 100644
index 0000000..12968a2
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/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/blueprint/documentation/reference/1.0.1.RELEASE/html/eclipse-migration.html b/blueprint/documentation/reference/1.0.1.RELEASE/html/eclipse-migration.html
new file mode 100644
index 0000000..f8222da
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/eclipse-migration.html
@@ -0,0 +1,15 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Chapter 1. Spring Dynamic Modules becomes Eclipse Gemini Blueprint</title><link rel="stylesheet" href="css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.72.0"><link rel="start" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="introduction.html" title="Part I. Introduction"><link rel="prev" href="introduction.html" title="Part I. Introduction"><link rel="next" href="why-Spring DM.html" title="Chapter 2. Why Gemini Blueprint?"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="eclipse-migration"></a>Chapter 1. Spring Dynamic Modules becomes Eclipse Gemini Blueprint</h2></div></div></div><p>
+ In late 2009, as a member of the Gemini project <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://eclipse.org/proposals/gemini/" target="_top">proposal</a>,
+ SpringSource <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://blog.springsource.com/2009/11/24/gemini-project-proposal-at-eclipse-org/" target="_top">contributed</a> Spring Dynamic Modules
+ (also known as Spring OSGi) <a xmlns:xlink="http://www.w3.org/1999/xlink" 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 remained the same. Existing Spring DM applications can be easily migrated to Eclipse Gemini Blueprint
+ as mentioned in the migration <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://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 xmlns:xlink="http://www.w3.org/1999/xlink" 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> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="why-Spring DM.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part I. Introduction </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"> Chapter 2. Why Gemini Blueprint?</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/faq.html b/blueprint/documentation/reference/1.0.1.RELEASE/html/faq.html
new file mode 100644
index 0000000..a5fe0cf
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/faq.html
@@ -0,0 +1,14 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Eclipse Gemini Blueprint</title><link rel="stylesheet" href="css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.72.0"><link rel="start" href="faq.html" title="Eclipse Gemini Blueprint"><link rel="next" href="spring-osgi-faq.html" title="Chapter 1. Frequently Asked Questions"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="book" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="d889e1"></a>Eclipse Gemini Blueprint</h1></div><div><h2 class="subtitle">Frequently Asked Questions</h2></div><div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="authorgroup"><h2>Authors</h2><p></p><span class="author"><span class="firstname">Costin</span> <span class="surname">Leau</span>
+ (SpringSource)
+ </span></div></div><div><p class="releaseinfo"></p></div><div><p class="copyright">Copyright © 2006 -, 2011 VMware Inc., Oracle Inc.</p></div><div><div class="legalnotice"><a name="d889e16"></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 xmlns:xlink="http://www.w3.org/1999/xlink" 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 xmlns:xlink="http://www.w3.org/1999/xlink" 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><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"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="spring-osgi-faq.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </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"> Chapter 1. Frequently Asked Questions</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/get-started.html b/blueprint/documentation/reference/1.0.1.RELEASE/html/get-started.html
new file mode 100644
index 0000000..c0c0703
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/get-started.html
@@ -0,0 +1,37 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Chapter 4. Getting Started</title><link rel="stylesheet" href="css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.72.0"><link rel="start" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="introduction.html" title="Part I. Introduction"><link rel="prev" href="requirements.html" title="Chapter 3. Requirements"><link rel="next" href="what-is-new.html" title="Chapter 5. What is new?"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="get-started"></a>Chapter 4. Getting Started</h2></div></div></div><p>Learning a new framework is not always straight forward. 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="get-started:first-steps"></a>4.1. First Steps</h2></div></div></div><p>As explained in <a href="why-Spring DM.html" title="Chapter 2. Why Gemini Blueprint?">Chapter 2, <i xmlns:xlink="http://www.w3.org/1999/xlink">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" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="get-started:first-steps:spring"></a>4.1.1. Knowing Spring</h3></div></div></div><p>Gemini Blueprint uses heavily Spring framework's <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://static.springframework.org/spring/docs/2.5.x/reference/spring-core.html" target="_top">core</a> functionalty,
+ such as the <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://static.springframework.org/spring/docs/2.5.x/reference/beans.html" target="_top">IoC</a> container,
+ <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://static.springframework.org/spring/docs/2.5.x/reference/resources.html" target="_top">resource</a> abstract or
+ <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://static.springframework.org/spring/docs/2.5.x/reference/aop.html" target="_top">AOP</a> infrastructure. While it is not important
+ to know the Spring APIs, understanding the concepts behind them is. At a minimum, the idea behind IoC should be familiar.
+ These being said, the more knowledge one has about the Spring, the faster she will pick Gemini Blueprint.
+ Besides the very comprehensive (and sometimes disarming) documentation that explains in detail the Spring Framework,
+ there are a lot of articles, blog entries and books on the matter - take a look at the Spring framework
+ <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.springsource.org/documentation" 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" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="get-started:first-steps:osgi"></a>4.1.2. Knowing OSGi</h3></div></div></div><p>Java developers, new to OSGi, can start by reading the OSGi Alliance <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.osgi.org/About/HowOSGi" target="_top">introduction</a>,
+ the OSGi <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.osgi.org/Specifications/HomePage" target="_top">specifications</a> or one of the articles/blogs
+ available on the internet (such as the SpringSource <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://blog.springsource.com/category/osgi/" target="_top">blogs</a>).
+ Additionally, the Gemini Blueprint home <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.springframework.org/osgi" target="_top">page</a> hosts various links to useful materials.
+ </p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="get-started:first-steps:blueprint"></a>4.1.3. Quick start - OSGi 4.2 Blueprint Container</h3></div></div></div><p>As an alternative to the recommended Spring documentation, if OSGi 4.2 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="get-started:help"></a>4.2. Need Help?</h2></div></div></div><p>If you encounter issues or you are just looking for an advice, feel free to use one of the links below:</p><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="get-started:help:community"></a>4.2.1. Community Support</h3></div></div></div><p>The Gemini Blueprint <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.eclipse.org/forums/index.php/f/153/" target="_top">forum</a>
+ (and Spring DM previous <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://forum.springframework.org/forumdisplay.php?f=43" target="_top">forum</a>) is a message board for all Gemini Blueprint users to
+ share information and help each other. Note that registration is needed <span class="emphasis"><em>only</em></span> for posting.
+ </p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="get-started:help:professional"></a>4.2.2. Professional Support</h3></div></div></div><p>Professional, from-the-source support, with guaranteed response time, is available from <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.springsource.com" target="_top">SpringSource</a>,
+ the company behind Gemini Blueprint and Spring.
+ </p></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="get-started:up-to-date"></a>4.3. 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 xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.springsource.org/osgi" 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 xmlns:xlink="http://www.w3.org/1999/xlink" href="http://forum.springsource.org" target="_top">forums</a>.</p><p>If you encounter a bug or want to suggest an improvement,
+ please create a ticket on the Gemini Blueprint issue <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://jira.springframework.org/" 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 xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.springframework.org/" target="_top">Portal</a>.</p><p>Lastly, you can follow the SpringSource OSGi <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://blog.springsource.com/category/osgi/" target="_top">blog</a> or the project team on Twitter
+ (<a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://twitter.com/adriancolyer" target="_top">Adrian</a>, <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://twitter.com/costinl" target="_top">Costin</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> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="what-is-new.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 3. Requirements </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"> Chapter 5. What is new?</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/images/bundle-states.png b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/bundle-states.png
new file mode 100644
index 0000000..323cdc2
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/bundle-states.png
Binary files differ
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/images/deadlock.png b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/deadlock.png
new file mode 100644
index 0000000..fd49b83
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/deadlock.png
Binary files differ
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/images/i21-banner-rhs.jpg b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/i21-banner-rhs.jpg
new file mode 100644
index 0000000..8b24a77
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/i21-banner-rhs.jpg
Binary files differ
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/find-install.png b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/find-install.png
new file mode 100644
index 0000000..ace425f
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/find-install.png
Binary files differ
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/preferences.png b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/preferences.png
new file mode 100644
index 0000000..3612ad0
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/preferences.png
Binary files differ
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/select-pde-1.png b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/select-pde-1.png
new file mode 100644
index 0000000..b729526
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/select-pde-1.png
Binary files differ
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/select-pde-2.png b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/select-pde-2.png
new file mode 100644
index 0000000..17d887d
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/select-pde-2.png
Binary files differ
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/select-plugins-view.png b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/select-plugins-view.png
new file mode 100644
index 0000000..e0ddaeb
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/select-plugins-view.png
Binary files differ
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/show-plugins.png b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/show-plugins.png
new file mode 100644
index 0000000..c91089b
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/show-plugins.png
Binary files differ
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/spring-osgi-plugin.png b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/spring-osgi-plugin.png
new file mode 100644
index 0000000..c33fc1f
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/spring-osgi-plugin.png
Binary files differ
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/springide-site-select.png b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/springide-site-select.png
new file mode 100644
index 0000000..27cf0dc
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/springide-site-select.png
Binary files differ
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/springide-site.png b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/springide-site.png
new file mode 100644
index 0000000..da07781
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/springide-site.png
Binary files differ
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/target-select.png b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/target-select.png
new file mode 100644
index 0000000..28979ed
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/pde/target-select.png
Binary files differ
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/images/s2-banner-rhs.png b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/s2-banner-rhs.png
new file mode 100644
index 0000000..a9f6d95
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/s2-banner-rhs.png
Binary files differ
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/images/s2_box_logo.png b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/s2_box_logo.png
new file mode 100644
index 0000000..8c778a5
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/s2_box_logo.png
Binary files differ
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/images/spring-osgi-model.png b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/spring-osgi-model.png
new file mode 100644
index 0000000..8e958db
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/spring-osgi-model.png
Binary files differ
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/images/start-diagram.png b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/start-diagram.png
new file mode 100644
index 0000000..9dcddce
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/start-diagram.png
Binary files differ
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/images/stop-diagram.png b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/stop-diagram.png
new file mode 100644
index 0000000..6e72b9f
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/stop-diagram.png
Binary files differ
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/images/visibility.png b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/visibility.png
new file mode 100644
index 0000000..47d306e
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/visibility.png
Binary files differ
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/images/xdev-spring_logo.jpg b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/xdev-spring_logo.jpg
new file mode 100644
index 0000000..622962e
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/images/xdev-spring_logo.jpg
Binary files differ
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/index.html b/blueprint/documentation/reference/1.0.1.RELEASE/html/index.html
new file mode 100644
index 0000000..f38deff
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/index.html
@@ -0,0 +1,19 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Eclipse Gemini Blueprint Reference Guide</title><link rel="stylesheet" href="css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.72.0"><link rel="start" 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" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="d18e1"></a>Eclipse Gemini Blueprint Reference Guide</h1></div><div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="authorgroup"><h2>Authors</h2><p></p><span class="author"><span class="firstname">Adrian M</span> <span class="surname">Colyer</span>
+ (SpringSource, division of VMware)
+ </span>, <span class="author"><span class="firstname">Hal</span> <span class="surname">Hildebrand</span>
+ (Oracle)
+ </span>, <span class="author"><span class="firstname">Costin</span> <span class="surname">Leau</span>
+ (SpringSource, division of VMware)
+ </span>, <span class="author"><span class="firstname">Andy</span> <span class="surname">Piper</span>
+ (BEA)
+ </span></div></div><div><p class="releaseinfo"></p></div><div><p class="copyright">Copyright © 2006 -, 2011 VMware Inc., Oracle Inc.</p></div><div><div class="legalnotice"><a name="d18e35"></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 xmlns:xlink="http://www.w3.org/1999/xlink" 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 xmlns:xlink="http://www.w3.org/1999/xlink" 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><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 4.2 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#dm-2.0.x">5.1. Gemini Blueprint</a></span></dt><dd><dl><dt><span class="section"><a href="what-is-new.html#dm-2.0.x:blueprint">5.1.1. OSGi 4.2 Blueprint Reference Implementation (RI)</a></span></dt><dt><span class="section"><a href="what-is-new.html#dm-2.0.x:jdk5">5.1.2. Java 5</a></span></dt><dt><span class="section"><a href="what-is-new.html#dm-2.0.x:spring-3.x">5.1.3. Spring 3.x</a></span></dt><dt><span class="section"><a href="what-is-new.html#dm-2.0.x:imports">5.1.4. Service Importer Improvements</a></span></dt><dt><span class="section"><a href="what-is-new.html#dm-2.0.x:security">5.1.5. Java 2 Security Integration</a></span></dt></dl></dd><dt><span class="section"><a href="what-is-new.html#dm-1.2.x">5.2. Spring DM 1.2.x</a></span></dt><dd><dl><dt><span class="section"><a href="what-is-new.html#dm-1.2.x:security">5.2.1. Java 2 Security Integration</a></span></dt><dt><span class="section"><a href="what-is-new.html#dm-1.2.x:compendium">5.2.2. Compendium Services Support</a></span></dt><dt><span class="section"><a href="what-is-new.html#dm-1.2.x:sym-name-change">5.2.3. Changed Spring DM Symbolic Names</a></span></dt><dt><span class="section"><a href="what-is-new.html#dm-1.2.x:ebr-usage">5.2.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:spring-namespaces">8.5. Spring XML Authoring Support</a></span></dt><dt><span class="section"><a href="app-deploy.html#app-deploy:imports-exports">8.6. Importing and Exporting Packages</a></span></dt><dt><span class="section"><a href="app-deploy.html#app-deploy:ext-libs">8.7. Considerations When Using External Libraries</a></span></dt><dt><span class="section"><a href="app-deploy.html#app-deploy:troubleshooting">8.8. 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:refs:availability">9.2.1. Imported Service Availability</a></span></dt><dd><dl><dt><span class="section"><a href="service-registry.html#service-registry:refs:availability:startup">9.2.1.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.1.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.2. 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.2.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.2.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.2.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.2.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.2.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.2.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.2.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.2.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.2.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.2.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.3. 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.3.1. Greedy Proxying</a></span></dt><dt><span class="section"><a href="service-registry.html#service-registry:refs:collection:member-type">9.2.3.2. Member Type</a></span></dt><dt><span class="section"><a href="service-registry.html#service-registry:refs:collection:attributes">9.2.3.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.3.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.3.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.4. 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.5. 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#d18e6580">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"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="preface.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </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"> Preface</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/introduction.html b/blueprint/documentation/reference/1.0.1.RELEASE/html/introduction.html
new file mode 100644
index 0000000..fc1f1f3
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/introduction.html
@@ -0,0 +1,18 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Part I. Introduction</title><link rel="stylesheet" href="css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.72.0"><link rel="start" 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 1. Spring Dynamic Modules becomes Eclipse Gemini Blueprint"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="introduction"></a>Part I. Introduction</h1></div></div></div><div class="partintro" lang="en"><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 xmlns:xlink="http://www.w3.org/1999/xlink" 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 href="get-started.html" title="Chapter 4. Getting Started">Chapter 4, <i xmlns:xlink="http://www.w3.org/1999/xlink">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> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="eclipse-migration.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Preface </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"> Chapter 1. Spring Dynamic Modules becomes Eclipse Gemini Blueprint</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/issues.html b/blueprint/documentation/reference/1.0.1.RELEASE/html/issues.html
new file mode 100644
index 0000000..d11ac2d
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/issues.html
@@ -0,0 +1,10 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Eclipse Gemini Blueprint</title><link rel="stylesheet" href="css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.72.0"><link rel="start" 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" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="d0e1"></a>Eclipse Gemini Blueprint</h1></div><div><h2 class="subtitle">Known Issues</h2></div><div><div xmlns:fo="http://www.w3.org/1999/XSL/Format" class="authorgroup"><h2>Authors</h2><p></p><span class="author"><span class="firstname">Costin</span> <span class="surname">Leau</span>
+ (SpringSource, division of VMware)
+ </span></div></div><div><p class="releaseinfo"></p></div><div><p class="copyright">Copyright © 2006 -, 2011 VMware Inc., Oracle Inc.</p></div><div><div class="legalnotice"><a name="d0e16"></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 xmlns:xlink="http://www.w3.org/1999/xlink" 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 xmlns:xlink="http://www.w3.org/1999/xlink" 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><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"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="preface.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </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"> Preface</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/known-issues.html b/blueprint/documentation/reference/1.0.1.RELEASE/html/known-issues.html
new file mode 100644
index 0000000..ecbc7cb
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/known-issues.html
@@ -0,0 +1,7 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Chapter 1. Known Issues</title><link rel="stylesheet" href="css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.72.0"><link rel="start" 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" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="known-issues"></a>Chapter 1. Known Issues</h2></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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="OSGI-237"></a>1.1. 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 xmlns:xlink="http://www.w3.org/1999/xlink" 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> </td><td width="20%" align="center"><a accesskey="h" href="issues.html">Home</a></td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top">Preface </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"> </td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/links.html b/blueprint/documentation/reference/1.0.1.RELEASE/html/links.html
new file mode 100644
index 0000000..120379e
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/links.html
@@ -0,0 +1,13 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Chapter 13. Useful Links</title><link rel="stylesheet" href="css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.72.0"><link rel="start" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="resources.html" title="Part III. Other Resources"><link rel="prev" href="resources.html" title="Part III. Other Resources"><link rel="next" href="appendixes.html" title="Part IV. Appendixes"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="links"></a>Chapter 13. Useful Links</h2></div></div></div><div class="itemizedlist"><ul type="disc"><li><span class="emphasis"><em>Eclipse Gemini Blueprint Home Page</em></span> - <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.eclipse.org/gemini/blueprint/" target="_top">here</a></li><li><span class="emphasis"><em>SpringSource OSGi blog</em></span> - <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://blog.springsource.com/category/osgi/" target="_top">here</a></li><li><span class="emphasis"><em>Spring DM Demos</em></span> - <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.springframework.org/osgi/demos" target="_top">here</a></li><li><span class="emphasis"><em>Getting Started with OSGi</em></span> - by Neil Bartlett
+ <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://neilbartlett.name/blog/osgi-articles/" target="_top">here</a> and
+ <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.eclipse.org/resources/?author=Neil%20Bartlett" target="_top">here</a>.
+ </li><li><span class="emphasis"><em>Equinox Documents</em></span> -
+ <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.eclipse.org/equinox/documents/" target="_top">here</a></li><li><span class="emphasis"><em>Felix-related presentations</em></span> - various
+ <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://felix.apache.org/site/presentations.html" target="_top">presentations</a>
+ hosted by Apache Felix project.
+ </li><li><span class="emphasis"><em>Launching Gemini Blueprint using pax-runner</em></span> -
+ <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://wiki.ops4j.org/confluence/display/ops4j/Pax+Runner+-+Screencast+-+Spring+OSGi" target="_top">
+ screencast</a></li><li><span class="emphasis"><em>OSGi Alliance Blog</em></span> - <a xmlns:xlink="http://www.w3.org/1999/xlink" 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> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="appendixes.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part III. Other Resources </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"> Part IV. Appendixes</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/preface.html b/blueprint/documentation/reference/1.0.1.RELEASE/html/preface.html
new file mode 100644
index 0000000..2c83ea2
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/preface.html
@@ -0,0 +1,23 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Preface</title><link rel="stylesheet" href="css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.72.0"><link rel="start" 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 I. Introduction"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="preface" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="preface"></a>Preface</h2></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 xmlns:xlink="http://www.w3.org/1999/xlink" 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 powerful, non-invasive programming model and
+ concepts with the dynamics and modularity of 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 xmlns:xlink="http://www.w3.org/1999/xlink" 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 xmlns:xlink="http://www.w3.org/1999/xlink" 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> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="introduction.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Eclipse Gemini Blueprint Reference Guide </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"> Part I. Introduction</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/reference.html b/blueprint/documentation/reference/1.0.1.RELEASE/html/reference.html
new file mode 100644
index 0000000..ac1f220
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/reference.html
@@ -0,0 +1,29 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Part II. Reference Documentation</title><link rel="stylesheet" href="css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.72.0"><link rel="start" 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 5. What is new?"><link rel="next" href="blueprint.html" title="Chapter 6. OSGi 4.2 Blueprint Container"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="reference"></a>Part II. Reference Documentation</h1></div></div></div><div class="partintro" lang="en"><div><div><div><h1 class="title"><a name="d18e412"></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 href="blueprint.html" title="Chapter 6. OSGi 4.2 Blueprint Container">Chapter 6, <i xmlns:xlink="http://www.w3.org/1999/xlink">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 href="bnd-app-ctx.html" title="Chapter 7. Bundles and Application Contexts">Chapter 7, <i xmlns:xlink="http://www.w3.org/1999/xlink">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 href="app-deploy.html" title="Chapter 8. Packaging and Deploying Spring-based OSGi applications">Chapter 8, <i xmlns:xlink="http://www.w3.org/1999/xlink">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 href="service-registry.html" title="Chapter 9. The Service Registry">Chapter 9, <i xmlns:xlink="http://www.w3.org/1999/xlink">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 href="bundles.html" title="Chapter 10. Working With Bundles">Chapter 10, <i xmlns:xlink="http://www.w3.org/1999/xlink">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 href="compendium.html" title="Chapter 11. Compendium Services">Chapter 11, <i xmlns:xlink="http://www.w3.org/1999/xlink">Compendium Services</i></a> describes the support provided
+ for the <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www2.osgi.org/Release4/Download" target="_top">OSGi
+ Compendium Services</a>, specifically the Configuration Admin
+ service.</p><p><a href="testing.html" title="Chapter 12. Testing OSGi based Applications">Chapter 12, <i xmlns:xlink="http://www.w3.org/1999/xlink">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> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="blueprint.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 5. What is new? </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"> Chapter 6. OSGi 4.2 Blueprint Container</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/requirements.html b/blueprint/documentation/reference/1.0.1.RELEASE/html/requirements.html
new file mode 100644
index 0000000..3aa0d08
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/requirements.html
@@ -0,0 +1,14 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Chapter 3. Requirements</title><link rel="stylesheet" href="css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.72.0"><link rel="start" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="introduction.html" title="Part I. Introduction"><link rel="prev" href="why-Spring DM.html" title="Chapter 2. Why Gemini Blueprint?"><link rel="next" href="get-started.html" title="Chapter 4. Getting Started"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="requirements"></a>Chapter 3. Requirements</h2></div></div></div><p>Gemini Blueprint 1.x binaries requires JDK level 5.0 and above,
+ and <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www2.osgi.org/Specifications/HomePage?section=2" target="_top">OSGi
+ R4.2</a> (though R4.1 and even R4.0 might work) and above. For JDK 1.4, 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 xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.eclipse.org/equinox/" target="_top">Equinox</a> 3.6.x, <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://felix.apache.org/" target="_top">Felix</a> 2.0.0+, and <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.knopflerfish.org/" target="_top">Knopflerfish</a> 3.0.x as part of our
+ continuous integration 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> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="get-started.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 2. Why Gemini Blueprint? </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"> Chapter 4. Getting Started</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/resources.html b/blueprint/documentation/reference/1.0.1.RELEASE/html/resources.html
new file mode 100644
index 0000000..92b8219
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/resources.html
@@ -0,0 +1,9 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Part III. Other Resources</title><link rel="stylesheet" href="css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.72.0"><link rel="start" 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 12. Testing OSGi based Applications"><link rel="next" href="links.html" title="Chapter 13. Useful Links"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="part" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="resources"></a>Part III. Other Resources</h1></div></div></div><div class="partintro" lang="en"><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> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="links.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 12. Testing OSGi based Applications </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"> Chapter 13. Useful Links</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/service-registry.html b/blueprint/documentation/reference/1.0.1.RELEASE/html/service-registry.html
new file mode 100644
index 0000000..90bad75
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/service-registry.html
@@ -0,0 +1,991 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Chapter 9. The Service Registry</title><link rel="stylesheet" href="css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.72.0"><link rel="start" href="index.html" title="Eclipse Gemini Blueprint Reference Guide"><link rel="up" href="reference.html" title="Part II. Reference Documentation"><link rel="prev" href="app-deploy.html" title="Chapter 8. Packaging and Deploying Spring-based OSGi applications"><link rel="next" href="bundles.html" title="Chapter 10. Working With Bundles"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="service-registry"></a>Chapter 9. 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 href="appendix-schema.html" title="Appendix F. Gemini Blueprint Schema">Appendix F, <i xmlns:xlink="http://www.w3.org/1999/xlink">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 class="hl-tag">?xml version="1.0" encoding="UTF-8"?</span>>
+<<span class="hl-tag">beans</span> <span class="hl-attribute">xmlns</span>=<span class="hl-value">"http://www.springframework.org/schema/beans"</span> <span class="co"><img src="images/callouts/1.png" alt="(1)"></span>
+ <span class="hl-attribute">xmlns:xsi</span>=<span class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span class="hl-attribute">xmlns:osgi</span>=<span class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint"</span> <span class="co"><img src="images/callouts/2.png" alt="(2)"></span>
+ <span class="hl-attribute">xsi:schemaLocation</span>=<span class="hl-value">"http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans.xsd</span> <span class="co"><img src="images/callouts/3.png" alt="(3)"></span><span class="hl-value">
+ http://www.eclipse.org/gemini/blueprint/schema/blueprint
+ http://www.eclipse.org/gemini/blueprint/schema/blueprint/gemini-blueprint.xsd"</span>>
+
+ <<span class="hl-tag">osgi:service</span> <span class="hl-attribute">id</span>=<span class="hl-value">"simpleServiceOsgi"</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"simpleService"</span> <span class="co"><img src="images/callouts/4.png" alt="(4)"></span>
+ <span class="hl-attribute">interface</span>=<span class="hl-value">"org.xyz.MyService"</span> />
+<<span class="hl-tag">/beans</span>></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><img src="images/callouts/1.png" alt="1" border="0"></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"><img src="images/callouts/2.png" alt="2" border="0"></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"><img src="images/callouts/3.png" alt="3" border="0"></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"><img src="images/callouts/4.png" alt="4" border="0"></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 class="hl-tag">?xml version="1.0" encoding="UTF-8"?</span>>
+<<span class="hl-tag">beans</span> <span class="hl-attribute">xmlns</span>=<span class="hl-value">"http://www.springframework.org/schema/beans"</span> <span class="co"><img src="images/callouts/1.png" alt="(1)"></span>
+ <span class="hl-attribute">xmlns:xsi</span>=<span class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span class="hl-attribute">xmlns:osgi</span>=<span class="hl-value">"http://www.springframework.org/schema/osgi"</span> <span class="co"><img src="images/callouts/2.png" alt="(2)"></span>
+ <span class="hl-attribute">xsi:schemaLocation</span>=<span class="hl-value">"http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans.xsd</span> <span class="co"><img src="images/callouts/3.png" alt="(3)"></span><span class="hl-value">
+ http://www.springframework.org/schema/osgi
+ http://www.springframework.org/schema/osgi/spring-osgi.xsd"</span>>
+
+ <<span class="hl-tag">osgi:service</span> <span class="hl-attribute">id</span>=<span class="hl-value">"simpleServiceOsgi"</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"simpleService"</span> <span class="co"><img src="images/callouts/4.png" alt="(4)"></span>
+ <span class="hl-attribute">interface</span>=<span class="hl-value">"org.xyz.MyService"</span> />
+<<span class="hl-tag">/beans</span>></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><img src="images/callouts/1.png" alt="1" border="0"></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"><img src="images/callouts/2.png" alt="2" border="0"></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"><img src="images/callouts/3.png" alt="3" border="0"></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"><img src="images/callouts/4.png" alt="4" border="0"></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 class="hl-tag">?xml version="1.0" encoding="UTF-8"?</span>>
+<<span class="hl-tag">beans:beans</span> <span class="co"><img src="images/callouts/1.png" alt="(1)"></span>
+ <span class="hl-attribute">xmlns</span>=<span class="hl-value">"http://www.eclipse.org/gemini/blueprint/schema/blueprint"</span> <span class="co"><img src="images/callouts/2.png" alt="(2)"></span>
+ <span class="hl-attribute">xmlns:xsi</span>=<span class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span class="hl-attribute">xmlns:beans</span>=<span class="hl-value">"http://www.springframework.org/schema/beans"</span> <span class="co"><img src="images/callouts/3.png" alt="(3)"></span>
+ <span class="hl-attribute">xsi:schemaLocation</span>=<span 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>> <span class="co"><img src="images/callouts/4.png" alt="(4)"></span>
+
+ <<span class="hl-tag">service</span> <span class="hl-attribute">id</span>=<span class="hl-value">"simpleServiceOsgi"</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"simpleService"</span> <span class="co"><img src="images/callouts/5.png" alt="(5)"></span>
+ <span class="hl-attribute">interface</span>=<span class="hl-value">"org.xyz.MyService"</span> />
+
+<<span class="hl-tag">/beans:beans</span>> <span class="co"><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"><img src="images/callouts/1.png" alt="1" border="0"></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"><img src="images/callouts/2.png" alt="2" border="0"></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"><img src="images/callouts/3.png" alt="3" border="0"></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"><img src="images/callouts/4.png" alt="4" border="0"></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"><img src="images/callouts/5.png" alt="5" border="0"></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 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="service-registry:export"></a>9.1. 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"><<span class="hl-tag">service</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"beanToPublish"</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"com.xyz.MessageService"</span>/></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"><<span class="hl-tag">osgi:service</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"com.xyz.MessageService"</span>>
+ <<span class="hl-tag">bean</span> <span class="hl-attribute">class</span>=<span class="hl-value">"SomeClass"</span>>
+ ...
+ <<span class="hl-tag">/bean</span>>
+<<span class="hl-tag">/osgi:service</span>></pre><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:registration"></a>9.1.1. 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 href="service-registry.html#service-registry:export-import-relationship" title="9.2.1.2. Relationship Between The Service Exporter And Service Importer">Section 9.2.1.2, “Relationship Between The Service Exporter And Service Importer”</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"><<span class="hl-tag">service</span> <span class="hl-attribute">id</span>=<span class="hl-value">"myServiceRegistration"</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"beanToPublish"</span>
+ <span class="hl-attribute">interface</span>=<span class="hl-value">"com.xyz.MessageService"</span>/>
+
+<<span class="hl-tag">bean</span> <span class="hl-attribute">id</span>=<span class="hl-value">"propUpdater"</span> <span class="hl-attribute">class</span>=<span class="hl-value">"com.xyz.ServicePropertiesUpdater"</span>>
+ <<span class="hl-tag">property</span> <span class="hl-attribute">name</span>=<span class="hl-value">"serviceRegistration ref="</span><span class="hl-attribute">myServiceRegistration"/></span>
+<span class="hl-attribute"></bean></span></pre><p>Where <code class="classname">ServicePropertiesUpdater</code> can have the following definition:</p><pre class="programlisting"><span class="hl-keyword">public</span> <span class="hl-keyword">class</span> ServicePropertiesUpdater <span class="hl-keyword">implements</span> BeanNameAware {
+
+ <span class="hl-keyword">private</span> ServiceRegistration serviceRegistration;
+ <span class="hl-keyword">private</span> String beanName;
+
+ <span class="hl-keyword">public</span> <span class="hl-keyword">void</span> setServiceRegistration(ServiceRegistration serviceRegistration) {
+ <span class="hl-keyword">this</span>.serviceRegistration = serviceRegistration;
+ }
+
+ <span class="hl-keyword">public</span> <span class="hl-keyword">void</span> setBeanName(String beanName) {
+ <span class="hl-keyword">this</span>.beanName = beanName;
+ }
+
+ <span class="hl-keyword">public</span> <span class="hl-keyword">void</span> update() {
+ ServiceReference reference = serviceRegistration.getReference();
+ <span class="hl-comment">// get current properties</span>
+ Dictionary dictionary = OsgiServiceReferenceUtils.getServiceProperties(reference);
+ dictionary.put(<span class="hl-string">"last-update"</span>, <span class="hl-keyword">new</span> Date());
+ dictionary.put(<span class="hl-string">"updated-by"</span>, beanName);
+ dictionary.put(<span class="hl-string">"user.name"</span>, System.getProperties().getProperty(<span class="hl-string">"java.version"</span>));
+ <span class="hl-comment">// update properties</span>
+ 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" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:service-factory"></a>9.1.2. <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 href="bnd-app-ctx.html#bnd-app-ctx:bundle-scope" title="7.5. Bundle Scope">Section 7.5, “Bundle Scope”</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"><<span class="hl-tag">osgi:service</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"beanToBeExported"</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"com.xyz.MessageService"</span>/>
+
+<<span class="hl-tag">bean</span> <span class="hl-attribute">id</span>=<span class="hl-value">"beanToBeExported"</span> <span class="hl-attribute">scope</span>=<span class="hl-value">"bundle"</span> <span class="hl-attribute">class</span>=<span class="hl-value">"com.xyz.MessageServiceImpl"</span>/></pre></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:intfs"></a>9.1.3. 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"><<span class="hl-tag">osgi:service</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"beanToBeExported"</span>>
+ <<span class="hl-tag">osgi:interfaces</span>>
+ <<span class="hl-tag">value</span>>com.xyz.MessageService<<span class="hl-tag">/value</span>>
+ <<span class="hl-tag">value</span>>com.xyz.MarkerInterface<<span class="hl-tag">/value</span>>
+ <<span class="hl-tag">/osgi:interfaces</span>>
+<<span class="hl-tag">/osgi:service</span>></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" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:export:auto-export"></a>9.1.3.1. Detecting The Advertised Interfaces At Runtime</h4></div></div></div><div class="sidebar"><p class="title"><b>Hierarchy visibility</b></p><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 type="disc"><li><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><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><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><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"><<span class="hl-tag">service</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"beanToBeExported"</span> <span class="hl-attribute">auto-export</span>=<span class="hl-value">"interfaces"</span>/></pre><p>Given the interface hierarchy:</p><pre class="programlisting"><span class="hl-keyword">public</span> <span class="hl-keyword">interface</span> SuperInterface {}
+
+<span class="hl-keyword">public</span> <span class="hl-keyword">interface</span> SubInterface <span class="hl-keyword">extends</span> 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" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:props"></a>9.1.4. 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"><<span class="hl-tag">service</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"beanToBeExported"</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"com.xyz.MyServiceInterface"</span>>
+ <<span class="hl-tag">service-properties</span>>
+ <<span class="hl-tag">beans:entry</span> <span class="hl-attribute">key</span>=<span class="hl-value">"myOtherKey"</span> <span class="hl-attribute">value</span>=<span class="hl-value">"aStringValue"</span>/>
+ <<span class="hl-tag">beans:entry</span> <span class="hl-attribute">key</span>=<span class="hl-value">"aThirdKey"</span> <span class="hl-attribute">value-ref</span>=<span class="hl-value">"beanToExposeAsProperty"</span>/>
+ <<span class="hl-tag">/service-properties</span>>
+<<span class="hl-tag">/service</span>></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"><<span class="hl-tag">osgi:service</span>
+ <span class="hl-attribute">id</span>=<span class="hl-value">"eventMonitorService"</span>
+ <span class="hl-attribute">ref</span>=<span class="hl-value">"someBean"</span>
+ <span class="hl-attribute">interface</span>=<span class="hl-value">"org.osgi.service.event.EventHandler"</span>>
+ <<span class="hl-tag">osgi:service-properties</span> <span class="hl-attribute">value-type</span>=<span class="hl-value">"java.lang.String[]"</span>> <span class="co"><img src="images/callouts/1.png" alt="(1)"></span>
+ <<span class="hl-tag">entry</span> <span class="hl-attribute">key</span>=<span class="hl-value">"event.topics"</span> <span class="hl-attribute">value</span>=<span class="hl-value">"eventQueue"</span>/>
+ <<span class="hl-tag">/osgi:service-properties</span>>
+<<span class="hl-tag">/osgi:service</span>></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><img src="images/callouts/1.png" alt="1" border="0"></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"><<span class="hl-tag">osgi:service</span>
+ <span class="hl-attribute">id</span>=<span class="hl-value">"eventMonitorService"</span>
+ <span class="hl-attribute">ref</span>=<span class="hl-value">"someBean"</span>
+ <span class="hl-attribute">interface</span>=<span class="hl-value">"org.osgi.service.event.EventHandler"</span>>
+ <<span class="hl-tag">osgi:service-properties</span>>
+ <<span class="hl-tag">entry</span> <span class="hl-attribute">key</span>=<span class="hl-value">"event.topics"</span>>
+ <<span class="hl-tag">value</span> <span class="hl-attribute">type</span>=<span class="hl-value">"java.lang.String[]"</span>>eventQueue<<span class="hl-tag">/value</span>> <span class="co"><img src="images/callouts/1.png" alt="(1)"></span>
+ <<span class="hl-tag">/entry</span>>
+ <<span class="hl-tag">/osgi:service-properties</span>>
+<<span class="hl-tag">/osgi:service</span>></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><img src="images/callouts/1.png" alt="1" border="0"></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"><<span class="hl-tag">osgi:service</span>
+ <span class="hl-attribute">id</span>=<span class="hl-value">"eventMonitorService"</span>
+ <span class="hl-attribute">ref</span>=<span class="hl-value">"someBean"</span>
+ <span class="hl-attribute">interface</span>=<span class="hl-value">"org.osgi.service.event.EventHandler"</span>>
+ <<span class="hl-tag">osgi:service-properties</span>>
+ <<span class="hl-tag">entry</span> <span class="hl-attribute">key</span>=<span class="hl-value">"event.topics"</span>>
+ <<span class="hl-tag">array</span> <span class="hl-attribute">value-type</span>=<span class="hl-value">"java.lang.String"</span>> <span class="co"><img src="images/callouts/1.png" alt="(1)"></span>
+ <<span class="hl-tag">value</span>>eventQueue<<span class="hl-tag">/value</span>>
+ <<span class="hl-tag">/array</span>>
+ <<span class="hl-tag">/entry</span>>
+ <<span class="hl-tag">/osgi:service-properties</span>>
+<<span class="hl-tag">/osgi:service</span>></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><img src="images/callouts/1.png" alt="1" border="0"></td><td valign="top" align="left">
+ Use Spring 3.x <code class="literal"><array></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 href="appendix-roadmap.html" title="Appendix D. Roadmap">Appendix D, <i xmlns:xlink="http://www.w3.org/1999/xlink">Roadmap</i></a> for more details.</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:depends-on"></a>9.1.5. 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"><<span class="hl-tag">service</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"beanToBeExported"</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"com.xyz.MyServiceInterface"</span>
+ <span class="hl-attribute">depends-on</span>=<span class="hl-value">"myOtherComponent"</span>/></pre></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:ccl"></a>9.1.6. 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"><i><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></i></p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:ranking"></a>9.1.7. 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"><<span class="hl-tag">service</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"beanToBeExported"</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"com.xyz.MyServiceInterface"</span>
+ <span class="hl-attribute">ranking</span>=<span class="hl-value">"9"</span>/></pre></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:cache"></a>9.1.8. 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"><<span class="hl-tag">service</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"beanToBeExported"</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"com.xyz.MyServiceInterface"</span>
+ <span class="hl-attribute">cache-target</span>=<span class="hl-value">"true"</span>/></pre></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:service:attributes"></a>9.1.9. <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 9.1. OSGi <service> attributes</b></p><div class="table-contents"><table summary="OSGi <service> attributes" width="100%" border="1"><colgroup><col><col><col><col><col><col align="center"></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" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:export:lifecycle"></a>9.1.10. 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"><<span class="hl-tag">service</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"beanToBeExported"</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"SomeInterface"</span>>
+ <<span class="hl-tag">registration-listener</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"myListener"</span> <span class="co"><img src="images/callouts/1.png" alt="(1)"></span>
+ <span class="hl-attribute">registration-method</span>=<span class="hl-value">"serviceRegistered"</span> <span class="co"><img src="images/callouts/2.png" alt="(2)"></span>
+ <span class="hl-attribute">unregistration-method</span>=<span class="hl-value">"serviceUnregistered"</span>/> <span class="co"><img src="images/callouts/2.png" alt="(2)"></span>
+ <<span class="hl-tag">registration-listener</span>
+ <span class="hl-attribute">registration-method</span>=<span class="hl-value">"register"</span>> <span class="co"><img src="images/callouts/3.png" alt="(3)"></span>
+ <<span class="hl-tag">bean</span> <span class="hl-attribute">class</span>=<span class="hl-value">"SomeListenerClass"</span>/> <span class="co"><img src="images/callouts/4.png" alt="(4)"></span>
+ <<span class="hl-tag">/registration-listener</span>>
+<<span class="hl-tag">/service</span>></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><img src="images/callouts/1.png" alt="1" border="0"></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"><img src="images/callouts/2.png" alt="2" border="0"></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"><img src="images/callouts/3.png" alt="3" border="0"></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"><img src="images/callouts/4.png" alt="4" border="0"></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"><span class="hl-keyword">public</span> <span class="hl-keyword">void</span> anyMethodName(ServiceType serviceInstance, Map serviceProperties);</pre><pre class="programlisting"><span class="hl-keyword">public</span> <span class="hl-keyword">void</span> 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" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:export:lifecycle:interface"></a>9.1.10.1. 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" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:export:blueprint"></a>9.1.10.2. 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 9.2. Spring DM / Blueprint <code class="literal"><service></code> Configuration Comparison</b></p><div class="table-contents"><table summary="Spring DM / Blueprint <service> 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="service-registry:refs"></a>9.2. 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 xmlns:xlink="http://www.w3.org/1999/xlink" 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" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:refs:availability"></a>9.2.1. Imported Service Availability</h3></div></div></div><div class="sidebar"><p class="title"><b>What happened to <code class="literal">cardinality</code>?</b></p><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" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:availability:startup"></a>9.2.1.1. 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 href="bnd-app-ctx.html#bnd-app-ctx:app-creation:mandatory-deps" title="7.2.1. Mandatory Service Dependencies">Section 7.2.1, “Mandatory Service Dependencies”</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 href="app-deploy.html#app-deploy:headers" title="8.1. Bundle Format And Manifest Headers">Section 8.1, “Bundle Format And Manifest Headers”</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" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:export-import-relationship"></a>9.2.1.2. 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"><<span class="hl-tag">osgi:service</span> <span class="hl-attribute">id</span>=<span class="hl-value">"S"</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"A"</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"SomeInterface"</span>/>
+
+<<span class="hl-tag">bean</span> <span class="hl-attribute">id</span>=<span class="hl-value">"A"</span> <span class="hl-attribute">class</span>=<span class="hl-value">"SomeImplementation"</span>>
+ <<span class="hl-tag">property</span> <span class="hl-attribute">name</span>=<span class="hl-value">"helperService"</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"M"</span>/>
+<<span class="hl-tag">/bean</span>>
+
+<<span class="hl-comment">!-- the reference element is used to refer to a service
+ in the service registry --</span>>
+<<span class="hl-tag">osgi:reference</span> <span class="hl-attribute">id</span>=<span class="hl-value">"M"</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"HelperService"</span> <span class="hl-attribute">availability</span>=<span class="hl-value">"mandatory"</span>/></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" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:refs:singular"></a>9.2.2. 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" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:interface"></a>9.2.2.1. 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"><<span class="hl-tag">reference</span> <span class="hl-attribute">id</span>=<span class="hl-value">"messageService"</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"com.xyz.MessageService"</span>/></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"><<span class="hl-tag">osgi:reference</span> <span class="hl-attribute">id</span>=<span class="hl-value">"importedOsgiService"</span>>
+ <<span class="hl-tag">osgi:interfaces</span>>
+ <<span class="hl-tag">value</span>>com.xyz.MessageService<<span class="hl-tag">/value</span>>
+ <<span class="hl-tag">value</span>>com.xyz.MarkerInterface<<span class="hl-tag">/value</span>>
+ <<span class="hl-tag">/osgi:interfaces</span>>
+<<span class="hl-tag">/osgi:reference</span>></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" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:filter"></a>9.2.2.2. 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"><<span class="hl-tag">reference</span> <span class="hl-attribute">id</span>=<span class="hl-value">"asyncMessageService"</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"com.xyz.MessageService"</span>
+ <span class="hl-attribute">filter</span>=<span class="hl-value">"(asynchronous-delivery=true)"</span>/></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" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:bean-name"></a>9.2.2.3. 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 href="service-registry.html#service-registry:export" title="9.1. Exporting A Spring Bean As An OSGi Service">Section 9.1, “Exporting A Spring Bean As An OSGi Service”</a>).</p><p>Consider the following exporter/importer declarations:</p><div class="programlistingco"><pre class="programlisting"><<span class="hl-tag">bean</span> <span class="hl-attribute">id</span>=<span class="hl-value">"</span><span class="co"><img src="images/callouts/1.png" alt="(1)"></span><span class="hl-value">messageServiceBean"</span> <span class="hl-attribute">scope</span>=<span class="hl-value">"bundle"</span> <span class="hl-attribute">class</span>=<span class="hl-value">"com.xyz.MessageServiceImpl"</span>/>
+<<span class="hl-comment">!-- service exporter --</span>>
+<<span class="hl-tag">osgi:service</span> <span class="hl-attribute">id</span>=<span class="hl-value">"messageServiceExporter"</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"</span><span class="co"><img src="images/callouts/1.png" alt="(1)"></span><span class="hl-value">messageServiceBean"</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"com.xyz.MessageService"</span>/>
+</pre></div><div class="programlistingco"><pre class="programlisting"><<span class="hl-tag">osgi:reference</span> <span class="hl-attribute">id</span>=<span class="hl-value">"messageService"</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"com.xyz.MessageService"</span>
+ <span class="hl-attribute">bean-name</span>=<span class="hl-value">"</span><span class="co"><img src="images/callouts/1.png" alt="(1)"></span><span class="hl-value">messageServiceBean"</span>/>
+</pre></div><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><img src="images/callouts/1.png" alt="1" border="0"></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" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:cardinality"></a>9.2.2.4. The <code class="literal">availability</code> Attribute</h4></div></div></div><div class="sidebar"><p class="title"><b>Nested <reference> declarations</b></p><p>In order for Gemini Blueprint/Spring DM to detect mandatory dependencies, any
+ <a xmlns:xlink="http://www.w3.org/1999/xlink" 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 href="service-registry.html#service-registry:refs:singular:dynamics" title="9.2.2.9. reference And OSGi Service Dynamics">Section 9.2.2.9, “<code class="literal">reference</code> And OSGi Service Dynamics”</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 href="service-registry.html#service-registry:refs:availability" title="9.2.1. Imported Service Availability">Section 9.2.1, “Imported Service Availability”</a>.
+ </p></div><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:depends-on"></a>9.2.2.5. 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" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:tccl"></a>9.2.2.6. 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"><p class="title"><b>context class loader management on the importer and exporter</b></p><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 type="disc"><li><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><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><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" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:sticky"></a>9.2.2.7. 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" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:reference:attributes"></a>9.2.2.8. <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 9.3. OSGi <reference> attributes</b></p><div class="table-contents"><table summary="OSGi <reference> attributes" width="100%" border="1"><colgroup><col><col align="center"><col align="center"><col align="center"><col align="center"></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 <service> 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" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:dynamics"></a>9.2.2.9. <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 href="service-registry.html#service-registry:refs:availability" title="9.2.1. Imported Service Availability">Section 9.2.1, “Imported Service Availability”</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 href="service-registry.html#service-registry:export-import-relationship" title="9.2.1.2. Relationship Between The Service Exporter And Service Importer">Section 9.2.1.2, “Relationship Between The Service Exporter And Service Importer”</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" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:singular:property-editor"></a>9.2.2.10. 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"><span class="hl-keyword">public</span> <span class="hl-keyword">class</span> BeanWithServiceReference {
+ <span class="hl-keyword">private</span> ServiceReference serviceReference;
+ <span class="hl-keyword">private</span> SomeService service;
+
+ <span class="hl-comment">// getters/setters ommitted</span>
+}</pre><div class="programlistingco"><pre class="programlisting"><<span class="hl-tag">reference</span> <span class="hl-attribute">id</span>=<span class="hl-value">"service"</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"com.xyz.SomeService"</span>/>
+
+<<span class="hl-tag">bean</span> <span class="hl-attribute">id</span>=<span class="hl-value">"someBean"</span> <span class="hl-attribute">class</span>=<span class="hl-value">"BeanWithServiceReference"</span>>
+ <<span class="hl-tag">property</span> <span class="hl-attribute">name</span>=<span class="hl-value">"serviceReference"</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"service"</span>/> <span class="co"><img src="images/callouts/1.png" alt="(1)"></span>
+ <<span class="hl-tag">property</span> <span class="hl-attribute">name</span>=<span class="hl-value">"service"</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"service"</span>/> <span class="co"><img src="images/callouts/2.png" alt="(2)"></span>
+<<span class="hl-tag">/bean</span>></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><img src="images/callouts/1.png" alt="1" border="0"></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"><img src="images/callouts/2.png" alt="2" border="0"></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" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:refs:collection"></a>9.2.3. Referencing A Collection Of Services</h3></div></div></div><div class="sidebar"><p class="title"><b>Natural vs custom ordering</b></p><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 xmlns:xlink="http://www.w3.org/1999/xlink" href="http://java.sun.com/docs/books/tutorial/collections/interfaces/order.html" target="_top">
+ Object ordering</a> chapter from Java
+ <a xmlns:xlink="http://www.w3.org/1999/xlink" 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 xmlns:xlink="http://www.w3.org/1999/xlink" 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 href="service-registry.html#service-registry:refs:availability" title="9.2.1. Imported Service Availability">Section 9.2.1, “Imported Service Availability”</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 xmlns:xlink="http://www.w3.org/1999/xlink" 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"><<span class="hl-tag">list</span> <span class="hl-attribute">id</span>=<span class="hl-value">"myEventListeners"</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"com.xyz.EventListener"</span>/></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"><<span class="hl-tag">set</span> <span class="hl-attribute">id</span>=<span class="hl-value">"myServices"</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"com.xyz.MyService"</span>
+ <span class="hl-attribute">comparator-ref</span>=<span class="hl-value">"someComparator"</span>/>
+
+<<span class="hl-tag">list</span> <span class="hl-attribute">id</span>=<span class="hl-value">"myOtherServices"</span>
+ <span class="hl-attribute">interface</span>=<span class="hl-value">"com.xyz.OtherService"</span>>
+ <<span class="hl-tag">comparator</span>>
+ <<span class="hl-tag">beans:bean</span> <span class="hl-attribute">class</span>=<span class="hl-value">"MyOtherServiceComparator"</span>/>
+ <<span class="hl-tag">/comparator</span>>
+<<span class="hl-tag">/list</span>></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"><<span class="hl-tag">list</span> <span class="hl-attribute">id</span>=<span class="hl-value">"myServices"</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"com.xyz.MyService"</span>>
+ <<span class="hl-tag">comparator</span>><<span class="hl-tag">natural</span> <span class="hl-attribute">basis</span>=<span class="hl-value">"services"</span>/><<span class="hl-tag">/comparator</span>>
+<<span class="hl-tag">/list</span>>
+
+<<span class="hl-tag">set</span> <span class="hl-attribute">id</span>=<span class="hl-value">"myOtherServices"</span><span class="hl-attribute">interface</span>=<span class="hl-value">"com.xyz.OtherService"</span>>
+ <<span class="hl-tag">comparator</span>><<span class="hl-tag">natural</span> <span class="hl-attribute">basis</span>=<span class="hl-value">"service-references"</span>/><<span class="hl-tag">/comparator</span>>
+<<span class="hl-tag">/set</span>></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" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:collection:greedy-proxying"></a>9.2.3.1. 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"><<span class="hl-tag">list</span> <span class="hl-attribute">id</span>=<span class="hl-value">"services"</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"com.xyz.SomeService"</span> <span class="hl-attribute">greedy-proxying</span>=<span class="hl-value">"true"</span>/></pre><p>one can do the following iteration (assuming <code class="classname">MessageDispatcher</code> type is imported by the bundle):</p><pre class="programlisting"><span class="hl-keyword">for</span> (Iterator iterator = services.iterator(); iterator.hasNext();) {
+ SomeService service = (SomeService) iterator.next();
+ service.executeOperation();
+ <span class="hl-comment">// if the service implements an additional type</span>
+ <span class="hl-comment">// do something extra</span>
+ <span class="hl-keyword">if</span> (service <span class="hl-keyword">instanceof</span> 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 xmlns:xlink="http://www.w3.org/1999/xlink" href="http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming" target="_top">polymorphism</a>
+ and is more
+ <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://en.wikipedia.org/wiki/Object_oriented" target="_top">object-oriented</a>.</td></tr></table></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:collection:member-type"></a>9.2.3.2. 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"><<span class="hl-tag">list</span> <span class="hl-attribute">id</span>=<span class="hl-value">"services"</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"com.xyz.SomeService"</span> <span class="hl-attribute">member-type</span>=<span class="hl-value">"service-reference"</span>/></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 href="service-registry.html#service-registry:refs:singular:property-editor" title="9.2.2.10. Getting A Hold Of The Managed Service Reference">Section 9.2.2.10, “Getting A Hold Of The Managed Service Reference”</a>
+ for more details).</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:collection:attributes"></a>9.2.3.3. 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 9.4. <list>/<set> attributes</b></p><div class="table-contents"><table summary="<list>/<set> attributes" width="100%" border="1"><colgroup><col><col align="center"><col align="center"><col align="center"><col align="center"><col align="justify"></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 <service> 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 9.5. collection <comparator> attributes</b></p><div class="table-contents"><table summary="collection <comparator> attributes" width="100%" border="1"><colgroup><col><col><col></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" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:collection:dynamics"></a>9.2.3.4. <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 href="service-registry.html#service-registry:export-import-relationship" title="9.2.1.2. Relationship Between The Service Exporter And Service Importer">Section 9.2.1.2, “Relationship Between The Service Exporter And Service Importer”</a> for more information.
+ </p></div><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="service-registry:refs:collection:iterator"></a>9.2.3.5. <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 9.6. Dynamic service collection <code class="interfacename">Iterator</code> contract</b></p><div class="table-contents"><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" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:refs:dynamics"></a>9.2.4. Dealing With The Dynamics Of OSGi Imported Services</h3></div></div></div><div class="sidebar"><p class="title"><b>Where is the <code class="literal">listener</code> element ?</b></p><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 href="service-registry.html#service-registry:export:lifecycle" title="9.1.10. Service Registration And Unregistration Lifecycle">Section 9.1.10, “Service Registration And Unregistration Lifecycle”</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"><<span class="hl-tag">reference</span> <span class="hl-attribute">id</span>=<span class="hl-value">"someService"</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"com.xyz.MessageService"</span>>
+ <<span class="hl-tag">reference-listener</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"aListenerBean"</span>/>
+<<span class="hl-tag">/reference</span>></pre><p>An example of declaring an inline listener bean with custom
+ bind and unbind methods:</p><pre class="programlisting"><<span class="hl-tag">reference</span> <span class="hl-attribute">id</span>=<span class="hl-value">"someService"</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"com.xyz.MessageService"</span>>
+ <<span class="hl-tag">reference-listener</span> <span class="hl-attribute">bind-method</span>=<span class="hl-value">"onBind"</span> <span class="hl-attribute">unbind-method</span>=<span class="hl-value">"onUnbind"</span>>
+ <<span class="hl-tag">beans:bean</span> <span class="hl-attribute">class</span>=<span class="hl-value">"MyCustomListener"</span>/>
+ <<span class="hl-tag">/reference-listener</span>>
+<<span class="hl-tag">/reference</span>></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"><span class="hl-keyword">public</span> <span class="hl-keyword">void</span> anyMethodName(ServiceType service, Dictionary properties);
+
+<span class="hl-keyword">public</span> <span class="hl-keyword">void</span> anyMethodName(ServiceType service, Map properties);
+
+<span class="hl-keyword">public</span> <span class="hl-keyword">void</span> 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 type="disc"><li>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>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 type="disc"><li>A <span class="emphasis"><em>bind</em></span> callback is invoked
+ when a new service is added to the collection.
+ </li><li>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 9.7. OSGi <reference-listener> attributes</b></p><div class="table-contents"><table summary="OSGi <reference-listener> 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" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:refs:blueprint"></a>9.2.5. 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 9.8. Spring DM / Blueprint Service Importer Configuration Comparison</b></p><div class="table-contents"><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"> </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"><reference></code></td><td class="auto-generated"> </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"><list></code></td><td class="auto-generated"> </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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="service-registry:refs:listener-and-proxies"></a>9.3. 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="service-registry:refs:invoker-bundle-context"></a>9.4. 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="service-registry:refs:listener-best-practices"></a>9.5. 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 type="disc"><li>
+ 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>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>If find yourself repeating bind/unbind method declarations for your listener definitions,
+ consider using Spring <a xmlns:xlink="http://www.w3.org/1999/xlink" 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>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>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"><span class="hl-keyword">public</span> <span class="hl-keyword">class</span> MyListener {
+ <span class="hl-keyword">void</span> register(<span class="co"><img src="images/callouts/1.png" alt="(1)"></span>Object service, Map properties);
+ <span class="hl-keyword">void</span> register(<span class="co"><img src="images/callouts/2.png" alt="(2)"></span>Collection dataService, Map properties);
+ <span class="hl-keyword">void</span> register(<span class="co"><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"><img src="images/callouts/1.png" alt="1" border="0"></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"><img src="images/callouts/2.png" alt="2" border="0"></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 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"><img src="images/callouts/3.png" alt="3" border="0"></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 href="service-registry.html#service-registry:refs:listener:type.1">
+ <code class="classname">Object</code></a> and <a 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" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="service-registry:refs:listener-best-practices:cycles"></a>9.5.1. 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"><<span class="hl-tag">bean</span> <span class="hl-attribute">id</span>=<span class="hl-value">"listener"</span> <span class="hl-attribute">class</span>=<span class="hl-value">"cycle.Listener"</span>> <span class="co"><img src="images/callouts/1.png" alt="(1)"></span>
+ <<span class="hl-tag">property</span> <span class="hl-attribute">name</span>=<span class="hl-value">"target"</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"importer"</span> /> <span class="co"><img src="images/callouts/2.png" alt="(2)"></span>
+<<span class="hl-tag">/bean</span>>
+
+<<span class="hl-tag">osgi:reference</span> <span class="hl-attribute">id</span>=<span class="hl-value">"importer"</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"SomeService"</span>> <span class="co"><img src="images/callouts/3.png" alt="(3)"></span>
+ <<span class="hl-tag">osgi:listener</span> <span class="hl-attribute">bind-method</span>=<span class="hl-value">"bind"</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"listener"</span> /> <span class="co"><img src="images/callouts/4.png" alt="(4)"></span>
+<<span class="hl-tag">/osgi:reference</span>></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><img src="images/callouts/1.png" alt="1" border="0"></td><td valign="top" align="left"><p>Listener bean</p></td></tr><tr><td width="5%" valign="top" align="left"><img src="images/callouts/2.png" alt="2" border="0"></td><td valign="top" align="left"><p>Dependency listener -> importer</p></td></tr><tr><td width="5%" valign="top" align="left"><img src="images/callouts/3.png" alt="3" border="0"></td><td valign="top" align="left"><p>Importer declaration</p></td></tr><tr><td width="5%" valign="top" align="left"><img src="images/callouts/4.png" alt="4" border="0"></td><td valign="top" align="left"><p>Dependency importer -> 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"><<span class="hl-tag">osgi:reference</span> <span class="hl-attribute">id</span>=<span class="hl-value">"importer"</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"SomeService"</span>> <span class="co"><img src="images/callouts/1.png" alt="(1)"></span>
+ <<span class="hl-tag">osgi:listener</span> <span class="hl-attribute">bind-method</span>=<span class="hl-value">"bind"</span>> <span class="co"><img src="images/callouts/2.png" alt="(2)"></span>
+ <<span class="hl-tag">bean</span> <span class="hl-attribute">class</span>=<span class="hl-value">"cycle.Listener"</span>> <span class="co"><img src="images/callouts/3.png" alt="(3)"></span>
+ <<span class="hl-tag">property</span> <span class="hl-attribute">name</span>=<span class="hl-value">"target"</span> <span class="hl-attribute">ref</span>=<span class="hl-value">"importer"</span> /> <span class="co"><img src="images/callouts/4.png" alt="(4)"></span>
+ <<span class="hl-tag">/bean</span>>
+ <<span class="hl-tag">/osgi:listener</span>>
+<<span class="hl-tag">/osgi:reference</span>></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><img src="images/callouts/1.png" alt="1" border="0"></td><td valign="top" align="left"><p>OSGi service importer</p></td></tr><tr><td width="5%" valign="top" align="left"><img src="images/callouts/2.png" alt="2" border="0"></td><td valign="top" align="left"><p>Dependency between importer -> listener</p></td></tr><tr><td width="5%" valign="top" align="left"><img src="images/callouts/3.png" alt="3" border="0"></td><td valign="top" align="left"><p>Nested listener declaration</p></td></tr><tr><td width="5%" valign="top" align="left"><img src="images/callouts/4.png" alt="4" border="0"></td><td valign="top" align="left"><p>Dependency nested listener -> importer</p></td></tr></table></div></div><div class="sidebar"><p class="title"><b>Beans and Cycles</b></p><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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="service-registry:refs:global-defaults"></a>9.6. 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 type="disc"><li><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"><<span class="hl-tag">beans</span> <span class="hl-attribute">xmlns</span>=<span class="hl-value">"http://www.springframework.org/schema/beans"</span>
+ <span class="hl-attribute">xmlns:xsi</span>=<span class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span class="hl-attribute">xmlns:osgi</span>=<span class="hl-value">"http://www.springframework.org/schema/osgi"</span> <span class="co"><img src="images/callouts/1.png" alt="(1)"></span>
+ <span class="hl-attribute">osgi:default-timeout</span>=<span class="hl-value">"5000"</span>> <span class="co"><img src="images/callouts/2.png" alt="(2)"></span>
+
+ <<span class="hl-tag">reference</span> <span class="hl-attribute">id</span>=<span class="hl-value">"someService"</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"com.xyz.AService"</span>/> <span class="co"><img src="images/callouts/3.png" alt="(3)"></span>
+
+ <<span class="hl-tag">reference</span> <span class="hl-attribute">id</span>=<span class="hl-value">"someOtherService"</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"com.xyz.BService"</span>
+ <span class="hl-attribute">timeout</span>=<span class="hl-value">"1000"</span>/> <span class="co"><img src="images/callouts/4.png" alt="(4)"></span>
+
+<<span class="hl-tag">/beans:beans</span>></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><img src="images/callouts/1.png" alt="1" border="0"></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"><img src="images/callouts/2.png" alt="2" border="0"></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"><img src="images/callouts/3.png" alt="3" border="0"></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"><img src="images/callouts/4.png" alt="4" border="0"></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><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"><<span class="hl-tag">beans:beans</span>
+ <span class="hl-attribute">xmlns</span>=<span class="hl-value">"http://www.springframework.org/schema/osgi"</span> <span class="co"><img src="images/callouts/1.png" alt="(1)"></span>
+ <span class="hl-attribute">xmlns:xsi</span>=<span class="hl-value">"http://www.w3.org/2001/XMLSchema-instance"</span>
+ <span class="hl-attribute">xmlns:beans</span>=<span class="hl-value">"http://www.springframework.org/schema/beans"</span> <span class="co"><img src="images/callouts/2.png" alt="(2)"></span>
+ <span class="hl-attribute">xmlns:osgi</span>=<span class="hl-value">"http://www.springframework.org/schema/osgi"</span> <span class="co"><img src="images/callouts/3.png" alt="(3)"></span>
+ <span class="hl-attribute">osgi:default-availability</span>=<span class="hl-value">"optional"</span> <span class="co"><img src="images/callouts/4.png" alt="(4)"></span>
+ <span class="hl-attribute">default-lazy-init</span>=<span class="hl-value">"false"</span>> <span class="co"><img src="images/callouts/5.png" alt="(5)"></span>
+
+ <<span class="hl-tag">reference</span> <span class="hl-attribute">id</span>=<span class="hl-value">"someService"</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"com.xyz.AService"</span>/> <span class="co"><img src="images/callouts/6.png" alt="(6)"></span>
+
+ <<span class="hl-tag">set</span> <span class="hl-attribute">id</span>=<span class="hl-value">"someSetOfService"</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"com.xyz.BService"</span>/> <span class="co"><img src="images/callouts/7.png" alt="(7)"></span>
+
+ <<span class="hl-tag">list</span> <span class="hl-attribute">id</span>=<span class="hl-value">"anotherListOfServices"</span> <span class="hl-attribute">interface</span>=<span class="hl-value">"com.xyz.CService"</span>
+ <span class="hl-attribute">availability</span>=<span class="hl-value">"mandatory"</span>/> <span class="co"><img src="images/callouts/8.png" alt="(8)"></span>
+
+<<span class="hl-tag">/beans:beans</span>></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><img src="images/callouts/1.png" alt="1" border="0"></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"><img src="images/callouts/2.png" alt="2" border="0"></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"><img src="images/callouts/3.png" alt="3" border="0"></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"><img src="images/callouts/4.png" alt="4" border="0"></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"><img src="images/callouts/5.png" alt="5" border="0"></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"><img src="images/callouts/6.png" alt="6" border="0"></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"><img src="images/callouts/7.png" alt="7" border="0"></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"><img src="images/callouts/8.png" alt="8" border="0"></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> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right"> <a accesskey="n" href="bundles.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 8. Packaging and Deploying Spring-based OSGi applications </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"> Chapter 10. Working With Bundles</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/blueprint/documentation/reference/1.0.1.RELEASE/html/spring-osgi-faq.html b/blueprint/documentation/reference/1.0.1.RELEASE/html/spring-osgi-faq.html
new file mode 100644
index 0000000..98538d9
--- /dev/null
+++ b/blueprint/documentation/reference/1.0.1.RELEASE/html/spring-osgi-faq.html
@@ -0,0 +1,218 @@
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <title>Chapter 1. Frequently Asked Questions</title><link rel="stylesheet" href="css/html.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.72.0"><link rel="start" 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" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="spring-osgi-faq"></a>Chapter 1. Frequently Asked Questions</h2></div></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="eclipse-springdm"></a>1.1. 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 xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.eclipse.org/gemini/blueprint/documentation/migration/" target="_top">here</a>).</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="name-change"></a>1.2. What happened to "Spring OSGi" project name?</h2></div></div></div><p>The OSGi term is a trademark belonging to <a xmlns:xlink="http://www.w3.org/1999/xlink" 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="internal-package"></a>1.3. 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 xmlns:xlink="http://www.w3.org/1999/xlink" href="http://opensource.atlassian.com/projects/spring/browse/OSGI" target="_top">JIRA</a>
+ to have access opened up.</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="requirements"></a>1.4. What are Gemini Blueprint requirements?</h2></div></div></div><p>
+ Gemini Blueprint requires at least Java 1.5, OSGi 4.1 and Spring 3.0.
+ It might be possible to use Gemini Blueprint on a lower <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://wiki.eclipse.org/index.php/Execution_Environments" target="_top">execution environment</a>
+ (such <a xmlns:xlink="http://www.w3.org/1999/xlink" 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 xmlns:xlink="http://www.w3.org/1999/xlink" 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 xmlns:xlink="http://www.w3.org/1999/xlink" href="http://java.sun.com/products/cdc/reference/cdc_packages.pdf" target="_top">PDF</a> for information on CDC profiles.
+ Note that, Spring 3.0 also requires Java 1.5. For Spring 2.5 and/or Java 1.4 see
+ <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.springframework.org/osgi" target="_top">Spring Dynamic Modules</a> 1.x releases.
+ </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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="other-module-frameworks"></a>1.5. 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="restricted-environments"></a>1.6. Will Gemini Blueprint work in restricted environments (such as small/mobile devices)?</h2></div></div></div><p>See the <a href="spring-osgi-faq.html#requirements" title="1.4. 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 v3.0 which in turn depends on
+ JDK 1.5. 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="supported-osgi-platforms"></a>1.7. 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 xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.eclipse.org/equinox/" target="_top">Equinox</a>, <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://felix.apache.org" target="_top">Felix</a>
+ and <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.knopflerfish.org/" target="_top">Knopflerfish</a>
+ - in fact, the test suite is <a xmlns:xlink="http://www.w3.org/1999/xlink" 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="osgi-intro"></a>1.8. Where can I learn about OSGi?</h2></div></div></div><p>
+ The best place to start is The Osgi Alliance <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.osgi.org/" target="_top">home</a> and
+ <a xmlns:xlink="http://www.w3.org/1999/xlink" 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="building-the-sources"></a>1.9. 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="logging"></a>1.10. 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 xmlns:xlink="http://www.w3.org/1999/xlink" 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 xmlns:xlink="http://www.w3.org/1999/xlink" 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 href="spring-osgi-faq.html#commons-logging" title="1.11. 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 xmlns:xlink="http://www.w3.org/1999/xlink" 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 xmlns:xlink="http://www.w3.org/1999/xlink" 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 xmlns:xlink="http://www.w3.org/1999/xlink" href="http://logging.apache.org/log4j/1.2/manual.html" target="_top">link</a>.</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="commons-logging"></a>1.11. 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 xmlns:xlink="http://www.w3.org/1999/xlink" href="http://radio.weblogs.com/0122027/2003/08/15.html" target="_top">#1</a>
+ <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.qos.ch/logging/thinkAgain.jsp" target="_top">#2</a></p></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="getting-commons-logging-to-work"></a>1.12. 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 type="disc"><li><p>1.0.x</p><p>
+ Unfortunately, commons-logging 1.0.x uses the thread context class loader (TCCL) always for <a xmlns:xlink="http://www.w3.org/1999/xlink" 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><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 xmlns:xlink="http://www.w3.org/1999/xlink" 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 xmlns:xlink="http://www.w3.org/1999/xlink" 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="logging-impl-choice"></a>1.13. 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="osgi-wrapping"></a>1.14. 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 type="disc"><li><p>Use a repository of pre-wrapped libraries such as <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.eclipse.org/orbit/" target="_top">Orbit</a>,
+ <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://felix.apache.org/site/apache-felix-commons.html" target="_top">Felix Commons</a> or Knopflerfish <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.knopflerfish.org/repo/index.html" target="_top">repository</a>.
+ Gemini Blueprint uses the SpringSource Enterprise <a xmlns:xlink="http://www.w3.org/1999/xlink" 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 xmlns:xlink="http://www.w3.org/1999/xlink" href="http://s3.amazonaws.com/maven.springframework.org/osgi" target="_top">link</a> |
+ <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://s3browse.com/explore/maven.springframework.org/osgi/" target="_top">browser-friendly link</a>) for its internal usage.</p></li><li><p>Wrap the necessary jars with proper OSGi manifest. While this can be done by hand, we strongly recommend Peter Kriens
+ excellent <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.aqute.biz/Code/Bnd" target="_top">bnd</a> tool which can do this for you automatically.
+ For Maven, see Felix <a xmlns:xlink="http://www.w3.org/1999/xlink" href="http://felix.apache.org/site/maven-bundle-plugin-bnd.html" target="_top">
+ maven-bundle-plugin</a>.
+ </p></li><li><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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="jdk-crippled-jta-api"></a>1.15. 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="incomplete-osgi-jar"></a>1.16. 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="auto-export-visibility"></a>1.17. 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="junit382-serialization"></a>1.18. 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="pde-errors"></a>1.19. 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="upgrade-to-1.1"></a>1.20. 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="proxy-equality"></a>1.21. 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="static-collections"></a>1.22. 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 xmlns:xlink="http://www.w3.org/1999/xlink" 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="update-to-1.2"></a>1.23. 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="linkage-error"></a>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?</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 xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.springsource.org/bundlor" target="_top">Bundlor</a> or <a xmlns:xlink="http://www.w3.org/1999/xlink" 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 xmlns:xlink="http://www.w3.org/1999/xlink" 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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="blueprint"></a>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?</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" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="kf-2.3-boot-delegation"></a>1.26. 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 xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.knopflerfish.org/release_notes_2.3.html" target="_top">notes</a> for more
+ information.</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="pde-cycles"></a>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?</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 xmlns:xlink="http://www.w3.org/1999/xlink" 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> </td><td width="20%" align="center"><a accesskey="h" href="faq.html">Home</a></td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign=&q