blob: f7e6fc04b8f77d91a3713e87b6e45177d9663770 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd";>
<!--
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.
-->
<html>
<head>
<link rel="shortcut icon" href="http://aries.apache.org/images/favicon.ico"></link>
<link type="text/css" rel="stylesheet" href="http://aries.apache.org/resources/site.css"></link>
</script><script src="http://aries.apache.org/resources/menus.js" language="javascript" type="text/javascript"></script>
<meta name="keywords" content="..."/>
<meta name="description" content="..." />
<title>
Apache Aries -
</title>
</head>
<body onload="SetMenu()">
<table width="100%" cellpadding="0" cellspacing="0">
<tr width="100%">
<td id="cell-0-0" colspan="2">&nbsp;</td>
<td id="cell-0-1">&nbsp;</td>
<td id="cell-0-2" colspan="2">&nbsp;</td>
</tr>
<tr width="100%">
<td id="cell-1-0">&nbsp;</td>
<td id="cell-1-1">&nbsp;</td>
<td id="cell-1-2">
<div style="padding: 5px;">
<div id="banner">
<!-- Banner -->
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td align="left" class="topbardiv" nowrap="">
<a href="http://aries.apache.org/" title="Apache Aries"> <img border="0" src="http://aries.apache.org/images/Arieslogo_Horizontal.gif"> </a>
</td>
<td align="right" nowrap="">
<a href="http://www.apache.org/" title="The Apache Software Foundation"> <img border="0" src="http://aries.apache.org/images/apache_feather.png"> </a>
</td>
</tr>
</table>
<!-- Banner -->
</div>
</div>
<div id="top-menu">
<table border="0" cellpadding="1" cellspacing="0" width="100%">
<tr>
<td>
<div align="left">
<!-- Breadcrumbs -->
<!-- Breadcrumbs -->
</div>
</td>
<td>
<div align="right">
<!-- Quicklinks -->
<DIV style="padding: 5px 5px 0px 25px;">
<FORM action="http://www.google.com/search" method="get" style="font-size: 10px;">
<A href="http://www.apache.org/licenses/LICENSE-2.0.html" class="external-link" rel="nofollow">License</A>
<INPUT name="ie" type="hidden" value="UTF-8"></INPUT>
<INPUT name="oe" type="hidden" value="UTF-8"></INPUT>
<INPUT maxlength="255" name="q" size="15" type="text" value></INPUT>
<INPUT name="btnG" type="submit" value="Search"></INPUT>
<INPUT name="domains" type="hidden" value="aries.apache.org"></INPUT>
<INPUT name="sitesearch" type="hidden" value="aries.apache.org"></INPUT>
</FORM>
</DIV>
<!-- Quicklinks -->
</div>
</td>
</tr>
</table>
</div>
</td>
<td id="cell-1-3">&nbsp;</td>
<td id="cell-1-4">&nbsp;</td>
</tr>
<tr width="100%">
<td id="cell-2-0" colspan="2">&nbsp;</td>
<td id="cell-2-1">
<table>
<tr height="100%" valign="top">
<td height="100%">
<div id="wrapper-menu-page-right">
<div id="wrapper-menu-page-top">
<div id="wrapper-menu-page-bottom">
<div id="menu-page">
<!-- NavigationBar -->
<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>
<div onclick="SwitchMenu('documentation')" id="documentationTitle" class="menutitle">Documentation</div>
<div id="documentation" class="menuitemgroup">
<div class="menuitem">
<a href="/documentation/integrators-guide.html">Integrators Guide</a>
</div>
<div class="menuitem">
<a href="/documentation/articles.html">Articles</a>
</div>
<div class="menuitem">
<a href="https://svn.apache.org/repos/asf/aries/slides/">Slides</a>
</div>
<div class="menuitem">
<a href="/documentation/tutorials.html">Tutorials</a>
</div>
<div class="menuitem">
<a href="/documentation/tools.html">Tools</a>
</div>
</div>
<div onclick="SwitchMenu('modules')" id="modulesTitle" class="menutitle">Modules</div>
<div id="modules" class="menuitemgroup">
<div class="menuitem">
<a href="/modules/samples.html">Samples</a>
</div>
<div class="menuitem">
<a href="/modules/async-svcs.html">Asynchronous Services</a>
</div>
<div class="menuitem">
<a href="/modules/blueprint.html">Blueprint</a>
</div>
<div class="menuitem">
<a href="/modules/blueprint-maven-plugin.html">Blueprint-maven-plugin</a>
</div>
<div class="menuitem">
<a href="/modules/blueprintannotation.html">Blueprint Annotations</a>
</div>
<div class="menuitem">
<a href="/modules/blueprintnoosgi.html">Blueprint No-OSGi</a>
</div>
<div class="menuitem">
<a href="/modules/blueprintweb.html">Blueprint Web</a>
</div>
<div class="menuitem">
<a href="/modules/containers.html">Containers</a>
</div>
<div class="menuitem">
<a href="/modules/esaanttask.html">ESA Ant Task </a>
</div>
<div class="menuitem">
<a href="/modules/ebamavenpluginproject.html">EBA Maven Plugin </a>
</div>
<div class="menuitem">
<a href="/modules/esamavenpluginproject.html">ESA Maven Plugin </a>
</div>
<div class="menuitem">
<a href="/modules/jmx.html">JMX</a>
</div>
<div class="menuitem">
<a href="/modules/jndiproject.html">JNDI</a>
</div>
<div class="menuitem">
<a href="/modules/jpaproject.html">JPA</a>
</div>
<div class="menuitem">
<a href="/modules/transactioncontrol.html">Transaction Control Service</a>
</div>
<div class="menuitem">
<a href="/modules/transactionsproject.html">Transactions</a>
</div>
<div class="menuitem">
<a href="/modules/rsa.html">Remote Service Admin (RSA)</a>
</div>
<div class="menuitem">
<a href="/modules/spi-fly.html">SPI Fly</a>
</div>
<div class="menuitem">
<a href="/modules/subsystems.html">Subsystems</a>
</div>
<div class="menuitem">
<a href="/modules/applications.html">Applications (obsolete)</a>
</div>
</div>
<div onclick="SwitchMenu('downloads')" id="downloadsTitle" class="menutitle">Downloads</div>
<div id="downloads" class="menuitemgroup">
<div class="menuitem">
<a href="/downloads/currentreleases.html">Current Releases</a>
</div>
<div class="menuitem">
<a href="/downloads/testresults.html">Compliance Tests</a>
</div>
<div class="menuitem">
<a href="/downloads/archived-releases.html">Archived Releases</a>
</div>
</div>
<div onclick="SwitchMenu('community')" id="communityTitle" class="menutitle">Community</div>
<div id="community" class="menuitemgroup">
<div class="menuitem">
<a href="/community/resources.html">Community Resources</a>
</div>
<div class="menuitem">
<a href="/community/gettinginvolved.html">Getting Involved</a>
</div>
<div class="menuitem">
<a href="/community/people.html">Who we are</a>
</div>
<div class="menuitem">
<a href="/community/boardreports.html">Board Reports</a>
</div>
<div class="menuitem">
<a href="/community/logos.html">Logos for Users</a>
</div>
</div>
<div onclick="SwitchMenu('development')" id="developmentTitle" class="menutitle">Development</div>
<div id="development" class="menuitemgroup">
<div class="menuitem">
<a href="/development/buildingaries.html">Building Aries </a>
</div>
<div class="menuitem">
<a href="/development/guidelines.html">Cording Guidelines</a>
</div>
<div class="menuitem">
<a href="/development/architecture.html">Architecture</a>
</div>
<div class="menuitem">
<a href="/development/releasingaries.html">Releasing Aries </a>
</div>
<div class="menuitem">
<a href="/development/compliancetesting.html">OSGi Compliance Tests </a>
</div>
<div class="menuitem">
<a href="/development/maintainingthewebpages.html">Web Site Maintenance </a>
</div>
</div>
<div onclick="SwitchMenu('sponsorship')" id="sponsorshipTitle" class="menutitle">Sponsorship</div>
<div id="sponsorship" class="menuitemgroup">
<div class="menuitem">
<a href="http://www.apache.org/foundation/thanks.html">Thanks</a>
</div>
<div class="menuitem">
<a href="http://www.apache.org/foundation/sponsorship.html">Sponsoring Apache</a>
</div>
</div>
<div class="promotion">
<a href="http://www.apache.org/events/current-event.html">
<img src="http://www.apache.org/events/current-event-125x125.png" width="125" height="125"/>
</a>
</div>
<!-- NavigationBar -->
</div>
</div>
</div>
</div>
</td>
<td height="100%" width="100%">
<!-- Content -->
<div class="wiki-content"><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>
<h1 id="release-process-requirements">Release process requirements<a class="headerlink" href="#release-process-requirements" title="Permanent link">&para;</a></h1>
<p>Up to release 0.3 of Aries we released all of the modules at once, along with a set of samples which demonstrated how the Aries components could be used together.</p>
<p>After release 0.3 we wanted to rexamine the release process, the primary motivation for this was the observation that our
current process did not use semantic versioning, and, as an OSGi project we should be demonstrating best OSGi practice.</p>
<p>We started with the following set of requirements for any Aries release: </p>
<table class="confluenceTable">
<tr><th class="confluenceTh"> No. </th><th class="confluenceTh"> Description </th><th class="confluenceTh"> Met currently </th></tr>
<tr><td class="confluenceTd"> 1 </td><td class="confluenceTd"> Follows OSGi semantic versioning</td><td class="confluenceTd"> No </td></tr>
<tr><td class="confluenceTd"> 2 </td><td class="confluenceTd"> Must have a buildable source distribution </td><td class="confluenceTd"> Yes </td></tr>
<tr><td class="confluenceTd"> 3 </td><td class="confluenceTd"> Must have release notes</td><td class="confluenceTd"> Yes </td></tr>
<tr><td class="confluenceTd"> 4 </td><td class="confluenceTd"> Must be publicly announced </td><td class="confluenceTd"> Yes </td></tr>
<tr><td class="confluenceTd"> 5 </td><td class="confluenceTd"> An easy way for users to download the bundles for a given component</td><td class="confluenceTd"> Yes </td></tr>
<tr><td class="confluenceTd"> 6 </td><td class="confluenceTd"> Easy tagging/branching mechanism</td><td class="confluenceTd"> Yes </td></tr>
<tr><td class="confluenceTd"> 7 </td><td class="confluenceTd"> A way to provide bug fixes</td><td class="confluenceTd"> Yes </td></tr>
<tr><td class="confluenceTd"> 8 </td><td class="confluenceTd"> A way to ensure that a given component doesn't have conflicting dependencies </td><td class="confluenceTd"> ? </td></tr>
</table>
<h2 id="release-all-aries-components-at-once">Release all Aries components at once.<a class="headerlink" href="#release-all-aries-components-at-once" title="Permanent link">&para;</a></h2>
<h3 id="advantages-of-releasing-everything-at-once-and-at-the-same-level">Advantages of releasing everything at once and at the same level<a class="headerlink" href="#advantages-of-releasing-everything-at-once-and-at-the-same-level" title="Permanent link">&para;</a></h3>
<ol>
<li>Conceptually very simple of consumers. For example, if as a consumer I pick up something called Blueprint version 0.4 I know that I
will need to get Util version 0.4 to go with it.</li>
<li>A relatively simple release process, one JIRA component, one set of release notes.</li>
<li>We can release a set of samples at the same version with some guarentee that the samples all work with the release.</li>
</ol>
<h3 id="disadvantages-of-releasing-everything-at-once">Disadvantages of releasing everything at once<a class="headerlink" href="#disadvantages-of-releasing-everything-at-once" title="Permanent link">&para;</a></h3>
<ol>
<li>Not using of OSGi semantic versioning of bundles. After every we release we bump the major versions of all bundles in trunk.</li>
</ol>
<p>Package versions are managed separately (correctly) and the Maven bundle plugin will ensure packages are imported in the correct range based of
the projects dependencies. Implementers need to use "provide:=true" to get the correct range. Package export version should be maintained
either using package.info or in the pom.xml.</p>
<h2 id="releasing-by-module">Releasing by module<a class="headerlink" href="#releasing-by-module" title="Permanent link">&para;</a></h2>
<p><p>Our ideal for a release process would involve to release by module, this is
really just an evolution of the process that we already use but it would involve
using semantic versioning of bundles. One might visualise the process like this: </p></p>
<p><img alt="rel" src="release_by_module.png" /></p>
<p>In this case, we have a module version (independent of the version of its sub-modules) and a set of sub-modules which may each be independently versioned.</p>
<h3 id="advantages-of-release-by-module">Advantages of release by module<a class="headerlink" href="#advantages-of-release-by-module" title="Permanent link">&para;</a></h3>
<ol>
<li>Releasing a coherent set of bundles that have been built and run together</li>
<li>Releasing a buildable set of source for all constituent bundles in one zip file</li>
<li>A more consumable unit than a set of single bundles - easier for Aries consumers. A smaller number of discrete downloads.</li>
</ol>
<h3 id="disadvantages-of-the-release-by-module-process">Disadvantages of the release by module process<a class="headerlink" href="#disadvantages-of-the-release-by-module-process" title="Permanent link">&para;</a></h3>
<ol>
<li>We would have to release a whole module at once, this would mean re-releasing bundles at the same level
(and with the same content) as a previous release. This is not a major issue but we would probably not want them in the
www.apache.org/dist/aries directory.</li>
<li>Developer would need to be careful to version submodules poms independently from the parent/reactor pom. Again,
not a major issue but a change from the way we work at the moment.</li>
<li>The Maven release plugin will not cope with having different levels of snapshot in the same release.
Therefore we would either require changes in the Maven release plugin or we would have to stop using it
and maintain our own alternative, to allow us to release by module.</li>
<li>It's not all clear what the strategy for branching would be. For example, consider the following scenario:
<img alt="rel" src="dual_component_module.png" />
<p>In this case a release of the blueprint module at version 1.5 contains bundles blueprint-core at version 1.0.1 and blueprint-cm
at version 1.0.2.</p>
<p>Over a period of time, development in trunk continues and a change is made to blueprint-core which mandates an increase in
the major version. Another release of blueprint (version 1.6) is made containing blueprint-cm at version 1.0i.3 and blueprint-core at version 1.1.0.</p>
<p>Meanwhile a customer finds a problem in blueprint module version 1.5 in the blueprint-cm module. They would like a release of the blueprint module
at version 1.5.1 with blueprint-cm at 1.0.3. Unfortunately this is impossible because we have already released blueprint-cm at 1.0.3
and it works with blueprint-core 1.1.0. So, we have no way to meet the requirement </p></li>
</ol>
<h2 id="releasing-by-bundle">Releasing by bundle<a class="headerlink" href="#releasing-by-bundle" title="Permanent link">&para;</a></h2>
<p>Other OSGi projects, for example Sling and Felix, release by bundle.</p>
<h3 id="advantages-of-releasing-by-bundle">Advantages of releasing by bundle<a class="headerlink" href="#advantages-of-releasing-by-bundle" title="Permanent link">&para;</a></h3>
<ol>
<li>Other projects already do it so there is a well understood model</li>
<li>All the existing tools work</li>
<li>OSGi semantic versioning can be used properly</li>
</ol>
<h3 id="disadvantages-of-releasing-by-bundle">Disadvantages of releasing by bundle<a class="headerlink" href="#disadvantages-of-releasing-by-bundle" title="Permanent link">&para;</a></h3>
<ol>
<li>It is more difficult for a consumer of Aries modules to understand which bundles form a logical grouping</li>
<li>There are a lot of bundles to manage independently. This has implications:<br/><ul>
<li>Releasing - mvn release:prepare, and so on, needs to be run for each bundle separately. However, many bundles could be rolled up into one vote.</li>
<li>Each bundle has to have its own JIRA component</li>
<li>Our svn tree would need to be restructured - probably in a similar way to the Sling tree. Each bundle would have its own trunk &amp; branches.</li>
</ul>
</li>
<li>There are still some issues with branching and it is still possible to get into a situation similar to that described above. </li>
</ol></div>
<!-- Content -->
</td>
</tr>
</table>
</td>
<td id="cell-2-2" colspan="2">&nbsp;</td>
</tr>
<tr width="100%">
<td id="cell-3-0">&nbsp;</td>
<td id="cell-3-1">&nbsp;</td>
<td id="cell-3-2">
<div id="footer">
<!-- Footer -->
<div id="site-footer">
<a href="http://aries.apache.org/privacy-policy.html";>Privacy
Policy</a>
</div>
<!-- Footer -->
</div>
</td>
<td id="cell-3-3">&nbsp;</td>
<td id="cell-3-4">&nbsp;</td>
</tr>
<tr width="100%">
<td id="cell-4-0" colspan="2">&nbsp;</td>
<td id="cell-4-1">&nbsp;</td>
<td id="cell-4-2" colspan="2">&nbsp;</td>
</tr>
</table>
</body>
</html>