http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/637aaff6/documentation/extensions/mod_features.html ---------------------------------------------------------------------- diff --git a/documentation/extensions/mod_features.html b/documentation/extensions/mod_features.html new file mode 100644 index 0000000..13adfec --- /dev/null +++ b/documentation/extensions/mod_features.html @@ -0,0 +1,301 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <meta charset="utf-8"/> + <title>Apache Tamaya&#8201;&#8212;&#8201;Extension: Features Check</title> + <meta name="viewport" content="width=device-width, initial-scale=1.0"/> + <meta name="description" content=""/> + <meta name="author" content=""/> + <meta name="keywords" content=""/> + <meta name="generator" content="'JBake '+'${version}"/> + + <!-- Le styles --> + <link href="../../css/bootstrap.min.css" rel="stylesheet"/> + <link href="../../css/asciidoctor.css" rel="stylesheet"/> + <link href="../../css/base.css" rel="stylesheet"/> + <link href="../../css/prettify.css" rel="stylesheet"/> + + <!-- HTML5 shim, for IE6-8 support of HTML5 elements --> + <!--[if lt IE 9]> + <script src="../../js/html5shiv.min.js"></script> + <![endif]--> + + <!-- Fav and touch icons from ASF --> + <link rel="shortcut icon" href="../../favicon.ico"/> + <link rel="apple-touch-icon" sizes="57x57" href="../../favicons/apple-touch-icon-57x57.png"/> + <link rel="apple-touch-icon" sizes="60x60" href="../../favicons/apple-touch-icon-60x60.png"/> + <link rel="apple-touch-icon" sizes="72x72" href="../../favicons/apple-touch-icon-72x72.png"/> + <link rel="apple-touch-icon" sizes="76x76" href="../../favicons/apple-touch-icon-76x76.png"/> + <link rel="apple-touch-icon" sizes="114x114" href="../../favicons/apple-touch-icon-114x114.png"/> + <link rel="apple-touch-icon" sizes="120x120" href="../../favicons/apple-touch-icon-120x120.png"/> + <link rel="apple-touch-icon" sizes="144x144" href="../../favicons/apple-touch-icon-144x144.png"/> + <link rel="apple-touch-icon" sizes="152x152" href="../../favicons/apple-touch-icon-152x152.png"/> + <link rel="apple-touch-icon" sizes="180x180" href="../../favicons/apple-touch-icon-180x180.png"/> + <link rel="icon" type="image/png" href="../../favicons/favicon-32x32.png" sizes="32x32"/> + <link rel="icon" type="image/png" href="../../favicons/favicon-194x194.png" sizes="194x194"/> + <link rel="icon" type="image/png" href="../../favicons/favicon-96x96.png" sizes="96x96"/> + <link rel="icon" type="image/png" href="../../favicons/android-chrome-192x192.png" sizes="192x192"/> + <link rel="icon" type="image/png" href="../../favicons/favicon-16x16.png" sizes="16x16"/> + <link rel="manifest" href="../../favicons/manifest.json"/> + <link rel="shortcut icon" href="../../favicons/favicon.ico"/> + <meta name="msapplication-TileColor" content="#603cba"/> + <meta name="msapplication-TileImage" content="../../favicons/mstile-144x144.png"/> + <meta name="msapplication-config" content="../../favicons/browserconfig.xml"/> + <meta name="theme-color" content="#303284"/> + </head> + <body onload="prettyPrint()"> + <div id="wrap"> + <div> + + <!-- Fixed navbar --> + <div class="navbar navbar-default navbar-fixed-top" role="navigation"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../../index.html">Apache Tamaya (incubating)</a> + </div> + <div class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + <li><a href="../../start.html">Tamaya in 5 minutes</a></li> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown">Documentation <b class="caret"></b></a> + <ul class="dropdown-menu"> + <li><a href="../../documentation/usecases.html">Use Cases and Requirements</a></li> + <li><a href="../../documentation/quickstart.html">Quickstart</a></li> + <li><a href="../../documentation/api.html">API</a></li> + <li><a href="../../documentation/core.html">Core</a></li> + <li><a href="../../documentation/extensions.html">Extension Guide</a></li> + <li class="divider"></li> + <li><a href="../../apidocs/index.html">Javadoc 0.3-incubating-SNAPSHOT (external)</a></li> + </ul> + </li> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown">Development <b class="caret"></b></a> + <ul class="dropdown-menu"> + <li><a href="../../development/source.html">Sources</a></li> + <li><a href="../../development/community.html">Community</a></li> + <li><a href="../../development/team.html">Project Team</a></li> + <li><a target="_blank" href="https://builds.apache.org/view/S-Z/view/Tamaya/">CI / ASF Jenkins</a></li> + <li><a target="_blank" href="https://issues.apache.org/jira/browse/TAMAYA">Issues / ASF Jira</a></li> + <li><a href="../../devguide.html">Development Guide</a></li> + <li><a href="../../release-guide.html">Release Guide</a></li> + <li class="divider"></li> + <li><a href="../../development/possible-contributions.html">Possible Contributions</a></li> + </ul> + </li> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown">Releases <b class="caret"></b></a> + <ul class="dropdown-menu"> + <li><a href="../../download.html">Download</a></li> + <li><a href="../../history.html">Release History</a></li> + </ul> + </li> +<!-- Example: + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li class="dropdown-header">Nav header</li> + <li><a href="#">Separated link</a></li> + <li><a href="#">One more separated link</a></li> + </ul> + </li> +--> + <li><a href="../../sitemap.xml">Sitemap</a></li> + <li><a href="../../feed.xml">Subscribe</a></li> + </ul> + </div><!--/.nav-collapse --> + </div> + </div> + + </div> + <div class="container"> + + <div class="page-header"> + <h1>Apache Tamaya&#8201;&#8212;&#8201;Extension: Features Check</h1> + </div> + + <p><em>2017-03-07</em></p> + + <p><div id="preamble"> +<div class="sectionbody"> +<!-- toc disabled --> +</div> +</div> +<div class="sect1"> +<h2 id="Features">Tamaya Features Check (Extension Module)</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>Tamaya <em>Features</em> is an extension module. Refer to the <a href="../extensions.html">extensions documentation</a> for further details.</p> +</div> +<div class="sect2"> +<h3 id="_what_functionality_this_module_provides">What functionality this module provides ?</h3> +<div class="paragraph"> +<p>Tamaya <em>Features</em> provides a simple Features singleton that allows to check +which Tamaya Extensions are currently on the classpath.</p> +</div> +</div> +<div class="sect2"> +<h3 id="_compatibility">Compatibility</h3> +<div class="paragraph"> +<p>The module is based on Java 7, so it will not run on Java 7 and beyond.</p> +</div> +</div> +<div class="sect2"> +<h3 id="_installation">Installation</h3> +<div class="paragraph"> +<p>To use Tamaya <em>Features</em> you only must add the corresponding dependency to +your module:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="prettyprint highlight"><code class="language-xml" data-lang="xml"><dependency> + <groupId>org.apache.tamaya.ext</groupId> + <artifactId>tamaya-features</artifactId> + <version>{tamaya_version}</version> +</dependency></code></pre> +</div> +</div> +</div> +<div class="sect2"> +<h3 id="_the_functionality_provided">The Functionality Provided</h3> +<div class="paragraph"> +<p>Main artifact is the Features singleton, which provides various static methods +to check, which Tamaya extensions are currently loaded.</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="prettyprint highlight"><code class="language-java" data-lang="java">public final class Features { + + private Features(){} + + public static boolean eventsAvailable(); + public static boolean formatsAvailable(); + public static boolean tamayaCoreAvailable(); + public static boolean injectionAvailable(); + public static boolean injectionCDIAvailable(); + public static boolean mutableConfigAvailable(); + public static boolean optionalAvailable(); + public static boolean resolverAvailable(); + public static boolean resourcesAvailable(); + public static boolean spiSupportAvailable(); + public static boolean filterSupportAvailable(); + public static boolean springAvailable(); + public static boolean jndiAvailable(); + + public static boolean extSpringCoreAvailable(); + public static boolean extJndiAvailable(); + public static boolean extOSGIAvailable(); + + public static boolean checkClassIsLoadable(String classname); +}</code></pre> +</div> +</div> +<div class="ulist"> +<ul> +<li> +<p>eventsAvailable(); checks for the <a href="mod_events.html"><em>tamaya_events</em></a> module.</p> +</li> +<li> +<p>formatsAvailable(); checks for the <a href="mod_formats.html"><em>tamaya_formats</em></a> module.</p> +</li> +<li> +<p>tamayaCoreAvailable(); checks if the <a href="core.html"><em>Tamaya core</em></a> implementation is loaded.</p> +</li> +<li> +<p>injectionAvailable(); checks for the <a href="mod_injection.html"><em>tamaya_injection</em></a> SE module.</p> +</li> +<li> +<p>injectionCDIAvailable(); checks for the <a href="mod_cdi.html"><em>tamaya CDI</em></a> modules.</p> +</li> +<li> +<p>mutableConfigAvailable(); checks for the <a href="mod_mutableconfig.html"><em>tamaya_mutableconfig</em></a> module.</p> +</li> +<li> +<p>optionalAvailable(); checks for the <a href="mod_optional.html"><em>tamaya_optional</em></a> module.</p> +</li> +<li> +<p>resolverAvailable(); checks for the <a href="mod_resolver.html"><em>tamaya_resolver</em></a> module.</p> +</li> +<li> +<p>resourcesAvailable(); checks for the <a href="mod_reources.html"><em>tamaya_resources</em></a> module.</p> +</li> +<li> +<p>spiSupportAvailable(); checks for the <a href="mod_spisupport.html"><em>tamaya_spisupport</em></a> module.</p> +</li> +<li> +<p>filterSupportAvailable(); checks for the <a href="mod_filter.html"><em>tamaya_filter</em></a> module.</p> +</li> +<li> +<p>springAvailable(); checks for the <a href="mod_spring.html"><em>tamaya_spring</em></a> module.</p> +</li> +<li> +<p>jndiAvailable(); checks for the <a href="mod_jndi.html"><em>tamaya_jndi</em></a> module.</p> +</li> +<li> +<p>extJndiAvailable(); checks if creation of a new <code>InitialContext</code> is successful.</p> +</li> +<li> +<p>extSpringCoreAvailable(); checks if Spring Core is on the classpath.</p> +</li> +<li> +<p>extOSGIAvailable(); checks the OSGI framework is on the classpath.</p> +</li> +<li> +<p>Finally checkClassIsLoaded(String) tries to load a class. If it fails, <code>false</code> is returned.</p> +</li> +</ul> +</div> +</div> +</div> +</div></p> + + <hr /> + </div> + </div> + <div> + <div id="push"></div> + + <div id="footer"> + <div class="container"> + <p class="muted credit">© 2014-<span>2017</span> Apache Software Foundation | Mixed with <a href="http://getbootstrap.com/">Bootstrap v3.1.1</a> + | Baked with <a href="http://jbake.org">JBake <span>v2.5.1</span></a> + at <span>2017-03-07</span> | + <a href="https://twitter.com/tamayaconf" class="twitter-follow-button" data-show-count="false">Follow @TamayaConf</a><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script> + </p> + <p> + <b>Disclaimer</b> + Apache Tamaya (incubating) is an effort undergoing + incubation at + The Apache Software Foundation (ASF), sponsored by + the name of Apache Incubator. Incubation is required of + all newly accepted projects until a further review indicates + that the infrastructure, communications, and decision making + process have stabilized in a manner consistent with other + successful ASF projects. While incubation status is not + necessarily a reflection of the completeness or stability of + the code, it does indicate that the project has yet to + be fully endorsed by the ASF.<br /> + <a href="http://incubator.apache.org/guides/website.html" style="border:0px;" target="_target"><img class="incubator-logo" src="../../logos/egg-logo2.png"/></a> + </p> + </div> + </div> + + <!-- Le javascript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script src="../../js/jquery-1.11.1.min.js"></script> + <script src="../../js/bootstrap.min.js"></script> + <script src="../../js/prettify.js"></script> + </div> + </body> +</html>
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/637aaff6/documentation/extensions/mod_filter.html ---------------------------------------------------------------------- diff --git a/documentation/extensions/mod_filter.html b/documentation/extensions/mod_filter.html index 185aac4..3457f02 100644 --- a/documentation/extensions/mod_filter.html +++ b/documentation/extensions/mod_filter.html @@ -277,7 +277,7 @@ managed filters:</p> <div class="container"> <p class="muted credit">© 2014-<span>2017</span> Apache Software Foundation | Mixed with <a href="http://getbootstrap.com/">Bootstrap v3.1.1</a> | Baked with <a href="http://jbake.org">JBake <span>v2.5.1</span></a> - at <span>2017-02-24</span> | + at <span>2017-03-07</span> | <a href="https://twitter.com/tamayaconf" class="twitter-follow-button" data-show-count="false">Follow @TamayaConf</a><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script> </p> <p> http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/637aaff6/documentation/extensions/mod_formats.html ---------------------------------------------------------------------- diff --git a/documentation/extensions/mod_formats.html b/documentation/extensions/mod_formats.html index 9b91fd5..7754620 100644 --- a/documentation/extensions/mod_formats.html +++ b/documentation/extensions/mod_formats.html @@ -559,7 +559,7 @@ functionality provided with java.util.Properties:</p> <div class="container"> <p class="muted credit">© 2014-<span>2017</span> Apache Software Foundation | Mixed with <a href="http://getbootstrap.com/">Bootstrap v3.1.1</a> | Baked with <a href="http://jbake.org">JBake <span>v2.5.1</span></a> - at <span>2017-02-24</span> | + at <span>2017-03-07</span> | <a href="https://twitter.com/tamayaconf" class="twitter-follow-button" data-show-count="false">Follow @TamayaConf</a><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script> </p> <p> http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/637aaff6/documentation/extensions/mod_functions.html ---------------------------------------------------------------------- diff --git a/documentation/extensions/mod_functions.html b/documentation/extensions/mod_functions.html index 2b570ef..88945c5 100644 --- a/documentation/extensions/mod_functions.html +++ b/documentation/extensions/mod_functions.html @@ -310,7 +310,7 @@ in <em>sectionKeys</em> from a given <em>key</em>.</p> <div class="container"> <p class="muted credit">© 2014-<span>2017</span> Apache Software Foundation | Mixed with <a href="http://getbootstrap.com/">Bootstrap v3.1.1</a> | Baked with <a href="http://jbake.org">JBake <span>v2.5.1</span></a> - at <span>2017-02-24</span> | + at <span>2017-03-07</span> | <a href="https://twitter.com/tamayaconf" class="twitter-follow-button" data-show-count="false">Follow @TamayaConf</a><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script> </p> <p> http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/637aaff6/documentation/extensions/mod_hazelcast.html ---------------------------------------------------------------------- diff --git a/documentation/extensions/mod_hazelcast.html b/documentation/extensions/mod_hazelcast.html new file mode 100644 index 0000000..943589d --- /dev/null +++ b/documentation/extensions/mod_hazelcast.html @@ -0,0 +1,303 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <meta charset="utf-8"/> + <title>Apache Tamaya&#8201;&#8212;&#8201;Extension: Integration with Hazelcast</title> + <meta name="viewport" content="width=device-width, initial-scale=1.0"/> + <meta name="description" content=""/> + <meta name="author" content=""/> + <meta name="keywords" content=""/> + <meta name="generator" content="'JBake '+'${version}"/> + + <!-- Le styles --> + <link href="../../css/bootstrap.min.css" rel="stylesheet"/> + <link href="../../css/asciidoctor.css" rel="stylesheet"/> + <link href="../../css/base.css" rel="stylesheet"/> + <link href="../../css/prettify.css" rel="stylesheet"/> + + <!-- HTML5 shim, for IE6-8 support of HTML5 elements --> + <!--[if lt IE 9]> + <script src="../../js/html5shiv.min.js"></script> + <![endif]--> + + <!-- Fav and touch icons from ASF --> + <link rel="shortcut icon" href="../../favicon.ico"/> + <link rel="apple-touch-icon" sizes="57x57" href="../../favicons/apple-touch-icon-57x57.png"/> + <link rel="apple-touch-icon" sizes="60x60" href="../../favicons/apple-touch-icon-60x60.png"/> + <link rel="apple-touch-icon" sizes="72x72" href="../../favicons/apple-touch-icon-72x72.png"/> + <link rel="apple-touch-icon" sizes="76x76" href="../../favicons/apple-touch-icon-76x76.png"/> + <link rel="apple-touch-icon" sizes="114x114" href="../../favicons/apple-touch-icon-114x114.png"/> + <link rel="apple-touch-icon" sizes="120x120" href="../../favicons/apple-touch-icon-120x120.png"/> + <link rel="apple-touch-icon" sizes="144x144" href="../../favicons/apple-touch-icon-144x144.png"/> + <link rel="apple-touch-icon" sizes="152x152" href="../../favicons/apple-touch-icon-152x152.png"/> + <link rel="apple-touch-icon" sizes="180x180" href="../../favicons/apple-touch-icon-180x180.png"/> + <link rel="icon" type="image/png" href="../../favicons/favicon-32x32.png" sizes="32x32"/> + <link rel="icon" type="image/png" href="../../favicons/favicon-194x194.png" sizes="194x194"/> + <link rel="icon" type="image/png" href="../../favicons/favicon-96x96.png" sizes="96x96"/> + <link rel="icon" type="image/png" href="../../favicons/android-chrome-192x192.png" sizes="192x192"/> + <link rel="icon" type="image/png" href="../../favicons/favicon-16x16.png" sizes="16x16"/> + <link rel="manifest" href="../../favicons/manifest.json"/> + <link rel="shortcut icon" href="../../favicons/favicon.ico"/> + <meta name="msapplication-TileColor" content="#603cba"/> + <meta name="msapplication-TileImage" content="../../favicons/mstile-144x144.png"/> + <meta name="msapplication-config" content="../../favicons/browserconfig.xml"/> + <meta name="theme-color" content="#303284"/> + </head> + <body onload="prettyPrint()"> + <div id="wrap"> + <div> + + <!-- Fixed navbar --> + <div class="navbar navbar-default navbar-fixed-top" role="navigation"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../../index.html">Apache Tamaya (incubating)</a> + </div> + <div class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + <li><a href="../../start.html">Tamaya in 5 minutes</a></li> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown">Documentation <b class="caret"></b></a> + <ul class="dropdown-menu"> + <li><a href="../../documentation/usecases.html">Use Cases and Requirements</a></li> + <li><a href="../../documentation/quickstart.html">Quickstart</a></li> + <li><a href="../../documentation/api.html">API</a></li> + <li><a href="../../documentation/core.html">Core</a></li> + <li><a href="../../documentation/extensions.html">Extension Guide</a></li> + <li class="divider"></li> + <li><a href="../../apidocs/index.html">Javadoc 0.3-incubating-SNAPSHOT (external)</a></li> + </ul> + </li> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown">Development <b class="caret"></b></a> + <ul class="dropdown-menu"> + <li><a href="../../development/source.html">Sources</a></li> + <li><a href="../../development/community.html">Community</a></li> + <li><a href="../../development/team.html">Project Team</a></li> + <li><a target="_blank" href="https://builds.apache.org/view/S-Z/view/Tamaya/">CI / ASF Jenkins</a></li> + <li><a target="_blank" href="https://issues.apache.org/jira/browse/TAMAYA">Issues / ASF Jira</a></li> + <li><a href="../../devguide.html">Development Guide</a></li> + <li><a href="../../release-guide.html">Release Guide</a></li> + <li class="divider"></li> + <li><a href="../../development/possible-contributions.html">Possible Contributions</a></li> + </ul> + </li> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown">Releases <b class="caret"></b></a> + <ul class="dropdown-menu"> + <li><a href="../../download.html">Download</a></li> + <li><a href="../../history.html">Release History</a></li> + </ul> + </li> +<!-- Example: + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li class="dropdown-header">Nav header</li> + <li><a href="#">Separated link</a></li> + <li><a href="#">One more separated link</a></li> + </ul> + </li> +--> + <li><a href="../../sitemap.xml">Sitemap</a></li> + <li><a href="../../feed.xml">Subscribe</a></li> + </ul> + </div><!--/.nav-collapse --> + </div> + </div> + + </div> + <div class="container"> + + <div class="page-header"> + <h1>Apache Tamaya&#8201;&#8212;&#8201;Extension: Integration with Hazelcast</h1> + </div> + + <p><em>2017-03-07</em></p> + + <p><div id="preamble"> +<div class="sectionbody"> +<!-- toc disabled --> +</div> +</div> +<div class="sect1"> +<h2 id="Consul">Integration with Hazelcast (Extension Module)</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>Tamaya <em>Hazelcast</em> is an extension module. Refer to the <a href="../extensions.html">extensions documentation</a> for further details.</p> +</div> +<div class="sect2"> +<h3 id="_what_functionality_this_module_provides">What functionality this module provides ?</h3> +<div class="paragraph"> +<p>Tamaya <em>Hazelcast</em> provides a property source which uses +<a href="http://www.hazelcast.org">Hazelcast</a> as configuration backend. Hereby the +module supports read-only integration (as a HazelcastPropertySource as well +as a writing configuration changes back (based on Tamaya’s MutableConfiguration API +defined by the <a href="mod_mutable_config.html">tamaya-mutable-config</a> extension module.</p> +</div> +</div> +<div class="sect2"> +<h3 id="_compatibility">Compatibility</h3> +<div class="paragraph"> +<p>The module is based on Java 7, so it will not run on Java 7 and beyond.</p> +</div> +</div> +<div class="sect2"> +<h3 id="_installation">Installation</h3> +<div class="paragraph"> +<p>To use <em>tamaya-hazelcast</em> you only must add the corresponding dependency to your module:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="prettyprint highlight"><code class="language-xml" data-lang="xml"><dependency> + <groupId>org.apache.tamaya.ext</groupId> + <artifactId>tamaya-hazelcast</artifactId> + <version>{tamaya_version}</version> +</dependency></code></pre> +</div> +</div> +</div> +<div class="sect2"> +<h3 id="_the_extensions_provided">The Extensions Provided</h3> +<div class="paragraph"> +<p>Hazelcast integration comes basically with 2 artifacts:</p> +</div> +<div class="ulist"> +<ul> +<li> +<p>The org.apache.tamaya.hazelcast.HazelcastPropertySource is a PropertySource. The property source is not automatically +registered. Either register it using the <em>ServiceLoader</em> yourself or implement +and register a corresponding <code>PropertySourceProvider</code>.</p> +</li> +<li> +<p>If the tamaya-mutable-config module is loaded it is possible to write property values back into the consul cluster, +by accessing a MutableConfiguration using the URI config:hazelcast.</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>Access of consul key/value pairs is through the normal Tamaya API.</p> +</div> +</div> +<div class="sect2"> +<h3 id="_the_hazelcastpropertysource">The HazelcastPropertySource</h3> +<div class="paragraph"> +<p>The HazelcastPropertySource is not automatically registered and provides different options how to integrate +Tamaya with Hazelcast.</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="prettyprint highlight"><code class="language-java" data-lang="java">/** + * Creates a new instance, hereby using {@code "Hazelcast"} as property source name and + * a default hazelcast backend created by calling {@link Hazelcast#newHazelcastInstance()}. + */ +public HazelcastPropertySource(); + +/** + * Creates a new instance, hereby using {@code "Hazelcast"} as property source name and the + * given hazelcast instance. + * @param hazelcastInstance the hazelcast instance, not null. + */ +public HazelcastPropertySource(HazelcastInstance hazelcastInstance); + +/** + * Creates a new instance, hereby using the given property source name and + * a default hazelcast backend created by calling {@link Hazelcast#newHazelcastInstance()}. + * @param name the property source name, not null. + */ +public HazelcastPropertySource(String name); + +/** + * Creates a new instance, hereby using the given property source name and + * a creating a new hazelcast backend using the given Hazelcast {@link Config}. + * @param config the hazelcast config, not null. + * @param name the property source name, not null. + */ +public HazelcastPropertySource(String name, Config config); + +/** + * Creates a new instance, hereby using the given property source name and the + * hazelcast instance. + * @param name + * @param hazelcastInstance + */ +public HazelcastPropertySource(String name, HazelcastInstance hazelcastInstance);</code></pre> +</div> +</div> +<div class="paragraph"> +<p>To use hazelcast as a configuration backend, you simply create the corresponding Hazelcast instance +and use it to initialize the Tamaya property source. Given that a hazelcast backedn configuration +can be easily created asillustrated below:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="prettyprint highlight"><code class="language-java" data-lang="java">Config hazelcastConfig = new Config(); +// define config settings +HazelcastInstance hazelcastInstance = Hazelcast.newInstance(hazelcastConfig); +HazelcastPropertySource ps = new HazelcastPropertySource(hazelcastInstance); +ps.setName("myHazelcast-config"); +ps.setOrdinal(2000); +// Build your own configuration context +ConfigurationContextBuilder b = ConfigurationProvider.createNewConfigurationContextBuilder(); +b.addDefaultPropertyConverters().addDefaultPropertyFilter().addDefaultPropertySources(); +// Add the hazelcast property source (as most significant) +b.addPropertySource(ps); +// build and use the configuration +Configuration config = b.build();</code></pre> +</div> +</div> +</div> +</div> +</div></p> + + <hr /> + </div> + </div> + <div> + <div id="push"></div> + + <div id="footer"> + <div class="container"> + <p class="muted credit">© 2014-<span>2017</span> Apache Software Foundation | Mixed with <a href="http://getbootstrap.com/">Bootstrap v3.1.1</a> + | Baked with <a href="http://jbake.org">JBake <span>v2.5.1</span></a> + at <span>2017-03-07</span> | + <a href="https://twitter.com/tamayaconf" class="twitter-follow-button" data-show-count="false">Follow @TamayaConf</a><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script> + </p> + <p> + <b>Disclaimer</b> + Apache Tamaya (incubating) is an effort undergoing + incubation at + The Apache Software Foundation (ASF), sponsored by + the name of Apache Incubator. Incubation is required of + all newly accepted projects until a further review indicates + that the infrastructure, communications, and decision making + process have stabilized in a manner consistent with other + successful ASF projects. While incubation status is not + necessarily a reflection of the completeness or stability of + the code, it does indicate that the project has yet to + be fully endorsed by the ASF.<br /> + <a href="http://incubator.apache.org/guides/website.html" style="border:0px;" target="_target"><img class="incubator-logo" src="../../logos/egg-logo2.png"/></a> + </p> + </div> + </div> + + <!-- Le javascript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script src="../../js/jquery-1.11.1.min.js"></script> + <script src="../../js/bootstrap.min.js"></script> + <script src="../../js/prettify.js"></script> + </div> + </body> +</html> http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/637aaff6/documentation/extensions/mod_injection.html ---------------------------------------------------------------------- diff --git a/documentation/extensions/mod_injection.html b/documentation/extensions/mod_injection.html index fb70d43..406b809 100644 --- a/documentation/extensions/mod_injection.html +++ b/documentation/extensions/mod_injection.html @@ -738,7 +738,7 @@ The event published is very simple: <div class="container"> <p class="muted credit">© 2014-<span>2017</span> Apache Software Foundation | Mixed with <a href="http://getbootstrap.com/">Bootstrap v3.1.1</a> | Baked with <a href="http://jbake.org">JBake <span>v2.5.1</span></a> - at <span>2017-02-24</span> | + at <span>2017-03-07</span> | <a href="https://twitter.com/tamayaconf" class="twitter-follow-button" data-show-count="false">Follow @TamayaConf</a><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script> </p> <p> http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/637aaff6/documentation/extensions/mod_jndi.html ---------------------------------------------------------------------- diff --git a/documentation/extensions/mod_jndi.html b/documentation/extensions/mod_jndi.html new file mode 100644 index 0000000..008bc21 --- /dev/null +++ b/documentation/extensions/mod_jndi.html @@ -0,0 +1,247 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <meta charset="utf-8"/> + <title>Apache Tamaya&#8201;&#8212;&#8201;Extension: Integration with JNDI</title> + <meta name="viewport" content="width=device-width, initial-scale=1.0"/> + <meta name="description" content=""/> + <meta name="author" content=""/> + <meta name="keywords" content=""/> + <meta name="generator" content="'JBake '+'${version}"/> + + <!-- Le styles --> + <link href="../../css/bootstrap.min.css" rel="stylesheet"/> + <link href="../../css/asciidoctor.css" rel="stylesheet"/> + <link href="../../css/base.css" rel="stylesheet"/> + <link href="../../css/prettify.css" rel="stylesheet"/> + + <!-- HTML5 shim, for IE6-8 support of HTML5 elements --> + <!--[if lt IE 9]> + <script src="../../js/html5shiv.min.js"></script> + <![endif]--> + + <!-- Fav and touch icons from ASF --> + <link rel="shortcut icon" href="../../favicon.ico"/> + <link rel="apple-touch-icon" sizes="57x57" href="../../favicons/apple-touch-icon-57x57.png"/> + <link rel="apple-touch-icon" sizes="60x60" href="../../favicons/apple-touch-icon-60x60.png"/> + <link rel="apple-touch-icon" sizes="72x72" href="../../favicons/apple-touch-icon-72x72.png"/> + <link rel="apple-touch-icon" sizes="76x76" href="../../favicons/apple-touch-icon-76x76.png"/> + <link rel="apple-touch-icon" sizes="114x114" href="../../favicons/apple-touch-icon-114x114.png"/> + <link rel="apple-touch-icon" sizes="120x120" href="../../favicons/apple-touch-icon-120x120.png"/> + <link rel="apple-touch-icon" sizes="144x144" href="../../favicons/apple-touch-icon-144x144.png"/> + <link rel="apple-touch-icon" sizes="152x152" href="../../favicons/apple-touch-icon-152x152.png"/> + <link rel="apple-touch-icon" sizes="180x180" href="../../favicons/apple-touch-icon-180x180.png"/> + <link rel="icon" type="image/png" href="../../favicons/favicon-32x32.png" sizes="32x32"/> + <link rel="icon" type="image/png" href="../../favicons/favicon-194x194.png" sizes="194x194"/> + <link rel="icon" type="image/png" href="../../favicons/favicon-96x96.png" sizes="96x96"/> + <link rel="icon" type="image/png" href="../../favicons/android-chrome-192x192.png" sizes="192x192"/> + <link rel="icon" type="image/png" href="../../favicons/favicon-16x16.png" sizes="16x16"/> + <link rel="manifest" href="../../favicons/manifest.json"/> + <link rel="shortcut icon" href="../../favicons/favicon.ico"/> + <meta name="msapplication-TileColor" content="#603cba"/> + <meta name="msapplication-TileImage" content="../../favicons/mstile-144x144.png"/> + <meta name="msapplication-config" content="../../favicons/browserconfig.xml"/> + <meta name="theme-color" content="#303284"/> + </head> + <body onload="prettyPrint()"> + <div id="wrap"> + <div> + + <!-- Fixed navbar --> + <div class="navbar navbar-default navbar-fixed-top" role="navigation"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="../../index.html">Apache Tamaya (incubating)</a> + </div> + <div class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + <li><a href="../../start.html">Tamaya in 5 minutes</a></li> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown">Documentation <b class="caret"></b></a> + <ul class="dropdown-menu"> + <li><a href="../../documentation/usecases.html">Use Cases and Requirements</a></li> + <li><a href="../../documentation/quickstart.html">Quickstart</a></li> + <li><a href="../../documentation/api.html">API</a></li> + <li><a href="../../documentation/core.html">Core</a></li> + <li><a href="../../documentation/extensions.html">Extension Guide</a></li> + <li class="divider"></li> + <li><a href="../../apidocs/index.html">Javadoc 0.3-incubating-SNAPSHOT (external)</a></li> + </ul> + </li> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown">Development <b class="caret"></b></a> + <ul class="dropdown-menu"> + <li><a href="../../development/source.html">Sources</a></li> + <li><a href="../../development/community.html">Community</a></li> + <li><a href="../../development/team.html">Project Team</a></li> + <li><a target="_blank" href="https://builds.apache.org/view/S-Z/view/Tamaya/">CI / ASF Jenkins</a></li> + <li><a target="_blank" href="https://issues.apache.org/jira/browse/TAMAYA">Issues / ASF Jira</a></li> + <li><a href="../../devguide.html">Development Guide</a></li> + <li><a href="../../release-guide.html">Release Guide</a></li> + <li class="divider"></li> + <li><a href="../../development/possible-contributions.html">Possible Contributions</a></li> + </ul> + </li> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown">Releases <b class="caret"></b></a> + <ul class="dropdown-menu"> + <li><a href="../../download.html">Download</a></li> + <li><a href="../../history.html">Release History</a></li> + </ul> + </li> +<!-- Example: + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li class="dropdown-header">Nav header</li> + <li><a href="#">Separated link</a></li> + <li><a href="#">One more separated link</a></li> + </ul> + </li> +--> + <li><a href="../../sitemap.xml">Sitemap</a></li> + <li><a href="../../feed.xml">Subscribe</a></li> + </ul> + </div><!--/.nav-collapse --> + </div> + </div> + + </div> + <div class="container"> + + <div class="page-header"> + <h1>Apache Tamaya&#8201;&#8212;&#8201;Extension: Integration with JNDI</h1> + </div> + + <p><em>2017-03-07</em></p> + + <p><div id="preamble"> +<div class="sectionbody"> +<!-- toc disabled --> +</div> +</div> +<div class="sect1"> +<h2 id="JNDI">Integration with JNDI (Extension Module)</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>Tamaya <em>JNDI</em> is an extension module. Refer to the <a href="../extensions.html">extensions documentation</a> for further details.</p> +</div> +<div class="sect2"> +<h3 id="_what_functionality_this_module_provides">What functionality this module provides ?</h3> +<div class="paragraph"> +<p>Tamaya <em>JNDI</em> provides a simple PropertySource that reads values from a +JNDI context.</p> +</div> +</div> +<div class="sect2"> +<h3 id="_compatibility">Compatibility</h3> +<div class="paragraph"> +<p>The module is based on Java 7, so it will not run on Java 7 and beyond.</p> +</div> +</div> +<div class="sect2"> +<h3 id="_installation">Installation</h3> +<div class="paragraph"> +<p>To use <em>jndi</em> as a configuration backend you only must add the corresponding dependency to +your module:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="prettyprint highlight"><code class="language-xml" data-lang="xml"><dependency> + <groupId>org.apache.tamaya.ext</groupId> + <artifactId>tamaya-jndi</artifactId> + <version>{tamaya_version}</version> +</dependency></code></pre> +</div> +</div> +</div> +<div class="sect2"> +<h3 id="_the_functionality_provided">The Functionality Provided</h3> +<div class="paragraph"> +<p>Main artifact is the JNDIPropertySource class, which implements a +property source based on a JNDI context:</p> +</div> +<div class="listingblock"> +<div class="content"> +<pre class="prettyprint highlight"><code class="language-java" data-lang="java">public class JNDIPropertySource extends BasePropertySource { + + public JNDIPropertySource(String name, Context context); + public JNDIPropertySource(String name) throws NamingException; + public JNDIPropertySource() throws NamingException; + + public void setScannable(boolean scannable); + + [...] +}</code></pre> +</div> +</div> +<div class="paragraph"> +<p>By default the property source is <em>non scannable</em>, so a call the <code>getProperties()</code> +will return an empty map instance. After calling <code>setScannable(true);</code> a call to +<code>getProperties()</code> will return a String representation of the JNDI tree. Hereby +leaves of the tree are converted using <code>String.valueOf(leaveObject)</code>.</p> +</div> +<div class="paragraph"> +<p>This module automatically registers an instance of JNDIPropertySource with a +default ordinal of 200.</p> +</div> +<div class="paragraph"> +<p>You can extend this class or manually instantiate it, e.g. as part of a +PropertySourceProvider. If no <code>Context</code> is passed explicitly, a new +InitialContext is created, without any environment parameters set.</p> +</div> +</div> +</div> +</div></p> + + <hr /> + </div> + </div> + <div> + <div id="push"></div> + + <div id="footer"> + <div class="container"> + <p class="muted credit">© 2014-<span>2017</span> Apache Software Foundation | Mixed with <a href="http://getbootstrap.com/">Bootstrap v3.1.1</a> + | Baked with <a href="http://jbake.org">JBake <span>v2.5.1</span></a> + at <span>2017-03-07</span> | + <a href="https://twitter.com/tamayaconf" class="twitter-follow-button" data-show-count="false">Follow @TamayaConf</a><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script> + </p> + <p> + <b>Disclaimer</b> + Apache Tamaya (incubating) is an effort undergoing + incubation at + The Apache Software Foundation (ASF), sponsored by + the name of Apache Incubator. Incubation is required of + all newly accepted projects until a further review indicates + that the infrastructure, communications, and decision making + process have stabilized in a manner consistent with other + successful ASF projects. While incubation status is not + necessarily a reflection of the completeness or stability of + the code, it does indicate that the project has yet to + be fully endorsed by the ASF.<br /> + <a href="http://incubator.apache.org/guides/website.html" style="border:0px;" target="_target"><img class="incubator-logo" src="../../logos/egg-logo2.png"/></a> + </p> + </div> + </div> + + <!-- Le javascript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script src="../../js/jquery-1.11.1.min.js"></script> + <script src="../../js/bootstrap.min.js"></script> + <script src="../../js/prettify.js"></script> + </div> + </body> +</html> http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/637aaff6/documentation/extensions/mod_jodatime.html ---------------------------------------------------------------------- diff --git a/documentation/extensions/mod_jodatime.html b/documentation/extensions/mod_jodatime.html index 999b6c9..566601a 100644 --- a/documentation/extensions/mod_jodatime.html +++ b/documentation/extensions/mod_jodatime.html @@ -292,7 +292,7 @@ DateTime pit = configuration.get("pointInTime", DateTime.class)</code></pre> <div class="container"> <p class="muted credit">© 2014-<span>2017</span> Apache Software Foundation | Mixed with <a href="http://getbootstrap.com/">Bootstrap v3.1.1</a> | Baked with <a href="http://jbake.org">JBake <span>v2.5.1</span></a> - at <span>2017-02-24</span> | + at <span>2017-03-07</span> | <a href="https://twitter.com/tamayaconf" class="twitter-follow-button" data-show-count="false">Follow @TamayaConf</a><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script> </p> <p> http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/637aaff6/documentation/extensions/mod_json.html ---------------------------------------------------------------------- diff --git a/documentation/extensions/mod_json.html b/documentation/extensions/mod_json.html index 638fc92..7455a95 100644 --- a/documentation/extensions/mod_json.html +++ b/documentation/extensions/mod_json.html @@ -228,7 +228,7 @@ registers the <em>json</em> format automatically using the <code>ServiceContext< <div class="container"> <p class="muted credit">© 2014-<span>2017</span> Apache Software Foundation | Mixed with <a href="http://getbootstrap.com/">Bootstrap v3.1.1</a> | Baked with <a href="http://jbake.org">JBake <span>v2.5.1</span></a> - at <span>2017-02-24</span> | + at <span>2017-03-07</span> | <a href="https://twitter.com/tamayaconf" class="twitter-follow-button" data-show-count="false">Follow @TamayaConf</a><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script> </p> <p> http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/637aaff6/documentation/extensions/mod_management.html ---------------------------------------------------------------------- diff --git a/documentation/extensions/mod_management.html b/documentation/extensions/mod_management.html index 626ed87..807f4db 100644 --- a/documentation/extensions/mod_management.html +++ b/documentation/extensions/mod_management.html @@ -274,7 +274,7 @@ The instance of ManagedConfigMBean to be created and registered is evaluated by <div class="container"> <p class="muted credit">© 2014-<span>2017</span> Apache Software Foundation | Mixed with <a href="http://getbootstrap.com/">Bootstrap v3.1.1</a> | Baked with <a href="http://jbake.org">JBake <span>v2.5.1</span></a> - at <span>2017-02-24</span> | + at <span>2017-03-07</span> | <a href="https://twitter.com/tamayaconf" class="twitter-follow-button" data-show-count="false">Follow @TamayaConf</a><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script> </p> <p> http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/637aaff6/documentation/extensions/mod_metamodel.html ---------------------------------------------------------------------- diff --git a/documentation/extensions/mod_metamodel.html b/documentation/extensions/mod_metamodel.html index 1178333..f0569ef 100644 --- a/documentation/extensions/mod_metamodel.html +++ b/documentation/extensions/mod_metamodel.html @@ -871,7 +871,7 @@ never change later.</p> <div class="container"> <p class="muted credit">© 2014-<span>2017</span> Apache Software Foundation | Mixed with <a href="http://getbootstrap.com/">Bootstrap v3.1.1</a> | Baked with <a href="http://jbake.org">JBake <span>v2.5.1</span></a> - at <span>2017-02-24</span> | + at <span>2017-03-07</span> | <a href="https://twitter.com/tamayaconf" class="twitter-follow-button" data-show-count="false">Follow @TamayaConf</a><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script> </p> <p> http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/637aaff6/documentation/extensions/mod_mutable_config.html ---------------------------------------------------------------------- diff --git a/documentation/extensions/mod_mutable_config.html b/documentation/extensions/mod_mutable_config.html index 1db90fc..a72ea09 100644 --- a/documentation/extensions/mod_mutable_config.html +++ b/documentation/extensions/mod_mutable_config.html @@ -124,7 +124,7 @@ <h1>Apache Tamaya&#8201;&#8212;&#8201;Extension: Mutable Configuration</h1> </div> - <p><em>2017-02-24</em></p> + <p><em>2017-03-07</em></p> <p><div id="preamble"> <div class="sectionbody"> @@ -141,7 +141,7 @@ <h3 id="_what_functionality_this_module_provides">What functionality this module provides ?</h3> <div class="paragraph"> <p>Tamaya Configuration by default is read-only, which covers must of the use cases. But there are many legit scenarios -where configuration should be written back to some backend systems or the local file system. This module adds this +where configuration should be written back to backend systems or the local file system. This module adds this functionality.</p> </div> </div> @@ -173,14 +173,15 @@ functionality.</p> <div class="paragraph"> <p>The core of the module is the MutableConfigurationProvider singleton, which provides access to MutableConfiguration instance, which extends Configuration. This interface adds additional methods to add/update or remove property values. -Hereby changes applied are managed in a transaction like context, called ConfigChangeContext. Each context defines +Hereby each MutableConfiguration manages a transaction like context, which includes a UUID that identifes a change. -Backends for writing changes applied are of type MutablePropertySource, similarly extending the PropertySource -SPI with methods for writing changes back. Registrations and ordering policies are like with ordinary property sources, -with one important difference. Mutable property source can be targeted by write operations.</p> +Backends for writing changes applied umst implement MutablePropertySource, which extends PropertySource. +Registrations and ordering policies are exact the same as with ordinary property sources, but +mutable property sources can be targeted by config write operations.</p> </div> <div class="paragraph"> -<p>The example below shows how a MutableConfiguration can be obtained the simplest way:</p> +<p>The example below shows how a MutableConfiguration can be obtained ,values added, removed and +finally changes written back to the backend:</p> </div> <div class="listingblock"> <div class="title">Accessing and changing configuration</div> @@ -194,7 +195,7 @@ config.put("newKey", "newValue") </div> </div> <div class="paragraph"> -<p>In the above scenario we use the overall system’s configuration as the backend to be used. +<p>In the above scenario we use the system’s <em>default</em> configuration as the backend to be used. We can also pass any Configuration to render it into a mutable instance, e.g.</p> </div> <div class="listingblock"> @@ -213,14 +214,15 @@ MutableConfiguration config = MutableConfigurationProvider </td> <td class="content"> If a configuration does not contain any MutablePropertySource instances, - a MutableConfiguration built from it will not be able to accept any changes. + a ConfigurationException is thrown since it would not be able to accept + any changes. </td> </tr> </table> </div> <div class="paragraph"> -<p>Following you see the options how to create a MutableConfiguration using the -MutableConfigurationProvider singleton:</p> +<p>Following we show the possible methods you can use to create a MutableConfiguration. +We will show in the following sections more details on the options provided…​</p> </div> <div class="listingblock"> <div class="content"> @@ -241,7 +243,7 @@ MutableConfigurationProvider singleton:</p> </div> </div> <div class="paragraph"> -<p>Hereby MutableConfiguration is defined as follows:</p> +<p>As we have not yet shown it, MutableConfiguration is defined as follows:</p> </div> <div class="listingblock"> <div class="content"> @@ -260,21 +262,20 @@ MutableConfigurationProvider singleton:</p> }</code></pre> </div> </div> -</div> -<div class="sect3"> -<h4 id="_targeting_the_right_mutablepropertysources">Targeting the right MutablePropertySources</h4> +<div class="sect4"> +<h5 id="_targeting_specific_mutablepropertysources">Targeting specific MutablePropertySources</h5> <div class="paragraph"> -<p>A Configuration may have multiple MutablePropertySource instances present. These are members of Tamaya’s oredered list of +<p>A Configuration may have multiple MutablePropertySource instances present. These are members of Tamaya’s ordered list of PropertySources to evaluate the configuration. Nevertheless writing back changes requires additional aspects to be considered: -* Should changes being written back to all mutable property sources? Or should a key that could be added or removed - on a more significant instance not be written/removed on less significant property source instances? -* Should a change be applied only to a specific mutable property source, regardless its position in the +* Should changes written target all mutable property sources? Or should a change only + target the most significant instance (hereby not writing the change to less significant property sources)? +* Or should a change be applied only to specific mutable property source(s), regardless its position in the processing chain?</p> </div> <div class="paragraph"> -<p>Therefore a ChangePropagationPolicy can be set on a MutableConfiguration instance, which allows to control -this aspect:</p> +<p>Therefore a <em>default</em> ChangePropagationPolicy can be applied on a MutableConfiguration instance, which allows to +control this aspect:</p> </div> <div class="listingblock"> <div class="title">Explicitly passing the backing configuration</div> @@ -282,7 +283,7 @@ this aspect:</p> <pre class="prettyprint highlight"><code class="language-java" data-lang="java">public interface ChangePropagationPolicy { /** * Method being called when a multiple key/value pairs are added or updated. - * @param propertySources the property sources, including readable property sources of the current configuration, + * @param propertySources all property sources, including read-only property sources, of the current configuration, * never null. * @param configChange the configuration change, not null. */ @@ -291,10 +292,12 @@ this aspect:</p> </div> </div> <div class="paragraph"> -<p>By default, changes are applied to all registered MutablePropertySources similarly.</p> +<p>By default, changes are applied to all registered MutablePropertySource instances +similarly.</p> </div> <div class="paragraph"> -<p>Also the MutableConfigurationProvider provides access to the most commonly used change propagation policies:</p> +<p>The MutableConfigurationProvider singleton also provides the most common +change propagation policy implementations:</p> </div> <div class="listingblock"> <div class="content"> @@ -310,6 +313,7 @@ this aspect:</p> </div> </div> </div> +</div> <div class="sect3"> <h4 id="_some_aspects_to_consider">Some Aspects to consider</h4> <div class="paragraph"> @@ -341,17 +345,7 @@ accordingly. Finally values also can be marked as immutable or being cached.</p> </div> <div class="paragraph"> <p>So it is part of your application configuration design to clearly define, which property sources may be read-only, which -may be mutable, how overriding should work and to which backends finally any changes should be written back. Nevertheless -changing or adding value is very easy:</p> -</div> -<div class="listingblock"> -<div class="title">Changing a configuration</div> -<div class="content"> -<pre class="prettyprint highlight"><code class="language-java" data-lang="java">MutableConfiguration config = MutableConfigurationProvider.createMutableConfiguration(); -config.put("newKey", "newValue"); -config.remove("mycluster.myapp.myKey"); -config.store();</code></pre> -</div> +may be mutable, how overriding should work and to which backends finally any changes should be written back.</p> </div> </div> </div> @@ -377,8 +371,8 @@ PropertySourceProvider instances about the changes applied.</p> <div class="sect2"> <h3 id="_supported_backends">Supported Backends</h3> <div class="paragraph"> -<p>Multiple backends are supported. E.g. the <em>etcd</em> integration module of Tamaya also registers -corresponding SPI implementations/backends. By default this module comes with +<p>Multiple backends are supported. E.g. <em>tamaya-etcd</em> also registers +corresponding SPI implementations/backends. This module comes with the following MutablePropertySource implementations:</p> </div> <div class="ulist"> @@ -393,51 +387,6 @@ XML format.</p> </li> </ul> </div> -<div class="sect3"> -<h4 id="_refreshable_property_sources">Refreshable Property Sources</h4> -<div class="paragraph"> -<p>Somehow similar to configuration changes applied explicitly is the case, where values of underlying -configuration backends change and must be reflected in the new configuration tree. Examples are:</p> -</div> -<div class="ulist"> -<ul> -<li> -<p>Configuration files being edited, added or removed.</p> -</li> -<li> -<p>Changes on remote servers like etcd, consul</p> -</li> -<li> -<p>etc.</p> -</li> -</ul> -</div> -<div class="paragraph"> -<p>For having a common API for refreshable items a Refreshable interface is defined:</p> -</div> -<div class="listingblock"> -<div class="title">Refreshable interface</div> -<div class="content"> -<pre class="prettyprint highlight"><code class="language-java" data-lang="java">/** - * Interface to be implemented by items that can be refreshed. By default - * these are property sources, but more types may be supported at a later - * point in time. - */ -public interface Refreshable { - - /** - * Refreshes the item by reloading its internal state. - */ - void refresh(); - -}</code></pre> -</div> -</div> -</div> -<div class="sect3"> -<h4 id="_refreshable_property_sources_2">Refreshable Property Sources</h4> - -</div> </div> <div class="sect2"> <h3 id="_spis">SPIs</h3> @@ -480,7 +429,7 @@ singleton accessor:</p> <div class="container"> <p class="muted credit">© 2014-<span>2017</span> Apache Software Foundation | Mixed with <a href="http://getbootstrap.com/">Bootstrap v3.1.1</a> | Baked with <a href="http://jbake.org">JBake <span>v2.5.1</span></a> - at <span>2017-02-24</span> | + at <span>2017-03-07</span> | <a href="https://twitter.com/tamayaconf" class="twitter-follow-button" data-show-count="false">Follow @TamayaConf</a><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script> </p> <p> http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/637aaff6/documentation/extensions/mod_optional.html ---------------------------------------------------------------------- diff --git a/documentation/extensions/mod_optional.html b/documentation/extensions/mod_optional.html index 9071da7..62560ab 100644 --- a/documentation/extensions/mod_optional.html +++ b/documentation/extensions/mod_optional.html @@ -124,7 +124,7 @@ <h1>Apache Tamaya&#8201;&#8212;&#8201;Extension: Optional Tamaya Configuration</h1> </div> - <p><em>2017-02-24</em></p> + <p><em>2017-03-07</em></p> <p><div id="preamble"> <div class="sectionbody"> @@ -140,12 +140,13 @@ <div class="sect2"> <h3 id="_what_functionality_this_module_provides">What functionality this module provides ?</h3> <div class="paragraph"> -<p>Tamaya <em>Optional</em> provides contains three types only. It is for projects that want to benefit from Tamaya -configuration optionally only. E.g. doing an OSS project you can declare to support configuration with Tamaya as -an optional extension. This module can be added as a hard dependency to your code, hereby adding only three artofacts. -It automatically checks the availability of Tamaya on the classpath and only if available tries to access it for -configuration evaluation. Additionally an EvaluationPolicy lets you define the precedence of configured values -(yours, or Tamaya ones if present).</p> +<p>Tamaya <em>Optional</em> is for projects that want to benefit from Tamaya configuration optionally only. +E.g. doing an OSS project you can declare to support configuration with Tamaya as +an optional extension. This module can be added as a hard dependency to your code, hereby adding only +three artifacts. The <em>optional</em> module automatically checks the availability of Tamaya on the +classpath and only if available it tries to access it for configuration evaluation. +Additionally an EvaluationPolicy lets you define the precedence of configured values +(yours, or Tamaya ones, if present).</p> </div> </div> <div class="sect2"> @@ -157,7 +158,7 @@ configuration evaluation. Additionally an EvaluationPolicy lets you define the p <div class="sect2"> <h3 id="_installation">Installation</h3> <div class="paragraph"> -<p>To benefit from configuration builder support you only must add the corresponding dependency to your module:</p> +<p>To use Tamaya <em>optional</em> you only must add the corresponding dependency to your module:</p> </div> <div class="listingblock"> <div class="content"> @@ -172,8 +173,11 @@ configuration evaluation. Additionally an EvaluationPolicy lets you define the p <div class="sect2"> <h3 id="_reading_configuration_using_the_tamaya_optional_module">Reading configuration using the Tamaya Optional Module</h3> <div class="paragraph"> -<p>Tamaya <em>Optional</em> allows reading configuration with a small subset of functionality only. For extended of full -featured config please consider using the Apache Tamaya as a full configuration backend.</p> +<p>Tamaya <em>Optional</em> allows reading configuration with a small subset of functionality only. For more + advanced use cases consider using the Apache Tamaya as your main configuration API. When + creating your OptionalConfiguration instance you also pass the logic to access a value + with your own configuration logic. Tamaya Optional will delegate to your logic as needed + (depending on the <code>EvaluationPolicy</code>).</p> </div> <div class="listingblock"> <div class="content"> @@ -200,7 +204,7 @@ featured config please consider using the Apache Tamaya as a full configuration <div class="container"> <p class="muted credit">© 2014-<span>2017</span> Apache Software Foundation | Mixed with <a href="http://getbootstrap.com/">Bootstrap v3.1.1</a> | Baked with <a href="http://jbake.org">JBake <span>v2.5.1</span></a> - at <span>2017-02-24</span> | + at <span>2017-03-07</span> | <a href="https://twitter.com/tamayaconf" class="twitter-follow-button" data-show-count="false">Follow @TamayaConf</a><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script> </p> <p> http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/637aaff6/documentation/extensions/mod_osgi.html ---------------------------------------------------------------------- diff --git a/documentation/extensions/mod_osgi.html b/documentation/extensions/mod_osgi.html index e7aea4c..b6f3412 100644 --- a/documentation/extensions/mod_osgi.html +++ b/documentation/extensions/mod_osgi.html @@ -124,7 +124,7 @@ <h1>Apache Tamaya&#8201;&#8212;&#8201;Extensions: OSGI Integrations</h1> </div> - <p><em>2017-02-24</em></p> + <p><em>2017-03-07</em></p> <p><div id="preamble"> <div class="sectionbody"> @@ -140,25 +140,25 @@ <div class="sect2"> <h3 id="_what_functionality_this_module_provides">What functionality this module provides ?</h3> <div class="paragraph"> -<p>Tamaya <em>OSGI</em> provides also support for integration with OSGI. Hereby Tamaya implements the OSGI ConfigAdmin service, +<p>Tamaya <em>OSGI</em> provides support for integration with OSGI. Hereby Tamaya implements the OSGI ConfigAdmin service, which is the OSGI basic component providing configuration. Tamaya by default overrides the OSGI default configuration -but can also be configured to extend it.</p> +but can also be configured to extend it instead.</p> </div> </div> <div class="sect2"> <h3 id="_compatibility">Compatibility</h3> <div class="paragraph"> <p>All module described are based on Java 7, so it will run on Java 7 and beyond. -The modules are built against OSGI Compendium version 5.0. Tamaya OSGI support is tested against the following OSGI -runtimes:</p> +The modules are built against <strong>OSGI Compendium version 5.0</strong>. Tamaya OSGI support +is tested against the following OSGI runtimes:</p> </div> <div class="ulist"> <ul> <li> -<p>Apache Karaf, version 4.0.7</p> +<p>Apache Karaf, version 4.0.7 (tbc)</p> </li> <li> -<p>Apache Felix, version 5.6.1.</p> +<p>Apache Felix, version 5.6.1</p> </li> <li> <p>tbd: Eclipse Equinox, version x.x.x.</p> @@ -169,8 +169,8 @@ runtimes:</p> <div class="sect2"> <h3 id="_installation">Installation</h3> <div class="paragraph"> -<p>To benefit from Tamaya in an OSGI context you must deploy at least the following modules to your OSGI runtime -environment:</p> +<p>To benefit from Tamaya in an OSGI context you must deploy at least the following modules to +your OSGI runtime environment:</p> </div> <div class="listingblock"> <div class="content"> @@ -293,7 +293,7 @@ as org.apache.tamaya.ext:tamaya-karaf-features:{tamaya-version}:features:xml.</p <div class="container"> <p class="muted credit">© 2014-<span>2017</span> Apache Software Foundation | Mixed with <a href="http://getbootstrap.com/">Bootstrap v3.1.1</a> | Baked with <a href="http://jbake.org">JBake <span>v2.5.1</span></a> - at <span>2017-02-24</span> | + at <span>2017-03-07</span> | <a href="https://twitter.com/tamayaconf" class="twitter-follow-button" data-show-count="false">Follow @TamayaConf</a><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script> </p> <p> http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/637aaff6/documentation/extensions/mod_remote.html ---------------------------------------------------------------------- diff --git a/documentation/extensions/mod_remote.html b/documentation/extensions/mod_remote.html index baa574a..8f4ca8d 100644 --- a/documentation/extensions/mod_remote.html +++ b/documentation/extensions/mod_remote.html @@ -124,7 +124,7 @@ <h1>Apache Tamaya&#8201;&#8212;&#8201;Extension: Remote Configuration</h1> </div> - <p><em>2017-02-24</em></p> + <p><em>2017-03-07</em></p> <p><div id="preamble"> <div class="sectionbody"> @@ -141,8 +141,8 @@ <h3 id="_what_functionality_this_module_provides">What functionality this module provides ?</h3> <div class="paragraph"> <p>Tamaya <em>Remote</em> provides support for reading configuration from remote resources. It provides -especially out-of-the-box support for reading scoped configuration from a configuration server as -provided with the <em>Tamaya server module</em> .</p> +out-of-the-box support for reading scoped configuration from a Tamaya configuration server as +provided with the Tamaya <em>server</em> module .</p> </div> </div> <div class="sect2"> @@ -154,7 +154,7 @@ provided with the <em>Tamaya server module</em> .</p> <div class="sect2"> <h3 id="_installation">Installation</h3> <div class="paragraph"> -<p>To benefit from configuration builder support you only must add the corresponding dependency to your module:</p> +<p>To use remote support you only must add the corresponding dependency to your module:</p> </div> <div class="listingblock"> <div class="content"> @@ -169,7 +169,7 @@ provided with the <em>Tamaya server module</em> .</p> <div class="sect2"> <h3 id="_reading_remote_configuration_from_a_tamaya_configuration_server">Reading Remote configuration from a Tamaya Configuration Server</h3> <div class="paragraph"> -<p>The remote module allows reading JSON formatted configuration as provided by the <em>Tamaya server extension</em> . The JSON +<p>The remote module allows reading JSON formatted configuration as provided by the Tamaya <em>server</em> extension . The JSON format used looks as follows:</p> </div> <div class="listingblock"> @@ -196,37 +196,29 @@ format used looks as follows:</p> "sun.jnu.encoding": "Cp1252", "sun.management.compiler": "HotSpot 64-Bit Tiered Compilers", "sun.os.patch.level": "", - "{meta}class": "org.apache.tamaya.functions.FilteredConfiguration", - "{meta}info.filter": "java.v,sun", - "{meta}info.format": "application/json", - "{meta}info.timestamp": "1441463200571", - "{meta}timestamp": "1441463200571", - "{meta}type": "Configuration" + "_class": "org.apache.tamaya.functions.FilteredConfiguration", + "_info.filter": "java.v,sun", + "_info.format": "application/json", + "_info.timestamp": "1441463200571", + "_timestamp": "1441463200571", + "_type": "Configuration" }</code></pre> </div> </div> <div class="paragraph"> <p>Basically there are no constraints about they keys provided. By default Tamaya uses keys prefixed with -{xxx} to identify meta-data entries, but this is not a required precondition.</p> +'_' to identify meta-data entries, but this is not a required precondition.</p> </div> <div class="paragraph"> <p>Finally such a remote configuration can be easily integrated by inheriting from the provided base class. Hereby a default ordinal must be defined and the protected Collection<URL> getAccessURLs() method must be implemented to define the URL from where the configuration should be accessible. Hereby multiple URLs can be provided, which are accesed in order as provided by the collection’s iterator. The -first URL that is successfully accessed determines the configuration read and imported into the -PropertySource.</p> +first accessible URL determines the configuration read.</p> </div> <div class="listingblock"> <div class="content"> <pre class="prettyprint highlight"><code class="language-java" data-lang="java">public class RemotePropertySource extends BaseRemotePropertySource{ - /** Current remote property source default ordinal. */ - private static final int REMOTE_ORDINAL = 15000; - - @Override - public int getDefaultOrdinal(){ - return REMOTE_ORDINAL; - } @Override protected Collection<URL> getAccessURLs() { @@ -263,7 +255,7 @@ PropertySource.</p> <div class="container"> <p class="muted credit">© 2014-<span>2017</span> Apache Software Foundation | Mixed with <a href="http://getbootstrap.com/">Bootstrap v3.1.1</a> | Baked with <a href="http://jbake.org">JBake <span>v2.5.1</span></a> - at <span>2017-02-24</span> | + at <span>2017-03-07</span> | <a href="https://twitter.com/tamayaconf" class="twitter-follow-button" data-show-count="false">Follow @TamayaConf</a><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script> </p> <p> http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/637aaff6/documentation/extensions/mod_resolver.html ---------------------------------------------------------------------- diff --git a/documentation/extensions/mod_resolver.html b/documentation/extensions/mod_resolver.html index 1a6fa9c..7eb7a29 100644 --- a/documentation/extensions/mod_resolver.html +++ b/documentation/extensions/mod_resolver.html @@ -124,7 +124,7 @@ <h1>Apache Tamaya&#8201;&#8212;&#8201;Extension: Resolver</h1> </div> - <p><em>2017-02-24</em></p> + <p><em>2017-03-07</em></p> <p><div class="sect1"> <h2 id="Resolver">Tamaya Resolver (Extension Module)</h2> @@ -135,8 +135,7 @@ <div class="sect2"> <h3 id="_what_functionality_this_module_provides">What functionality this module provides ?</h3> <div class="paragraph"> -<p>Tamaya <em>Resolver</em> is an extension module. Refer to the -<a href="../extensions.html">extensions documentation</a> +<p>Tamaya <em>Resolver</em> is an extension module. Refer to the <a href="../extensions.html">extensions documentation</a> for further details about modules.</p> </div> <div class="paragraph"> @@ -173,7 +172,7 @@ is accessed.</p> <div class="sect2"> <h3 id="_available_resolvers">Available Resolvers</h3> <div class="paragraph"> -<p>Currently the module defined the following resolvers:</p> +<p>Currently the module defines the following resolvers:</p> </div> <table class="tableblock frame-all grid-all spread"> <caption class="title">Table 1. Available Resolvers</caption> @@ -214,7 +213,7 @@ is accessed.</p> <div class="sect2"> <h3 id="_spi_implementing_your_own_resolvers">SPI: Implementing your own Resolvers</h3> <div class="paragraph"> -<p>The module also provides an easy but powerful SPI for adding your own resolver implementations. Basically the +<p>The module also provides a small but powerful SPI for adding your own resolver implementations. Basically the first and most important thing to do is implementing the ExpressionResolver interface:</p> </div> <div class="listingblock"> @@ -271,7 +270,7 @@ interface:</p> </div> </div> <div class="paragraph"> -<p>Implementing and registering this interface gives you full control, but in most cases yhou should be fine with +<p>Implementing and registering this interface gives you full control, but in most cases you should be fine with the default implementation in place.</p> </div> </div> @@ -288,7 +287,7 @@ the default implementation in place.</p> <div class="container"> <p class="muted credit">© 2014-<span>2017</span> Apache Software Foundation | Mixed with <a href="http://getbootstrap.com/">Bootstrap v3.1.1</a> | Baked with <a href="http://jbake.org">JBake <span>v2.5.1</span></a> - at <span>2017-02-24</span> | + at <span>2017-03-07</span> | <a href="https://twitter.com/tamayaconf" class="twitter-follow-button" data-show-count="false">Follow @TamayaConf</a><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script> </p> <p> http://git-wip-us.apache.org/repos/asf/incubator-tamaya-site/blob/637aaff6/documentation/extensions/mod_resources.html ---------------------------------------------------------------------- diff --git a/documentation/extensions/mod_resources.html b/documentation/extensions/mod_resources.html index 13729cd..83a02b9 100644 --- a/documentation/extensions/mod_resources.html +++ b/documentation/extensions/mod_resources.html @@ -124,7 +124,7 @@ <h1>Apache Tamaya&#8201;&#8212;&#8201;Extension: Resources</h1> </div> - <p><em>2017-02-24</em></p> + <p><em>2017-03-07</em></p> <p><div class="sect1"> <h2 id="Resources">Tamaya Resources (Extension Module)</h2> @@ -135,8 +135,20 @@ <div class="sect2"> <h3 id="_what_functionality_this_module_provides">What functionality this module provides ?</h3> <div class="paragraph"> -<p>Tamaya <em>Resources</em> defines some additional tools to locate resources in your classpath or file system based on descriptive -ant-styled resource patterns. To use this module add the following dependency:</p> +<p>Tamaya <em>Resources</em> defines some additional tools to locate resources in your classpath or file system based on +descriptive ant-styled resource patterns.</p> +</div> +</div> +<div class="sect2"> +<h3 id="_compatibility">Compatibility</h3> +<div class="paragraph"> +<p>The module is based on Java 7, so it can be used with Java 7 and beyond.</p> +</div> +</div> +<div class="sect2"> +<h3 id="_installation">Installation</h3> +<div class="paragraph"> +<p>To use this module add the following dependency:</p> </div> <div class="listingblock"> <div class="content"> @@ -147,6 +159,9 @@ ant-styled resource patterns. To use this module add the following dependency:</ </dependency></code></pre> </div> </div> +</div> +<div class="sect2"> +<h3 id="_usage">Usage</h3> <div class="paragraph"> <p>The module’s main entry point is the singleton class org.apache.tamaya.resource.ConfigResources. This class provides access to a ResourceResolver instance:</p> @@ -189,7 +204,7 @@ So by default resources can be looked up</p> </div> </div> <div class="sect2"> -<h3 id="_valid_expression_examples">Valid Expression Examples</h3> +<h3 id="_examples">Examples</h3> <div class="paragraph"> <p>There are numerous ways how a resource pattern can be defined. Following the most important variants are listed:</p> @@ -239,7 +254,7 @@ location, hereby traversing down all folders:</p> @Override public Collection<PropertySource> getPropertySources() { List<PropertySource> propertySources = new ArrayList<>(); - Collection<URL> resources = Resources.getResourceResolver().getResources("META-INF/cfg/**/*.properties"); + Collection<URL> resources = ConfigResources.getResourceResolver().getResources("META-INF/cfg/**/*.properties"); for(URL url:resources){ Properties props = new Properties(); try(InputStream is = url.openStream()){ @@ -307,7 +322,7 @@ on your own.</p> <div class="container"> <p class="muted credit">© 2014-<span>2017</span> Apache Software Foundation | Mixed with <a href="http://getbootstrap.com/">Bootstrap v3.1.1</a> | Baked with <a href="http://jbake.org">JBake <span>v2.5.1</span></a> - at <span>2017-02-24</span> | + at <span>2017-03-07</span> | <a href="https://twitter.com/tamayaconf" class="twitter-follow-button" data-show-count="false">Follow @TamayaConf</a><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script> </p> <p>
