<!-- 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>
    <title>Release Notes - Tamaya - Version 0.3-incubating</title>
</head>
<body>

<h1>Release Notes - Tamaya - Version 0.3-incubating</h1>

<h2>        Sub-task
</h2>
<ul>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-119'>TAMAYA-119</a>] -         Add a link to the Jenkins
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-176'>TAMAYA-176</a>] -         Update the documentation to reflect the split of the project
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-183'>TAMAYA-183</a>] -         Insert binary jbake to allow independent site creation
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-186'>TAMAYA-186</a>] -         Migrate existing pages from mvn-site
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-187'>TAMAYA-187</a>] -         Add README.md to document how site is working
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-203'>TAMAYA-203</a>] -         Re-add the examples to the core project
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-204'>TAMAYA-204</a>] -         Integrate baking process into Jenkins
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-209'>TAMAYA-209</a>] -         Remove old docs from Tamaya-core repository
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-220'>TAMAYA-220</a>] -         Bug: unable to inject custom variable in Thymeleaf and markdown templates
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-221'>TAMAYA-221</a>] -         Check for broken links
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-230'>TAMAYA-230</a>] -         Website
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-242'>TAMAYA-242</a>] -         Link to twitter account in page footer
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-254'>TAMAYA-254</a>] -         Clarify PropertyValue API
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-255'>TAMAYA-255</a>] -         Show build status on webpage
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-266'>TAMAYA-266</a>] -         Don&#39;t generate source and default jar for the distribution module of the extensions
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-267'>TAMAYA-267</a>] -         Don&#39;t generate source and default jar for the distribution module of the core
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-268'>TAMAYA-268</a>] -         Update Maven Assembly Plugin of Core to 3.0.0
    </li>
</ul>

<h2>        Bug
</h2>
<ul>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-76'>TAMAYA-76</a>] -         Quickstart - wrong pom.xml
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-158'>TAMAYA-158</a>] -         Model extension does not use common meta-data format.
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-159'>TAMAYA-159</a>] -         URLResolver does not return null on non resolveable URL
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-161'>TAMAYA-161</a>] -         Error on homepage
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-162'>TAMAYA-162</a>] -         Site build shows problems with ASCIIdoc during javadoc generation
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-172'>TAMAYA-172</a>] -         Fix findbugs warning about wrong comparison via equals in PropertySourceChangeBuilder
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-181'>TAMAYA-181</a>] -         Warning-&quot;Flood&quot; from SimplePropertySource
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-191'>TAMAYA-191</a>] -         If no services are defined, the Default ServiceContext thrown an error.
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-197'>TAMAYA-197</a>] -         DefaultConfigurationInjector does not inject into superclasses&#39; fields
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-198'>TAMAYA-198</a>] -         tamaya-formats blindly tries (and failes) to parse a config file with multiple formats
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-199'>TAMAYA-199</a>] -         DefaultServiceContext.getServices does not return the services as sorted list
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-205'>TAMAYA-205</a>] -         Build warnings about duplicate versions for mockito
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-207'>TAMAYA-207</a>] -         Infinite recursive loop in ConfigurationFormats#readConfigurationData
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-213'>TAMAYA-213</a>] -         Implement equals/hashCode on converters.
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-227'>TAMAYA-227</a>] -         The default config change observer can&#39;t be disabled
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-232'>TAMAYA-232</a>] -         Implementation of ConfigurationChange is not consistent
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-235'>TAMAYA-235</a>] -         The get method of the MappedConfiguration class may throw a NullPointerException
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-238'>TAMAYA-238</a>] -         Ensure services are not cached in singletons
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-257'>TAMAYA-257</a>] -         Core API does not enforce the documented not null requirements
    </li>
</ul>

<h2>        Improvement
</h2>
<ul>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-146'>TAMAYA-146</a>] -         Implement getName() in SPI Support&#39;s BasePropertySource.
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-148'>TAMAYA-148</a>] -         Review &amp; Verify OSGi Support in Tamaya
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-149'>TAMAYA-149</a>] -         Remove dependency on DropWizard in favour of Tomcat Embedded
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-151'>TAMAYA-151</a>] -         Remove dependency on Jersey
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-160'>TAMAYA-160</a>] -         Add possibility to configure non annotated classes/interfaces
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-166'>TAMAYA-166</a>] -         Support also XML based property files
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-167'>TAMAYA-167</a>] -         Reduce Log Level if a class is not configurable
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-171'>TAMAYA-171</a>] -         Simplify API for mutability
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-182'>TAMAYA-182</a>] -         Provide a unified builder API
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-188'>TAMAYA-188</a>] -         Add converters for File and Path.
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-189'>TAMAYA-189</a>] -         Organize injection and formats as modules in the source tree
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-190'>TAMAYA-190</a>] -         Minimize the events module
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-192'>TAMAYA-192</a>] -         Simplify/clarify the formats handling and mapping of properties
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-193'>TAMAYA-193</a>] -         Move InjectionUtils and BaseDynamicValue into spi package
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-194'>TAMAYA-194</a>] -         Factor out a LazyRefreshablePropertySource from the existing code in MutableConfig
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-201'>TAMAYA-201</a>] -         Add documentation on raising PRs
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-202'>TAMAYA-202</a>] -         Use bnd-maven-plugin. Minimize required config
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-210'>TAMAYA-210</a>] -         Improve resource loading in OSGI
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-211'>TAMAYA-211</a>] -         Add the possibility to force a new service instance on each request.
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-212'>TAMAYA-212</a>] -         Make predefined comparators singletons.
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-214'>TAMAYA-214</a>] -         Render JavaConfigurationPropertySourceProvider into PropertySource for OSGI support
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-236'>TAMAYA-236</a>] -         Reconsider PropertySource ordering and getOrdinal()
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-237'>TAMAYA-237</a>] -         Update to jbake 2.5.1
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-239'>TAMAYA-239</a>] -         Improve programmatic API for consul and etcd property sources
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-240'>TAMAYA-240</a>] -         ConfigFormat. readXX should throw IOException instead of ConfigException
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-251'>TAMAYA-251</a>] -         Remove integration sub-packages from modules
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-252'>TAMAYA-252</a>] -         Use PropertyValue also as SPI for listing of properties in a PropertySource
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-253'>TAMAYA-253</a>] -         Make raw evaluation of policy pluggable.
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-258'>TAMAYA-258</a>] -         Integrate Pitest in Tamaya Core and the Extensions
    </li>
</ul>

<h2>        New Feature
</h2>
<ul>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-156'>TAMAYA-156</a>] -         Add Statistics Function about Configuration Usage
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-157'>TAMAYA-157</a>] -         Add support for adding of main argument parameters as configuration
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-178'>TAMAYA-178</a>] -         Create new homepage skeleton based on jBake
    </li>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-256'>TAMAYA-256</a>] -         Add Vertx support
    </li>
</ul>

<h2>        Task
</h2>
<ul>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-270'>TAMAYA-270</a>] -         Drop the binary distrubution for core and extensions
    </li>
</ul>

<h2>        Test
</h2>
<ul>
    <li>[<a href='https://issues.apache.org/jira/browse/TAMAYA-259'>TAMAYA-259</a>] -         Add tests to feature module.
    </li>
</ul>
</body></html>