blob: 215c6caaa822a8187b2da4dda5f9bdb74826af72 [file] [log] [blame]
<!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>Tamaya Incubator</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta name="description" content="Homepage of Apache Tamaya (incubating)"/>
<meta name="author" content="Apache Tamaya Project Team"/>
<meta name="keywords" content="Apache Tamaya Incubating, configuration, Java, ASF, Apache Software Foundation"/>
<meta name="generator" content="JBake ${content.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">Tamaya Home</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/stable/index.html">Javadoc 0.4-incubating (release/stable)</a></li>
<li><a href="../apidocs/development/index.html">Javadoc 0.5-incubating-SNAPSHOT (development)</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>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">ASF <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="https://www.apache.org/">Apache Software Foundation (ASF)</a></li>
<li><a href="https://www.apache.org/foundation/how-it-works.html">How the ASF works</a></li>
<li><a href="https://www.apache.org/foundation/getinvolved.html">Get Involved</a></li>
<li><a href="https://www.apache.org/dev/">Developer Resources</a></li>
<li><a href="https://www.apache.org/foundation/policies/conduct.html">Code of Conduct</a></li>
<li><a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
<li><a href="https://www.apache.org/licenses/">License</a></li>
<li><a href="https://www.apache.org/security">Security</a></li>
<li><a href="https://www.apache.org/foundation/thanks.html">Thanks</a></li>
<hr/>
<li><a href="https://www.apache.org/events/current-event.html"><img src="https://www.apache.org/events/current-event-125x125.png" alt="Current Apache event"/></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>
<li><a href="https://incubator.apache.org/guides/website.html" style="border:0px;" target="_target">
<img class="incubator-logo" src="../logos/apache-incubator.png"/></a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</div>
</div>
<div class="container">
<div class="page-header">
<h1></h1>
</div>
<p><em>2019-11-17</em></p>
<p><!-- toc disabled -->
<h1 id="_apache_tamaya_possible_tasks" class="sect0">Apache Tamaya - Possible Tasks</h1>
<div style="page-break-after: always;"></div>
<div class="sect1">
<h2 id="_introduction">1. Introduction</h2>
<div class="sectionbody">
</div>
</div>
<div class="sect1">
<h2 id="_what_is_tamaya">2. What is Tamaya</h2>
<div class="sectionbody">
<div class="paragraph">
<p>{name} is the Apache standard for flexible and powerful configuration. Objective is to provide flavors for
Java SE, ME as well as to ship with powerful features for Java EE and Cloud Solutions. All functions provided
is build on top of a small but very powerful, flexible and extendible API. This API is implemented by a core implementation,
which then can be extended or adapted for use in different runtime scenarios, such as SE, ME, EE, Spring, OSGi
and more. Similarly additional modules may be provided that help also existing solution to be plugged into
{name}, so you can start right away using {name} without having to rebuild/change your existing application.</p>
</div>
<div class="sect2">
<h3 id="_purpose_of_this_document">2.1. Purpose of this Document</h3>
<div class="paragraph">
<p>The document should help to organize people and ideas around the Apache Tamaya Library. It list possible features,
ideas and tasks that need to be done. Everybody can have a look at and see, where hos contribution and capabilities
would fit best.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_main_features">3. Main Features</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_metadata_model">3.1. Metadata Model</h3>
<div class="paragraph">
<p>Currently MetaInfo models metadata as a separate constuct. It has been shown that this leads to more complex
handling when creating composites and makes the API overall more complex. The idea is to model metadata as simple
key/value pairs, that are part of the provider/configuration data as well, but handled separately. Metadata hereby
is identified by a starting '_' character in its key. For example refer to the following configuration properties:</p>
</div>
<div class="listingblock">
<div class="title">Basic Properties</div>
<div class="content">
<pre class="prettyprint highlight"><code class="language-listing" data-lang="listing">a.b.Foo=foo
a.b.Bar=bar
a.AnyOther=whatelse
Something=none</code></pre>
</div>
</div>
<div class="paragraph">
<p>Now we can model meta-data as follows:</p>
</div>
<div class="listingblock">
<div class="title">Metadata Properties</div>
<div class="content">
<pre class="prettyprint highlight"><code class="language-listing" data-lang="listing">[a.b].info=An area info
[a.b.Foo].auth=role1,role2
[a.b.Foo].encrypt=PGP
[a.b.Foo].sensitive=true
[].info=This is a test configuration example.</code></pre>
</div>
</div>
<div class="paragraph">
<p>The above would model the following:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>The area a.b has the meta property info.</p>
</li>
<li>
<p>The entry a.b.Foo has three meta properties auth,encrypt and sensitive. These could be interpreted by a security
view and used to encrypt the values returned by the configuration instance, if not the current user has one of the
specified roles.</p>
</li>
<li>
<p>The last meta data defines an attribute info for the whole provider/configuration (the root area).</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Given that the overall entries would be as follows:</p>
</div>
<div class="listingblock">
<div class="title">Full Properties with Meta Properties</div>
<div class="content">
<pre class="prettyprint highlight"><code class="language-listing" data-lang="listing">[a.b].info=An area info
a.b.Foo=foo
[a.b.Foo].auth=role1,role2
[a.b.Foo].encrypt=PGP
[a.b.Foo].sensitive=true
a.b.Bar=bar
[].info=This is a test configuration example.
a.AnyOther=whatelse
Something=none</code></pre>
</div>
</div>
<div class="paragraph">
<p>The current MetaInfo class could be adapted, so it is reading data from the underlying configuration/provider,
instead of its own datastructure. This would make a later mapping of configuration and its metadata into DB table, JSON
etc, much more easier.
The providers on the other side may suppress any metadata from ordinary output, such
as toString(), Similarly accessing metadata using the official config API (get, getOrDefault, getAreas etc)
should be disabled. The MetaInfoBuilder must probably as well adapted or redesigned.</p>
</div>
</div>
<div class="sect2">
<h3 id="_management_client">3.2. Management Client</h3>
<div class="paragraph">
<p>A nice web-based client to manage configuration data would be nice as well. This also includes a UI for creating new
configurations.</p>
</div>
</div>
<div class="sect2">
<h3 id="_mapping_configuration_to_a_database">3.3. Mapping Configuration to a Database</h3>
<div class="paragraph">
<p>A flexible mechanism should be implemented that allows the use of databases (SQL/JPA as well as non-SQL) for
storing/retreiving/managing configuration:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>JPA, Hibernate</p>
</li>
<li>
<p>MongoDB</p>
</li>
<li>
<p>&#8230;&#8203;</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="_integration_with_jigsaw">3.4. Integration with Jigsaw</h3>
<div class="paragraph">
<p>Once Jigsaw is mature and in a usable (still early) stage, examples are to be created and tested, where OSGi is used as
the basic runtime platform, e.g. Apache Felix, but as well others.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_distributedremote_configuration_support">4. Distributed/Remote Configuration Support</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_configuration_distribution_policies">4.1. Configuration Distribution Policies</h3>
<div class="paragraph">
<p>Different configuration distribution policies should be defined any implemented, e.g. distributed cache, restful services,
web services, EJB/RMI calls, asynchronous queues, publish/subsribe models, &#8230;&#8203;</p>
</div>
</div>
<div class="sect2">
<h3 id="_preferences_support">4.2. Preferences Support</h3>
<div class="paragraph">
<p>Write a PreferencesFactory for java.util.preferences.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_third_party_integration">5. Third Party Integration</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_integration_with_deltaspike_config">5.1. Integration with Deltaspike Config</h3>
<div class="paragraph">
<p>Integration with Deltaspike Config should be implemented and discussed with Deltaspike guys.</p>
</div>
</div>
<div class="sect2">
<h3 id="_integration_with_spring">5.2. Integration with Spring</h3>
<div class="paragraph">
<p>A {name} module should be created that allows Spring to be used either as client or configuration provider.</p>
</div>
</div>
<div class="sect2">
<h3 id="_integration_with_jetty">5.3. Integration with Jetty</h3>
<div class="paragraph">
<p>A {name} module should be created that allows a Jetty instance to be deployed and started that is (completely)
configured based on configuration server.</p>
</div>
</div>
<div class="sect2">
<h3 id="_integration_with_tomcat">5.4. Integration with Tomcat</h3>
<div class="paragraph">
<p>A {name} module should be created that allows a Tomcat instance to be deployed and started that is (completely)
configured based on configuration server.</p>
</div>
</div>
<div class="sect2">
<h3 id="_configuration_of_java_ee">5.5. Configuration of Java EE</h3>
<div class="paragraph">
<p>In the Java EE area there would be several options:</p>
</div>
</div>
<div class="sect2">
<h3 id="_configuration_of_application_servers_administrative_resources">5.6. Configuration of Application Servers (administrative resources)</h3>
<div class="paragraph">
<p>It should be possible to start a application server instance remotely and configure all administrative resources and the
deployments based on the configuration service, server to be considered maybe</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Wildfly</p>
</li>
<li>
<p>IBM</p>
</li>
<li>
<p>Weblogic</p>
</li>
<li>
<p>Glassfish</p>
</li>
<li>
<p>Apache Geronimo</p>
</li>
</ul>
</div>
<div class="sect3">
<h4 id="_configuration_of_bean_validation">5.6.1. Configuration of Bean Validation</h4>
<div class="ulist">
<ul>
<li>
<p>Add configurable validators.</p>
</li>
<li>
<p>Configure bean validation based on configuration</p>
</li>
<li>
<p>&#8230;&#8203;</p>
</li>
</ul>
</div>
</div>
</div>
<div class="sect2">
<h3 id="_jndi_support">5.7. JNDI Support</h3>
<div class="paragraph">
<p>Write a JCA adapter to provide configuration data through JNDI.</p>
</div>
<div class="sect3">
<h4 id="_configure_jsf">5.7.1. Configure JSF</h4>
<div class="paragraph">
<p>Use the JSF XML Document event to completely configure JSF.</p>
</div>
</div>
<div class="sect3">
<h4 id="_configure_web_services">5.7.2. Configure Web Services</h4>
<div class="paragraph">
<p>Provide a WebServiceProviderFactory that may be configured.</p>
</div>
</div>
<div class="sect3">
<h4 id="_configure_jpa">5.7.3. Configure JPA</h4>
<div class="paragraph">
<p>Provide an implementation that allows configuration of persistence units. Talk with JPA EG people to see if we can
get an SPI to hook in a stadardized way.</p>
</div>
</div>
<div class="sect3">
<h4 id="_configure_ejbs">5.7.4. Configure EJBs</h4>
<div class="paragraph">
<p>Provide an implementation that allows configuration of EJBs and MDBs:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Register beans</p>
</li>
<li>
<p>Unregister/disable beans</p>
</li>
<li>
<p>Intercept beans</p>
</li>
<li>
<p>Support Configuration Injection (in the worst case using a standard Interceptor, provide supporting artifacts to
help developers to achive this easily).</p>
</li>
<li>
<p>Talk with EE8 Umbrella EG (Bill Shanon, Linda DeMichels) on a feasible SPI for EE8, if possible join the EG.</p>
</li>
</ul>
</div>
</div>
<div class="sect3">
<h4 id="_configure">5.7.5. Configure &#8230;&#8203;</h4>
<div class="paragraph">
<p>Just think of any Java EE aspects that might be worth to be configured. If it can be done, e.g. by managing CDI managed
resources, it might be easy. For others it is a good idea to discuss things with our matter of experts&#8230;&#8203;</p>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_special_goodies">6. Special Goodies</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="_maintenance_mode_servlet_filter">6.1. Maintenance Mode Servlet Filter</h3>
<div class="paragraph">
<p>Provide a servlet filter that is capable of switching to maintenance mode, based on configuration. Similarly also a forwarding
servlet could be useful, wehere only request based on configuration are forwarded, other might be rejected or dropped
as configured.</p>
</div>
</div>
<div class="sect2">
<h3 id="_dynamic_camel_routes">6.2. Dynamic Camel Routes</h3>
<div class="paragraph">
<p>Provides dynamic (configurable) Camel routes, e.g. usable within ServiceMix or standalone.</p>
</div>
</div>
<div class="sect2">
<h3 id="_dynamic_cxf">6.3. Dynamic CXF</h3>
<div class="paragraph">
<p>Provides dynamic (configurable) CXF adapters, e.g. usable within ServiceMix or standalone.</p>
</div>
</div>
<div class="sect2">
<h3 id="_configurable_apache_mq">6.4. Configurable Apache MQ</h3>
<div class="paragraph">
<p>Provides an implementation for configuring Apache MQ.</p>
</div>
</div>
<div class="sect2">
<h3 id="_dynamic">6.5. Dynamic &#8230;&#8203;</h3>
<div class="paragraph">
<p>Interested to see what other ideas are around. Let us know!</p>
</div>
</div>
</div>
</div></p>
<hr />
</div>
</div>
<div>
<div id="push"></div>
<div id="footer">
<div class="container">
<p class="muted credit">&copy; 2014-<span>2019</span> Apache Software Foundation | Mixed with <a href="https://getbootstrap.com/">Bootstrap v3.1.1</a>
| Baked with <a href="https://jbake.org">JBake <span>v2.6.4</span></a>
at <span>2019-11-17</span> |
<a class="twitter-follow-button" data-show-count="false" href="https://twitter.com/tamayaconf">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 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 />
Apache, Apache Tamaya, and the Apache Tamaya logo are registered trademarks or trademarks of The Apache Software Foundation in the U.S. and/or other countries.<br />
<a href="https://incubator.apache.org/guides/website.html" style="border:0px;" target="_target">
<img class="incubator-logo" src="../logos/apache-incubator.png" style="height: 50px;"/>
</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>