Author: buildbot
Date: Mon Oct 22 09:17:08 2018
New Revision: 1036439

Log:
Staging update by buildbot for felix

Added:
    
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-dependency-manager/guides/whatsnew-r13.html
Removed:
    
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-dependency-manager/guides/whatsnew-r12.html
Modified:
    websites/staging/felix/trunk/content/   (props changed)

Propchange: websites/staging/felix/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Mon Oct 22 09:17:08 2018
@@ -1 +1 @@
-1844285
+1844537

Added: 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-dependency-manager/guides/whatsnew-r13.html
==============================================================================
--- 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-dependency-manager/guides/whatsnew-r13.html
 (added)
+++ 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-dependency-manager/guides/whatsnew-r13.html
 Mon Oct 22 09:17:08 2018
@@ -0,0 +1,305 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd";>
+<html>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE- 2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+  <head>
+    <title>Apache Felix - </title>
+    <link rel="icon" href="/res/favicon.ico">
+    <link rel="stylesheet" href="/res/site.css" type="text/css" media="all">
+    <link rel="stylesheet" href="/res/codehilite.css" type="text/css" 
media="all">
+    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+  </head>
+  <body>
+    <div class="title">
+      <div class="logo">
+        <a href="http://felix.apache.org/";>
+          <img border="0" alt="Apache Felix" src="/res/logo.png">
+        </a>
+      </div>
+      <div class="header">
+        <a href="http://www.apache.org/";>
+          <img border="0" alt="Apache" src="/res/apache.png">
+        </a>
+      </div>
+    </div>
+    
+    <div class="menu"> 
+      <style type="text/css">
+/* The following code is added by mdx_elementid.py
+   It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+  visibility: hidden;
+}
+h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, 
h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, 
dt:hover > .elementid-permalink { visibility: visible }</style>
+<p><a href="/news.html">News</a>  <br />
+<a href="/license.html">License</a>  <br />
+<a href="/downloads.cgi">Downloads</a>  <br />
+<a href="/documentation.html">Documentation</a>  <br />
+<a href="/mailinglists.html">Mailing Lists</a>  <br />
+<a href="/documentation/community/contributing.html">Contributing</a>  <br />
+<a href="/sitemap.html">Site Map</a>  <br />
+<a href="http://www.apache.org/";>ASF</a>  <br />
+<a href="http://www.apache.org/security/";>Security</a>  <br />
+<a href="http://www.apache.org/foundation/sponsorship.html";>Sponsorship</a>  
<br />
+<a href="http://www.apache.org/foundation/thanks.html";>Sponsors</a>    </p>
+<iframe
+    src="http://www.apache.org/ads/button.html";
+    style="border-width:0; float: left"
+    frameborder="0"
+    scrolling="no"
+    width="135"
+    height="135">
+</iframe>
+    </div>
+    
+    <div class="main">
+      <div class="breadcrump" style="font-size: 80%;">
+        <a href="/">Home</a>&nbsp;&raquo&nbsp;<a 
href="/documentation.html">Documentation</a>&nbsp;&raquo&nbsp;<a 
href="/documentation/subprojects.html">Apache Felix Subproject 
Documentation</a>&nbsp;&raquo&nbsp;<a 
href="/documentation/subprojects/apache-felix-dependency-manager.html">Apache 
Felix Dependency Manager</a>
+      </div>
+
+      <h1></h1>
+      <style type="text/css">
+/* The following code is added by mdx_elementid.py
+   It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+  visibility: hidden;
+}
+h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, 
h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, 
dt:hover > .elementid-permalink { visibility: visible }</style>
+<p>This section describes some enhancements and API modification which have 
been performed in the dependency manager r13 release.
+Mainly,</p>
+<ul>
+<li>Support for Java 9/10/11</li>
+<li>annotation API has been simplified</li>
+<li>support for user-defined annotation property types</li>
+<li>DM API has been reworked to simplify the definition of aspect and 
adapters.</li>
+<li>Lightweight support for OSGI service scopes</li>
+<li>The dependency manager is now built using bndtools 3.5.0 as well as with 
bndlib 3.5.0</li>
+<li>dependencymanager-deps is not used anymore (all required build time binary 
dependencies are now downloaded from maven central, and the gradle wrapper jar 
is also downloaded from the gradlew script). Moreover semantic versioning is 
now using a baseline that is downloaded from maven central.</li>
+</ul>
+<h2 id="api-enhancements">API enhancements<a class="headerlink" 
href="#api-enhancements" title="Permanent link">&para;</a></h2>
+<p>Some enhancements have been done in the dm API:</p>
+<ul>
+<li>the api to define aspects and adapters have been reworked (but dm API 
remains backward compatible)</li>
+<li>support for <a 
href="http://felix.staging.apache.org/documentation/subprojects/apache-felix-dependency-manager/reference/service-scopes.html";>service
 scopes</a></li>
+<li>you can now declare multiple property type interfaces when using 
Configuration Dependency or Factory Components (this was needed to implement 
the enhancements for the annotations)</li>
+<li>configuration dependency using metatypes can now declare property 
types</li>
+<li>Allow to specify if propagated configuration dependencies must override 
service service properties (it was not possible to override service properties 
with propagated service properties so far)</li>
+<li>Added the following signatures in Component interface:</li>
+<li>setInterface(Class serviceName, Dictionary properties)</li>
+<li>setInterface(Class[] serviceNames, Dictionary properties)</li>
+</ul>
+<h3 id="aspectadapters-api-enhancements">Aspect/Adapters API enhancements<a 
class="headerlink" href="#aspectadapters-api-enhancements" title="Permanent 
link">&para;</a></h3>
+<p>So far, aspects or adapters were defined using many methods from 
DependencyManager or DependencyActivatorBase classes:</p>
+<p>For example, in DependencyManager.java, we have many signatures</p>
+<div class="codehilite"><pre><span class="kd">public</span> <span 
class="kd">class</span> <span class="nc">DependencyManager</span> <span 
class="o">{</span>
+    <span class="kd">public</span> <span class="n">Component</span> <span 
class="nf">createAdapterService</span><span class="o">(</span><span 
class="n">Class</span><span class="o">&lt;?&gt;</span> <span 
class="n">serviceInterface</span><span class="o">,</span> <span 
class="n">String</span> <span class="n">serviceFilter</span><span 
class="o">)</span> <span class="o">{...}</span>
+    <span class="kd">public</span> <span class="n">Component</span> <span 
class="nf">createAdapterService</span><span class="o">(</span><span 
class="n">Class</span><span class="o">&lt;?&gt;</span> <span 
class="n">serviceInterface</span><span class="o">,</span> <span 
class="n">String</span> <span class="n">serviceFilter</span><span 
class="o">,</span> <span class="n">String</span> <span 
class="n">autoConfig</span><span class="o">)</span> <span class="o">{...}</span>
+    <span class="kd">public</span> <span class="n">Component</span> <span 
class="nf">createAdapterService</span><span class="o">(</span><span 
class="n">Class</span><span class="o">&lt;?&gt;</span> <span 
class="n">serviceInterface</span><span class="o">,</span> <span 
class="n">String</span> <span class="n">serviceFilter</span><span 
class="o">,</span> <span class="n">String</span> <span 
class="n">add</span><span class="o">,</span> <span class="n">String</span> 
<span class="n">change</span><span class="o">,</span> <span 
class="n">String</span> <span class="n">remove</span><span class="o">)</span> 
<span class="o">{...}</span>
+    <span class="kd">public</span> <span class="n">Component</span> <span 
class="nf">createAdapterService</span><span class="o">(</span><span 
class="n">Class</span><span class="o">&lt;?&gt;</span> <span 
class="n">serviceInterface</span><span class="o">,</span> <span 
class="n">String</span> <span class="n">serviceFilter</span><span 
class="o">,</span> <span class="n">String</span> <span 
class="n">add</span><span class="o">,</span> <span class="n">String</span> 
<span class="n">change</span><span class="o">,</span> <span 
class="n">String</span> <span class="n">remove</span><span class="o">,</span> 
<span class="n">String</span> <span class="n">swap</span><span 
class="o">)</span> <span class="o">{...}</span>
+    <span class="kd">public</span> <span class="n">Component</span> <span 
class="nf">createAdapterService</span><span class="o">(</span><span 
class="n">Class</span><span class="o">&lt;?&gt;</span> <span 
class="n">serviceInterface</span><span class="o">,</span> <span 
class="n">String</span> <span class="n">serviceFilter</span><span 
class="o">,</span> <span class="n">String</span> <span 
class="n">autoConfig</span><span class="o">,</span> <span 
class="n">Object</span> <span class="n">callbackInstance</span><span 
class="o">,</span> <span class="n">String</span> <span 
class="n">add</span><span class="o">,</span> <span class="n">String</span> 
<span class="n">change</span><span class="o">,</span> <span 
class="n">String</span> <span class="n">remove</span><span class="o">,</span> 
<span class="n">String</span> <span class="n">swap</span><span 
class="o">,</span> <span class="kt">boolean</span> <span 
class="n">propagate</span><span class="o">)</span> <span class="o">{...}</span>
+
+    <span class="kd">public</span> <span class="n">Component</span> <span 
class="nf">createFactoryConfigurationAdapterService</span><span 
class="o">(</span><span class="n">String</span> <span 
class="n">factoryPid</span><span class="o">,</span> <span 
class="n">String</span> <span class="n">update</span><span class="o">,</span> 
<span class="kt">boolean</span> <span class="n">propagate</span><span 
class="o">)</span> <span class="o">{...}</span>
+    <span class="kd">public</span> <span class="n">Component</span> <span 
class="nf">createFactoryConfigurationAdapterService</span><span 
class="o">(</span><span class="n">String</span> <span 
class="n">factoryPid</span><span class="o">,</span> <span 
class="n">String</span> <span class="n">update</span><span class="o">,</span> 
<span class="kt">boolean</span> <span class="n">propagate</span><span 
class="o">,</span> <span class="n">Object</span> <span 
class="n">callbackInstance</span><span class="o">)</span> <span 
class="o">{...}</span>
+    <span class="kd">public</span> <span class="n">Component</span> <span 
class="nf">createFactoryConfigurationAdapterService</span><span 
class="o">(</span><span class="n">String</span> <span 
class="n">factoryPid</span><span class="o">,</span> <span 
class="n">String</span> <span class="n">update</span><span class="o">,</span> 
<span class="kt">boolean</span> <span class="n">propagate</span><span 
class="o">,</span> <span class="n">Class</span><span class="o">&lt;?&gt;</span> 
<span class="n">configType</span><span class="o">)</span> <span 
class="o">{...}</span>
+    <span class="kd">public</span> <span class="n">Component</span> <span 
class="nf">createFactoryConfigurationAdapterService</span><span 
class="o">(</span><span class="n">String</span> <span 
class="n">factoryPid</span><span class="o">,</span> <span 
class="n">String</span> <span class="n">update</span><span class="o">,</span> 
<span class="kt">boolean</span> <span class="n">propagate</span><span 
class="o">,</span> <span class="n">Object</span> <span 
class="n">callbackInstance</span><span class="o">,</span> <span 
class="n">Class</span><span class="o">&lt;?&gt;</span> <span 
class="n">configType</span><span class="o">)</span> <span class="o">{...}</span>
+    <span class="kd">public</span> <span class="n">Component</span> <span 
class="nf">createAdapterFactoryConfigurationService</span><span 
class="o">(</span><span class="n">String</span> <span 
class="n">factoryPid</span><span class="o">,</span> <span 
class="n">String</span> <span class="n">update</span><span class="o">,</span> 
<span class="kt">boolean</span> <span class="n">propagate</span><span 
class="o">,</span><span class="n">String</span> <span 
class="n">heading</span><span class="o">,</span> <span class="n">String</span> 
<span class="n">desc</span><span class="o">,</span> <span 
class="n">String</span> <span class="n">localization</span><span 
class="o">,</span> <span class="n">PropertyMetaData</span><span 
class="o">[]</span> <span class="n">propertiesMetaData</span><span 
class="o">)</span> <span class="o">{...}</span>
+
+    <span class="kd">public</span> <span class="n">Component</span> <span 
class="nf">createBundleAdapterService</span><span class="o">(</span><span 
class="kt">int</span> <span class="n">bundleStateMask</span><span 
class="o">,</span> <span class="n">String</span> <span 
class="n">bundleFilter</span><span class="o">,</span> <span 
class="kt">boolean</span> <span class="n">propagate</span><span 
class="o">)</span> <span class="o">{...}</span>
+    <span class="kd">public</span> <span class="n">Component</span> <span 
class="nf">createBundleAdapterService</span><span class="o">(</span><span 
class="kt">int</span> <span class="n">bundleStateMask</span><span 
class="o">,</span> <span class="n">String</span> <span 
class="n">bundleFilter</span><span class="o">,</span> <span 
class="kt">boolean</span> <span class="n">propagate</span><span 
class="o">,</span> <span class="n">Object</span> <span 
class="n">callbackInstance</span><span class="o">,</span> <span 
class="n">String</span> <span class="n">add</span><span class="o">,</span> 
<span class="n">String</span> <span class="n">change</span><span 
class="o">,</span> <span class="n">String</span> <span 
class="n">remove</span><span class="o">)</span> <span class="o">{...}</span>
+
+    <span class="kd">public</span> <span class="n">Component</span> <span 
class="nf">createResourceAdapterService</span><span class="o">(</span><span 
class="n">String</span> <span class="n">resourceFilter</span><span 
class="o">,</span> <span class="kt">boolean</span> <span 
class="n">propagate</span><span class="o">,</span> <span 
class="n">Object</span> <span class="n">callbackInstance</span><span 
class="o">,</span> <span class="n">String</span> <span 
class="n">callbackChanged</span><span class="o">)</span> <span 
class="o">{...}</span>
+    <span class="kd">public</span> <span class="n">Component</span> <span 
class="nf">createResourceAdapterService</span><span class="o">(</span><span 
class="n">String</span> <span class="n">resourceFilter</span><span 
class="o">,</span> <span class="kt">boolean</span> <span 
class="n">propagate</span><span class="o">,</span> <span 
class="n">Object</span> <span class="n">callbackInstance</span><span 
class="o">,</span> <span class="n">String</span> <span 
class="n">callbackSet</span><span class="o">,</span> <span 
class="n">String</span> <span class="n">callbackChanged</span><span 
class="o">)</span>
+    <span class="kd">public</span> <span class="n">Component</span> <span 
class="nf">createResourceAdapterService</span><span class="o">(</span><span 
class="n">String</span> <span class="n">resourceFilter</span><span 
class="o">,</span> <span class="n">Object</span> <span 
class="n">propagateCallbackInstance</span><span class="o">,</span> <span 
class="n">String</span> <span class="n">propagateCallbackMethod</span><span 
class="o">,</span> <span class="n">Object</span> <span 
class="n">callbackInstance</span><span class="o">,</span> <span 
class="n">String</span> <span class="n">callbackChanged</span><span 
class="o">)</span> <span class="o">{...}</span>
+    <span class="kd">public</span> <span class="n">Component</span> <span 
class="nf">createResourceAdapterService</span><span class="o">(</span><span 
class="n">String</span> <span class="n">resourceFilter</span><span 
class="o">,</span> <span class="n">Object</span> <span 
class="n">propagateCallbackInstance</span><span class="o">,</span> <span 
class="n">String</span> <span class="n">propagateCallbackMethod</span><span 
class="o">,</span> <span class="n">Object</span> <span 
class="n">callbackInstance</span><span class="o">,</span> <span 
class="n">String</span> <span class="n">callbackSet</span><span 
class="o">,</span> <span class="n">String</span> <span 
class="n">callbackChanged</span><span class="o">)</span> <span 
class="o">{...}</span>
+
+    <span class="kd">public</span> <span class="n">Component</span> <span 
class="nf">createAspectService</span><span class="o">(</span><span 
class="n">Class</span><span class="o">&lt;?&gt;</span> <span 
class="n">serviceInterface</span><span class="o">,</span> <span 
class="n">String</span> <span class="n">serviceFilter</span><span 
class="o">,</span> <span class="kt">int</span> <span 
class="n">ranking</span><span class="o">,</span> <span class="n">String</span> 
<span class="n">autoConfig</span><span class="o">)</span> <span 
class="o">{...}</span>
+    <span class="kd">public</span> <span class="n">Component</span> <span 
class="nf">createAspectService</span><span class="o">(</span><span 
class="n">Class</span><span class="o">&lt;?&gt;</span> <span 
class="n">serviceInterface</span><span class="o">,</span> <span 
class="n">String</span> <span class="n">serviceFilter</span><span 
class="o">,</span> <span class="kt">int</span> <span 
class="n">ranking</span><span class="o">)</span> <span class="o">{...}</span>
+    <span class="kd">public</span> <span class="n">Component</span> <span 
class="nf">createAspectService</span><span class="o">(</span><span 
class="n">Class</span><span class="o">&lt;?&gt;</span> <span 
class="n">serviceInterface</span><span class="o">,</span> <span 
class="n">String</span> <span class="n">serviceFilter</span><span 
class="o">,</span> <span class="kt">int</span> <span 
class="n">ranking</span><span class="o">,</span> <span class="n">String</span> 
<span class="n">add</span><span class="o">,</span> <span 
class="n">String</span> <span class="n">change</span><span class="o">,</span> 
<span class="n">String</span> <span class="n">remove</span><span 
class="o">)</span> <span class="o">{...}</span>
+    <span class="kd">public</span> <span class="n">Component</span> <span 
class="nf">createAspectService</span><span class="o">(</span><span 
class="n">Class</span><span class="o">&lt;?&gt;</span> <span 
class="n">serviceInterface</span><span class="o">,</span> <span 
class="n">String</span> <span class="n">serviceFilter</span><span 
class="o">,</span> <span class="kt">int</span> <span 
class="n">ranking</span><span class="o">,</span> <span class="n">String</span> 
<span class="n">add</span><span class="o">,</span> <span 
class="n">String</span> <span class="n">change</span><span class="o">,</span> 
<span class="n">String</span> <span class="n">remove</span><span 
class="o">,</span> <span class="n">String</span> <span 
class="n">swap</span><span class="o">)</span> <span class="o">{...}</span>
+    <span class="kd">public</span> <span class="n">Component</span> <span 
class="nf">createAspectService</span><span class="o">(</span><span 
class="n">Class</span><span class="o">&lt;?&gt;</span> <span 
class="n">serviceInterface</span><span class="o">,</span> <span 
class="n">String</span> <span class="n">serviceFilter</span><span 
class="o">,</span> <span class="kt">int</span> <span 
class="n">ranking</span><span class="o">,</span> <span class="n">Object</span> 
<span class="n">callbackInstance</span><span class="o">,</span> <span 
class="n">String</span> <span class="n">add</span><span class="o">,</span> 
<span class="n">String</span> <span class="n">change</span><span 
class="o">,</span> <span class="n">String</span> <span 
class="n">remove</span><span class="o">,</span> <span class="n">String</span> 
<span class="n">swap</span><span class="o">)</span> <span class="o">{...}</span>
+</pre></div>
+
+
+<p>So, in this new release, we have simplified the usage of the 
aspect/adapters like this:
+instead of having to use some of the many methods from the DependencyManager 
or DependencyActivatorBase,
+we have added some new interfaces for the aspect and adapters, and these 
interfaces are extending the Component interface.
+All other existing methods have been moved to 
DependencyManagerCompat/DependencyActivatorBaseCompat classes and the
+DependencyManager/DependencyActovatorBase classes are now extending the compat 
classes: this allows to simplify the
+reading of the javadocs for DependencyManager/DependencyActovatorBase.</p>
+<p>For example, let's first show how an factory pid component was declared so 
far (a factory pid component is one which
+can be instantated multiple times using a "factory configuration" created 
using standard "configuration admin" service):</p>
+<div class="codehilite"><pre><span class="kd">public</span> <span 
class="kd">class</span> <span class="nc">Activator</span> <span 
class="kd">extends</span> <span class="n">DependencyActivatorBase</span> <span 
class="o">{</span>
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="kt">void</span> <span 
class="nf">init</span><span class="o">(</span><span 
class="n">BundleContext</span> <span class="n">context</span><span 
class="o">,</span> <span class="n">DependencyManager</span> <span 
class="n">dm</span><span class="o">)</span> <span class="kd">throws</span> 
<span class="n">Exception</span> <span class="o">{</span>
+        <span class="n">dm</span><span class="o">.</span><span 
class="na">add</span><span class="o">(</span><span 
class="n">createFactoryConfigurationAdapterService</span><span 
class="o">(</span><span class="s">&quot;my.factory.pid&quot;</span><span 
class="o">,</span> <span class="s">&quot;updated&quot;</span><span 
class="o">,</span> <span class="kc">true</span><span class="o">,</span> <span 
class="n">MyConfig</span><span class="o">.</span><span 
class="na">class</span><span class="o">)</span>
+            <span class="o">.</span><span class="na">setInterface</span><span 
class="o">(</span><span class="n">MyService</span><span class="o">.</span><span 
class="na">class</span><span class="o">.</span><span 
class="na">getName</span><span class="o">(),</span> <span 
class="kc">null</span><span class="o">)</span>
+            <span class="o">.</span><span 
class="na">setImplementation</span><span class="o">(</span><span 
class="n">MyServiceImpl</span><span class="o">.</span><span 
class="na">class</span><span class="o">)</span>
+            <span class="o">.</span><span class="na">add</span><span 
class="o">(</span><span class="n">createServiceDependency</span><span 
class="o">().</span><span class="na">setService</span><span 
class="o">(</span><span class="n">LogService</span><span 
class="o">.</span><span class="na">class</span><span class="o">)));</span> 
<span class="c1">// NullObject </span>
+    <span class="o">}</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<p>So, now, there is a new FactoryComponent interface which extends the 
Component interface and it contains all the
+various parameters used when declaring a factory pid component. So the example 
above becomes:</p>
+<div class="codehilite"><pre><span class="kd">public</span> <span 
class="kd">class</span> <span class="nc">Activator</span> <span 
class="kd">extends</span> <span class="n">DependencyActivatorBase</span> <span 
class="o">{</span>
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="kt">void</span> <span 
class="nf">init</span><span class="o">(</span><span 
class="n">BundleContext</span> <span class="n">context</span><span 
class="o">,</span> <span class="n">DependencyManager</span> <span 
class="n">dm</span><span class="o">)</span> <span class="kd">throws</span> 
<span class="n">Exception</span> <span class="o">{</span>
+        <span class="n">dm</span><span class="o">.</span><span 
class="na">add</span><span class="o">(</span><span 
class="n">createFactoryComponent</span><span class="o">()</span>
+            <span class="o">.</span><span class="na">setFactoryPid</span><span 
class="o">(</span><span class="s">&quot;my.factory.pid&quot;</span><span 
class="o">)</span>
+            <span class="o">.</span><span class="na">setPropagate</span><span 
class="o">(</span><span class="kc">true</span><span class="o">)</span>
+            <span class="o">.</span><span class="na">setConfigType</span><span 
class="o">(</span><span class="n">MyConfig</span><span class="o">.</span><span 
class="na">class</span><span class="o">)</span>
+            <span class="o">.</span><span class="na">setInterface</span><span 
class="o">(</span><span class="n">MyService</span><span class="o">.</span><span 
class="na">class</span><span class="o">.</span><span 
class="na">getName</span><span class="o">(),</span> <span 
class="kc">null</span><span class="o">)</span>
+            <span class="o">.</span><span 
class="na">setImplementation</span><span class="o">(</span><span 
class="n">MyServiceImpl</span><span class="o">.</span><span 
class="na">class</span><span class="o">)</span>
+            <span class="o">.</span><span class="na">add</span><span 
class="o">(</span><span class="n">createServiceDependency</span><span 
class="o">().</span><span class="na">setService</span><span 
class="o">(</span><span class="n">LogService</span><span 
class="o">.</span><span class="na">class</span><span class="o">)));</span> 
<span class="c1">// NullObject </span>
+    <span class="o">}</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<p>now, we explain what the new interfaces look like: Indeed as you can 
imagine, there is an issue when
+you extend the Component interface, because the various Component setter 
methods return a Component type.
+So, what we would like is to be able to introduce a generic type in the 
Component interface , and such
+generic type can then be used to allow the Component setter methods to return 
not the Component type,
+but instead return the aspect/adapter sub classes. This is what we have done, 
let's show a pseudo code,
+so you can understand how it works:</p>
+<p>First, the Component annotation have been reworked like this:</p>
+<div class="codehilite"><pre><span class="kd">public</span> <span 
class="kd">interface</span> <span class="nc">Component</span><span 
class="o">&lt;</span><span class="n">T</span> <span class="kd">extends</span> 
<span class="n">Component</span><span class="o">&lt;</span><span 
class="n">T</span><span class="o">&gt;&gt;</span> <span class="o">{</span>
+    <span class="n">T</span> <span class="nf">setInterface</span><span 
class="o">(</span><span class="n">String</span> <span 
class="n">service</span><span class="o">,</span> <span 
class="n">Dictionary</span> <span class="n">properties</span><span 
class="o">)</span>
+    <span class="n">T</span> <span class="nf">setImplementation</span><span 
class="o">(</span><span class="n">Object</span> <span class="n">ob</span><span 
class="o">);</span>
+    <span class="o">...</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<p>As you can see the Component annotation is now using a recursive generic 
type which extends the Component interface.
+And now we have for example the following AdapterComponent interface which is 
defined like this:</p>
+<div class="codehilite"><pre><span class="kd">public</span> <span 
class="kd">interface</span> <span class="nc">AdapterComponent</span> <span 
class="kd">extends</span> <span class="n">Component</span><span 
class="o">&lt;</span><span class="n">AdapterComponent</span><span 
class="o">&gt;</span> <span class="o">{</span>
+    <span class="n">AdapterComponent</span> <span 
class="nf">setAdaptee</span><span class="o">(</span><span 
class="n">Class</span><span class="o">&lt;?&gt;</span> <span 
class="n">service</span><span class="o">,</span> <span class="n">String</span> 
<span class="n">filter</span><span class="o">);</span>
+    <span class="n">AdapterComponent</span> <span 
class="nf">setAdapteeCallbacks</span><span class="o">(</span><span 
class="n">String</span> <span class="n">add</span><span class="o">,</span> 
<span class="n">String</span> <span class="n">change</span><span 
class="o">,</span> <span class="n">String</span> <span 
class="n">remove</span><span class="o">,</span> <span class="n">String</span> 
<span class="n">swap</span><span class="o">);</span>
+    <span class="o">...</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<p>So, now, an adapter component can be defined like this:</p>
+<div class="codehilite"><pre><span class="n">Component</span> <span 
class="n">adapter</span> <span class="o">=</span> <span 
class="n">createAdapterComponent</span><span class="o">()</span>
+   <span class="o">.</span><span class="na">setAdaptee</span><span 
class="o">(</span><span class="n">Adaptee</span><span class="o">.</span><span 
class="na">class</span><span class="o">,</span> <span 
class="s">&quot;(foo=bar)&quot;</span><span class="o">)</span>
+   <span class="o">.</span><span class="na">setAdapteeCallbacks</span><span 
class="o">(</span><span class="s">&quot;setAdaptee&quot;</span><span 
class="o">,</span> <span class="s">&quot;changeAdaptee&quot;</span><span 
class="o">,</span> <span class="kc">null</span><span class="o">,</span> <span 
class="kc">null</span><span class="o">)</span>
+   <span class="o">.</span><span class="na">setImplementation</span><span 
class="o">(</span><span class="n">AdapterImpl</span><span 
class="o">.</span><span class="na">class</span><span class="o">)</span>
+   <span class="o">.</span><span class="na">setInterface</span><span 
class="o">(</span><span class="n">AdapterService</span><span 
class="o">.</span><span class="na">class</span><span class="o">,</span> <span 
class="kc">null</span><span class="o">)</span>
+   <span class="o">.</span><span class="na">add</span><span 
class="o">(</span><span class="n">createServiceDependency</span><span 
class="o">().</span><span class="na">setService</span><span 
class="o">(</span><span class="n">LogService</span><span 
class="o">.</span><span class="na">class</span><span class="o">));</span>
+</pre></div>
+
+
+<h3 id="support-for-multiple-configuration-types-in-callbacks">Support for 
multiple configuration types in callbacks<a class="headerlink" 
href="#support-for-multiple-configuration-types-in-callbacks" title="Permanent 
link">&para;</a></h3>
+<p>The ConfigurationDependency and Factory components can now support updated 
callbacks with multiple configuration types,
+for example, the following Activator defines a factory component (using the 
enhanced api) and multiple configuration
+types can now be provided:</p>
+<div class="codehilite"><pre><span class="kd">public</span> <span 
class="kd">class</span> <span class="nc">Activator</span> <span 
class="kd">extends</span> <span class="n">DependencyActivatorBase</span> <span 
class="o">{</span>
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="kt">void</span> <span 
class="nf">init</span><span class="o">(</span><span 
class="n">BundleContext</span> <span class="n">context</span><span 
class="o">,</span> <span class="n">DependencyManager</span> <span 
class="n">dm</span><span class="o">)</span> <span class="kd">throws</span> 
<span class="n">Exception</span> <span class="o">{</span>
+        <span class="n">Component</span> <span 
class="n">factoryComponent</span> <span class="o">=</span> <span 
class="n">createFactoryComponent</span><span class="o">()</span>
+            <span class="o">.</span><span class="na">setFactoryPid</span><span 
class="o">(</span><span class="n">pid</span><span class="o">).</span>
+            <span class="o">.</span><span class="na">setConfigType</span><span 
class="o">(</span><span class="n">MyConfig1</span><span class="o">.</span><span 
class="na">class</span><span class="o">,</span> <span 
class="n">MyConfig2</span><span class="o">.</span><span 
class="na">class</span><span class="o">)</span>
+            <span class="o">.</span><span 
class="na">setImplementation</span><span class="o">(</span><span 
class="n">MyComponent</span><span class="o">.</span><span 
class="na">class</span><span class="o">);</span>
+        <span class="n">dm</span><span class="o">.</span><span 
class="na">add</span><span class="o">(</span><span 
class="n">factoryComponent</span><span class="o">);</span>
+    <span class="o">}</span>
+<span class="o">}</span>
+
+<span class="kd">public</span> <span class="kd">class</span> <span 
class="nc">MyComponent</span> <span class="o">{</span>
+    <span class="kt">void</span> <span class="nf">updated</span><span 
class="o">(</span><span class="n">MyConfig1</span> <span 
class="n">cnf1</span><span class="o">,</span> <span class="n">MyConfig2</span> 
<span class="n">cnf2</span><span class="o">)</span> <span class="o">{</span> 
<span class="o">...</span> <span class="o">}</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<p>Moreover, you can define a Dictionary parameter as the first argument in 
the updated callback, because sometimes,
+it's useful to be injected with the raw dictionary configuration, as well as 
with the configuration types.
+Example:</p>
+<div class="codehilite"><pre><span class="kd">public</span> <span 
class="kd">class</span> <span class="nc">MyComponent</span> <span 
class="o">{</span>
+    <span class="kt">void</span> <span class="nf">updated</span><span 
class="o">(</span><span class="n">Dictionary</span><span 
class="o">&lt;</span><span class="n">String</span><span class="o">,</span> 
<span class="n">Object</span><span class="o">&gt;</span> <span 
class="n">rawConfig</span><span class="o">,</span> <span 
class="n">MyConfig1</span> <span class="n">cnf1</span><span class="o">,</span> 
<span class="n">MyConfig2</span> <span class="n">cnf2</span><span 
class="o">)</span> <span class="o">{</span> <span class="o">...</span> <span 
class="o">}</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<p>so, the new signatures for the updated callbacks are now the following (for 
both ConfigurationDependency and Factory Component):</p>
+<div class="codehilite"><pre><span class="n">updated</span><span 
class="o">(</span><span class="n">Dictionary</span> <span 
class="n">cnf</span><span class="o">)</span>
+<span class="n">updated</span><span class="o">(</span><span 
class="n">Component</span> <span class="n">comp</span><span class="o">,</span> 
<span class="n">Dictionary</span> <span class="n">cnf</span><span 
class="o">)</span>
+<span class="n">updated</span><span class="o">(</span><span 
class="n">Component</span> <span class="n">comp</span><span class="o">,</span> 
<span class="n">Property</span> <span class="n">interfaces</span> <span 
class="o">...)</span>
+<span class="n">updated</span><span class="o">(</span><span 
class="n">Property</span> <span class="n">interfaces</span> <span 
class="o">...)</span>
+<span class="n">updated</span><span class="o">(</span><span 
class="n">Dictionary</span> <span class="n">cnf</span><span class="o">,</span> 
<span class="n">Property</span> <span class="n">interfaces</span> <span 
class="o">...)</span>
+<span class="n">updated</span><span class="o">(</span><span 
class="n">Component</span> <span class="n">comp</span><span class="o">,</span> 
<span class="n">Dictionary</span> <span class="n">cnf</span><span 
class="o">,</span> <span class="n">Property</span> <span 
class="n">interfaces</span> <span class="o">...)</span>
+</pre></div>
+
+
+<h2 id="annotations-enhancements-and-changes">Annotations enhancements and 
changes<a class="headerlink" href="#annotations-enhancements-and-changes" 
title="Permanent link">&para;</a></h2>
+<p>Essentially, the following enhancements and modifications have been done 
regarding annotations:</p>
+<ul>
+<li>added support for new user defined property type annotations (similar to 
OSGI R7).</li>
+<li>annotations using standard r7 @ComponentPropertyType are also supported. 
Indeed, not only declarative service is using this annotation, other r7 apis 
like jaxrs whiteboard are also defining some annotations that are themselves 
annotated with @ComponentPropertyType; so it is important to support this 
annotation (The dm annotation plugin has been enhanced by reusing some part of 
the ds annotation scanner from bndlib, which is full of reusable useful code 
which has been applied to dm (scanning of property types, PREFIX_, etc ...)</li>
+<li>Allow ServiceDependency to auto detect the service type when the 
annotation is applied on a collection class field</li>
+<li>removed FactoryComponentAdapterService (some attributes have been added in 
the Component annotation in order to declare factory pid components with the 
@Component annotation)</li>
+<li>removed some old annotations / attributes. The attributes and annotations 
related to metatype have been removed since you can now use the standard 
metatype annotations. if users need to old version, then they can simply use 
the previous 4.2.1 from old dm annotation api. Notice that the dm runtime is 
compatible with old and new annotations version, so you can use latest dm 
annotation runtime and old annotation api.</li>
+<li>removed "dereference" attribute in ServiceDependencyAnnotation, because we 
can now infer if the service dependency callbacks accepts a ServiceReference or 
a ServiceObjects parameter</li>
+<li>propagated configuration dependencies are now taking precedence over 
component service properties, meaning that a component is defined with some 
service properties, then the service properties which are also found from the 
propagated configuration will be overriden (by the configuration 
properties)</li>
+<li>Since some incompatible changes have been made, the major version of the 
annotation bundle has been bumped to 5.0.0.</li>
+</ul>
+<h3 id="not-backward-compatible-annotation-changes">Not backward compatible 
annotation changes<a class="headerlink" 
href="#not-backward-compatible-annotation-changes" title="Permanent 
link">&para;</a></h3>
+<p>The following has been removed in the annotation api:</p>
+<ul>
+<li>removed FactoryConfigurationAdapterService annotation, which was too 
verbose. when you need to define some factory pid component, just reuse the 
@Component annotation and declare the new factoryPid/propagate/updated 
attributes that have been added in the @Component annotation</li>
+<li>Removed PropertyMetadata annotation: it was related to metatypes, but as 
of today, osgi metatypes can be defined using standard metatype annotations. No 
need to support this anymore.</li>
+<li>Removed ResourceAdapterService and ResourceDependency annotations because 
it was needed to depend on some classes from the dependency manager API. The DM 
Api should be used directly.</li>
+<li>Removed the following attributes from the Component annotation: -- 
FACTORY_NAME -- FACTORY_INSTANCE -- factorySet -- factoryMethod These 
attributes were used to be able to create component instances multiple times. 
Now, simply use factoryPid Component attribute and use standard Configuration 
Admin in order to instantiate multiple instances of a given service (using 
factory configuration).</li>
+<li>Removed PropertyMetaData annotation, which was related to osgi metatype. 
Simply use standard metatype annotation.</li>
+<li>propagated configuration dependencies are now taking precedence over 
component service properties, meaning that a component is defined with some 
service properties, then the service properties which are also found from the 
propagated configuration will be overriden (by the configuration 
properties)</li>
+</ul>
+<h2 id="usage-of-java-91011">Usage of Java 9/10/11<a class="headerlink" 
href="#usage-of-java-91011" title="Permanent link">&para;</a></h2>
+<p>When using Java 9 / 10 / 11, then you can't use fluent service properties 
anymore with dm-lambda, 
+because in these new jdk versions, the "-parameters" option does not generate 
lambda parameters 
+metadata anymore. So, the following example won't work <strong>using jdk 
9/10/11</strong> 
+(but still works using Java 8):</p>
+<div class="codehilite"><pre><span class="n">component</span><span 
class="o">(</span><span class="n">comp</span> <span class="o">-&gt;</span> 
<span class="n">comp</span><span class="o">.</span><span 
class="na">impl</span><span class="o">(</span><span class="n">Foo</span><span 
class="o">.</span><span class="na">class</span><span class="o">).</span><span 
class="na">provides</span><span class="o">(</span><span 
class="n">FooService</span><span class="o">.</span><span 
class="na">class</span><span class="o">,</span> <span class="n">property</span> 
<span class="o">-&gt;</span> <span class="s">&quot;service property 
value&quot;</span><span class="o">));</span>
+</pre></div>
+
+
+<p>With Java 9/10/11, use this instead:</p>
+<div class="codehilite"><pre><span class="n">component</span><span 
class="o">(</span><span class="n">comp</span> <span class="o">-&gt;</span> 
<span class="n">comp</span><span class="o">.</span><span 
class="na">impl</span><span class="o">(</span><span class="n">Foo</span><span 
class="o">.</span><span class="na">class</span><span class="o">).</span><span 
class="na">provides</span><span class="o">(</span><span 
class="n">FooService</span><span class="o">.</span><span 
class="na">class</span><span class="o">,</span> <span 
class="s">&quot;property&quot;</span><span class="o">,</span> <span 
class="s">&quot;service property value&quot;</span><span class="o">));</span>
+</pre></div>
+
+
+<p>The fluent service properties using lambda expression maybe removed in 
future DM version if a solution is not found to make it working with Java 
9/10/11</p>
+      <div class="timestamp" style="margin-top: 30px; font-size: 80%; 
text-align: right;">
+        Rev. 1844537 by pderop on Mon, 22 Oct 2018 09:15:54 +0000
+      </div>
+      <div class="trademarkFooter"> 
+        Apache Felix, Felix, Apache, the Apache feather logo, and the Apache 
Felix project
+        logo are trademarks of The Apache Software Foundation. All other marks 
mentioned
+        may be trademarks or registered trademarks of their respective owners.
+      </div>
+    </div>
+  </body>
+</html>


Reply via email to