You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@unomi.apache.org by sh...@apache.org on 2017/10/02 08:12:00 UTC

svn commit: r1810306 [20/22] - in /incubator/unomi/website: ./ rest-api-doc/input/ samples/ samples/login-integration-sample/ samples/tweet-button-plugin/ unomi-api/ unomi-api/apidocs/ unomi-api/apidocs/org/apache/unomi/api/ unomi-api/apidocs/org/apach...

Added: incubator/unomi/website/versions/1.2/configuration.html
URL: http://svn.apache.org/viewvc/incubator/unomi/website/versions/1.2/configuration.html?rev=1810306&view=auto
==============================================================================
--- incubator/unomi/website/versions/1.2/configuration.html (added)
+++ incubator/unomi/website/versions/1.2/configuration.html Mon Oct  2 08:11:40 2017
@@ -0,0 +1,568 @@
+
+<!DOCTYPE html>
+<!--
+ Generated by Apache Maven Doxia at 2017-10-02
+ Rendered using Reflow Maven Skin 1.1.1 (http://andriusvelykis.github.io/reflow-maven-skin)
+-->
+<html  xml:lang="en" lang="en">
+
+	<head>
+		<meta charset="UTF-8" />
+		<title>Configuration | Apache Unomi</title>
+		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+		<meta name="description" content="" />
+		<meta http-equiv="content-language" content="en" />
+ 
+		<link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap.min.css" rel="stylesheet" />
+		<link href="../..//css/docs.css" rel="stylesheet" />
+		<link href="../..//css/reflow-skin.css" rel="stylesheet" />
+
+		<link href="http://yandex.st/highlightjs/7.5/styles/github.min.css" rel="stylesheet" />
+
+		<link href="../..//css/lightbox.css" rel="stylesheet" />
+
+		<link href="../..//css/site.css" rel="stylesheet" />
+		<link href="../..//css/print.css" rel="stylesheet" media="print" />
+
+		<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
+		<!--[if lt IE 9]>
+			<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
+		<![endif]-->
+
+
+
+		<!-- Google Analytics -->
+		<script type="text/javascript">
+
+			var _gaq = _gaq || [];
+			_gaq.push(['_setAccount', 'UA-70313240-1']);
+			_gaq.push(['_trackPageview']);
+
+			(function() {
+				var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+				ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+				var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+			})();
+
+		</script>
+		</head>
+
+	<body class="page-versions-12-configuration project-unomi-root" data-spy="scroll" data-offset="60" data-target="#toc-scroll-target">
+
+		<div class="navbar navbar-fixed-top">
+			<div class="navbar-inner">
+				<div class="container">
+					<a class="btn btn-navbar" data-toggle="collapse" data-target="#top-nav-collapse">
+						<span class="icon-bar"></span>
+						<span class="icon-bar"></span>
+						<span class="icon-bar"></span>
+					</a>
+					<a class="brand" href="../.."><img src="http://unomi.incubator.apache.org/images/unomi-86x20.png" /></a>
+					<div class="nav-collapse collapse" id="top-nav-collapse">
+						<ul class="nav pull-right">
+							<li class="dropdown">
+								<a href="#" class="dropdown-toggle" data-toggle="dropdown">Download <b class="caret"></b></a>
+								<ul class="dropdown-menu">
+									<li ><a href="../../download.html" title="Packages">Packages</a></li>
+									<li ><a href="../../license.html" title="License">License</a></li>
+								</ul>
+							</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="../../" title="Site Home">Site Home</a></li>
+									<li ><a href="../../main.html" title="Main documentation">Main documentation</a></li>
+									<li ><a href="../../usecases.html" title="More use cases">More use cases</a></li>
+									<li ><a href="../../rest-api-doc/index.html" title="REST API documentation">REST API documentation</a></li>
+									<li ><a href="../../unomi-api/apidocs/index.html" title="API Javadoc">API Javadoc</a></li>
+								</ul>
+							</li>
+							<li class="dropdown">
+								<a href="#" class="dropdown-toggle" data-toggle="dropdown">Standard <b class="caret"></b></a>
+								<ul class="dropdown-menu">
+									<li ><a href="https://www.oasis-open.org/committees/cxs/" title="OASIS Context Server Technical Committee" class="externalLink">OASIS Context Server Technical Committee</a></li>
+								</ul>
+							</li>
+							<li class="dropdown">
+								<a href="#" class="dropdown-toggle" data-toggle="dropdown">Privacy <b class="caret"></b></a>
+								<ul class="dropdown-menu">
+									<li ><a href="../../privacy-policy.html" title="Site policy">Site policy</a></li>
+								</ul>
+							</li>
+							<li class="dropdown">
+								<a href="#" class="dropdown-toggle" data-toggle="dropdown">Contribute <b class="caret"></b></a>
+								<ul class="dropdown-menu">
+									<li ><a href="../../mail-lists.html" title="Mailing lists">Mailing lists</a></li>
+									<li ><a href="../../source-repository.html" title="Source">Source</a></li>
+									<li ><a href="../../issue-tracking.html" title="Issues">Issues</a></li>
+								</ul>
+							</li>
+							<li class="dropdown">
+								<a href="#" class="dropdown-toggle" data-toggle="dropdown">Community <b class="caret"></b></a>
+								<ul class="dropdown-menu">
+									<li ><a href="../../mail-lists.html" title="Mailing lists">Mailing lists</a></li>
+									<li ><a href="../../team-list.html" title="Team">Team</a></li>
+									<li ><a href="../../maturity-model-report.html" title="Maturity model report card">Maturity model report card</a></li>
+									<li ><a href="http://www.apache.org" title="The Apache Software Foundation" class="externalLink">The Apache Software Foundation</a></li>
+									<li ><a href="http://www.apache.org/foundation/sponsorship.html" title="Sponsorship" class="externalLink">Sponsorship</a></li>
+									<li ><a href="http://www.apache.org/foundation/thanks.html" title="Thanks" class="externalLink">Thanks</a></li>
+								</ul>
+							</li>
+						</ul>
+					</div><!--/.nav-collapse -->
+				</div>
+			</div>
+		</div>
+
+	<div class="container">
+
+	<!-- Masthead
+	================================================== -->
+
+	<header>
+		<div>
+			<ul class="breadcrumb">
+				<li class="publishDate version-date">Last Published: 2017-10-02</li>
+			</ul>
+		</div>
+	</header>
+
+	<div class="main-body">
+	<div class="row">
+		<div class="span8">
+			<div class="body-content">
+<!-- ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License. --> 
+<div class="page-header">
+ <h1 id="configuration">Configuration</h1>
+</div> 
+<div class="section"> 
+ <h2 id="Changing_the_default_configuration">Changing the default configuration</h2> 
+ <p>If you want to change the default configuration, you can perform any modification you want in the $MY_KARAF_HOME/etc directory.</p> 
+ <p>The context server configuration is kept in the $MY_KARAF_HOME/etc/org.apache.unomi.cluster.cfg . It defines the addresses where it can be found :</p> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>contextserver.publicAddress=https://localhost:9443
+contextserver.internalAddress=http://127.0.0.1:8181
+</pre> 
+  </div> 
+ </div> 
+ <p>If you need to specify an Elasticsearch cluster name, or a host and port that are different than the default, it is recommended to do this BEFORE you start the server for the first time, or you will loose all the data you have stored previously.</p> 
+ <p>To change these settings, you will need to modify a file called </p> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>$MY_KARAF_HOME/etc/org.apache.unomi.persistence.elasticsearch.cfg
+</pre> 
+  </div> 
+ </div> 
+ <p>with the following contents:</p> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>cluster.name=contextElasticSearch
+# The elasticSearchAddresses may be a comma seperated list of host names and ports such as
+# hostA:9300,hostB:9300
+# Note: the port number must be repeated for each host.
+elasticSearchAddresses=localhost:9300
+index.name=context
+</pre> 
+  </div> 
+ </div> 
+</div> 
+<div class="section"> 
+ <h2 id="Secured_events_configuration">Secured events configuration</h2> 
+ <p>If you need to secure some events, that will be sent only by a trusted third party server, you can update the file :</p> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>$MY_KARAF_HOME/etc/org.apache.unomi.thirdparty.cfg
+</pre> 
+  </div> 
+ </div> 
+ <p>Ususally, login events, which operate on profiles and do merge on protected properties, must be secured. For each trusted third party server, you need to add these 3 lines :</p> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>thirdparty.provider1.key=secret-key
+thirdparty.provider1.ipAddresses=127.0.0.1,::1
+thirdparty.provider1.allowedEvents=login,download
+</pre> 
+  </div> 
+ </div> 
+ <p>The events set in allowedEvents will be secured and will only be accepted if the call comes from the specified IP address, and if the secret-key is passed in the X-Unomi-Peer header. </p> 
+</div> 
+<div class="section"> 
+ <h2 id="Installing_the_MaxMind_GeoIPLite2_IP_lookup_database">Installing the MaxMind GeoIPLite2 IP lookup database</h2> 
+ <p>The Context Server requires an IP database in order to resolve IP addresses to user location. The GeoLite2 database can be downloaded from MaxMind here : <a class="externalLink" href="http://dev.maxmind.com/geoip/geoip2/geolite2/">http://dev.maxmind.com/geoip/geoip2/geolite2/</a></p> 
+ <p>Simply download the GeoLite2-City.mmdb file into the “etc” directory.</p> 
+</div> 
+<div class="section"> 
+ <h2 id="Installing_Geonames_database">Installing Geonames database</h2> 
+ <p>Context server includes a geocoding service based on the geonames database ( <a class="externalLink" href="http://www.geonames.org/">http://www.geonames.org/</a> ). It can be used to create conditions on countries or cities.</p> 
+ <p>In order to use it, you need to install the Geonames database into . Get the “allCountries.zip” database from here : <a class="externalLink" href="http://download.geonames.org/export/dump/">http://download.geonames.org/export/dump/</a></p> 
+ <p>Download it and put it in the “etc” directory, without unzipping it. Edit $MY_KARAF_HOME/etc/org.apache.unomi.geonames.cfg and set request.geonamesDatabase.forceImport to true, import should start right away. Otherwise, import should start at the next startup. Import runs in background, but can take about 15 minutes. At the end, you should have about 4 million entries in the geonames index.</p> 
+</div> 
+<div class="section"> 
+ <h2 id="REST_API_Security">REST API Security</h2> 
+ <p>The Context Server REST API is protected using JAAS authentication and using Basic or Digest HTTP auth. By default, the login/password for the REST API full administrative access is “karaf/karaf”.</p> 
+ <p>The generated package is also configured with a default SSL certificate. You can change it by following these steps :</p> 
+ <ol style="list-style-type: decimal"> 
+  <li> <p>Replace the existing keystore in $MY_KARAF_HOME/etc/keystore by your own certificate :</p> <p><a class="externalLink" href="http://wiki.eclipse.org/Jetty/Howto/Configure_SSL">http://wiki.eclipse.org/Jetty/Howto/Configure_SSL</a></p></li> 
+  <li> <p>Update the keystore and certificate password in $MY_KARAF_HOME/etc/custom.properties file :</p></li> 
+ </ol> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>    org.osgi.service.http.secure.enabled = true
+    org.ops4j.pax.web.ssl.keystore=${karaf.etc}/keystore
+    org.ops4j.pax.web.ssl.password=changeme
+    org.ops4j.pax.web.ssl.keypassword=changeme
+    org.osgi.service.http.port.secure=9443
+</pre> 
+  </div> 
+ </div> 
+ <p>You should now have SSL setup on Karaf with your certificate, and you can test it by trying to access it on port 9443.</p> 
+ <ol style="list-style-type: decimal"> 
+  <li> <p>Changing the default Karaf password can be done by modifying the etc/users.properties file</p></li> 
+  <li> <p>You will also need to change the user/password information in the org.apache.unomi.cluster.cfg file : </p></li> 
+ </ol> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>    cluster.group=default
+    cluster.jmxUsername=karaf
+    cluster.jmxPassword=karaf
+    cluster.jmxPort=1099
+</pre> 
+  </div> 
+ </div> 
+</div> 
+<div class="section"> 
+ <h2 id="Automatic_profile_merging">Automatic profile merging</h2> 
+ <p>The context server is capable of merging profiles based on a common property value. In order to use this, you must add the MergeProfileOnPropertyAction to a rule (such as a login rule for example), and configure it with the name of the property that will be used to identify the profiles to be merged. An example could be the “email” property, meaning that if two (or more) profiles are found to have the same value for the “email” property they will be merged by this action.</p> 
+ <p>Upon merge, the old profiles are marked with a “mergedWith” property that will be used on next profile access to delete the original profile and replace it with the merged profile (aka “master” profile). Once this is done, all cookie tracking will use the merged profile.</p> 
+ <p>To test, simply configure the action in the “login” or “facebookLogin” rules and set it up on the “email” property. Upon sending one of the events, all matching profiles will be merged.</p> 
+</div> 
+<div class="section"> 
+ <h2 id="Securing_a_production_environment">Securing a production environment</h2> 
+ <p>Before going live with a project, you should <i>absolutely</i> read the following section that will help you setup a proper secure environment for running your context server. </p> 
+ <p>Step 1: Install and configure a firewall </p> 
+ <p>You should setup a firewall around your cluster of context servers and/or Elasticsearch nodes. If you have an application-level firewall you should only allow the following connections open to the whole world : </p> 
+ <ul> 
+  <li><a class="externalLink" href="http://localhost:8181/context.js">http://localhost:8181/context.js</a></li> 
+  <li><a class="externalLink" href="http://localhost:8181/eventcollector">http://localhost:8181/eventcollector</a></li> 
+ </ul> 
+ <p>All other ports should not be accessible to the world.</p> 
+ <p>For your Context Server client applications (such as the Jahia CMS), you will need to make the following ports accessible : </p> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>8181 (Context Server HTTP port) 
+9443 (Context Server HTTPS port)
+</pre> 
+  </div> 
+ </div> 
+ <p>The context server actually requires HTTP Basic Auth for access to the Context Server administration REST API, so it is highly recommended that you design your client applications to use the HTTPS port for accessing the REST API.</p> 
+ <p>The user accounts to access the REST API are actually routed through Karaf’s JAAS support, which you may find the documentation for here : </p> 
+ <ul> 
+  <li><a class="externalLink" href="http://karaf.apache.org/manual/latest/users-guide/security.html">http://karaf.apache.org/manual/latest/users-guide/security.html</a></li> 
+ </ul> 
+ <p>The default username/password is </p> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>karaf/karaf
+</pre> 
+  </div> 
+ </div> 
+ <p>You should really change this default username/password as soon as possible. To do so, simply modify the following file : </p> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>$MY_KARAF_HOME/etc/users.properties
+</pre> 
+  </div> 
+ </div> 
+ <p>For your context servers, and for any standalone Elasticsearch nodes you will need to open the following ports for proper node-to-node communication : 9200 (Elasticsearch REST API), 9300 (Elasticsearch TCP transport)</p> 
+ <p>Of course any ports listed here are the default ports configured in each server, you may adjust them if needed.</p> 
+ <p>Step 2 : Follow industry recommended best practices for securing Elasticsearch</p> 
+ <p>You may find more valuable recommendations here : </p> 
+ <ul> 
+  <li><a class="externalLink" href="https://www.elastic.co/blog/found-elasticsearch-security">https://www.elastic.co/blog/found-elasticsearch-security</a></li> 
+  <li><a class="externalLink" href="https://www.elastic.co/blog/scripting-security">https://www.elastic.co/blog/scripting-security</a></li> 
+ </ul> 
+ <p>Step 4 : Setup a proxy in front of the context server</p> 
+ <p>As an alternative to an application-level firewall, you could also route all traffic to the context server through a proxy, and use it to filter any communication.</p> 
+</div> 
+<div class="section"> 
+ <h2 id="Integrating_with_an_Apache_HTTP_web_server">Integrating with an Apache HTTP web server</h2> 
+ <p>If you want to setup an Apache HTTP web server in from of Apache Unomi, here is an example configuration using mod_proxy.</p> 
+ <p>In your Unomi package directory, in /etc/org.apache.unomi.cluster.cfg for unomi.apache.org</p> 
+ <p>contextserver.publicAddress=https://unomi.apache.org/ contextserver.internalAddress=http://192.168.1.1:8181</p> 
+ <p>and you will also need to change the contextserver.domain in the /etc/org.apache.unomi.web.cfg file</p> 
+ <p>contextserver.domain=apache.org</p> 
+ <p>Main virtual host config:</p> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>&lt;VirtualHost *:80&gt;
+        Include /var/www/vhosts/unomi.apache.org/conf/common.conf
+&lt;/VirtualHost&gt;
+
+&lt;IfModule mod_ssl.c&gt;
+    &lt;VirtualHost *:443&gt;
+        Include /var/www/vhosts/unomi.apache.org/conf/common.conf
+
+        SSLEngine on
+
+        SSLCertificateFile    /var/www/vhosts/unomi.apache.org/conf/ssl/24d5b9691e96eafa.crt
+        SSLCertificateKeyFile /var/www/vhosts/unomi.apache.org/conf/ssl/apache.org.key
+        SSLCertificateChainFile /var/www/vhosts/unomi.apache.org/conf/ssl/gd_bundle-g2-g1.crt
+
+
+        &lt;FilesMatch &quot;\.(cgi|shtml|phtml|php)$&quot;&gt;
+                SSLOptions +StdEnvVars
+        &lt;/FilesMatch&gt;
+        &lt;Directory /usr/lib/cgi-bin&gt;
+                SSLOptions +StdEnvVars
+        &lt;/Directory&gt;
+        BrowserMatch &quot;MSIE [2-6]&quot; \
+                nokeepalive ssl-unclean-shutdown \
+                downgrade-1.0 force-response-1.0
+        BrowserMatch &quot;MSIE [17-9]&quot; ssl-unclean-shutdown
+
+    &lt;/VirtualHost&gt;
+&lt;/IfModule&gt;
+</pre> 
+  </div> 
+ </div> 
+ <p>common.conf:</p> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>ServerName unomi.apache.org
+ServerAdmin webmaster@apache.org
+
+DocumentRoot /var/www/vhosts/unomi.apache.org/html
+CustomLog /var/log/apache2/access-unomi.apache.org.log combined
+&lt;Directory /&gt;
+        Options FollowSymLinks
+        AllowOverride None
+&lt;/Directory&gt;
+&lt;Directory /var/www/vhosts/unomi.apache.org/html&gt;
+        Options FollowSymLinks MultiViews
+        AllowOverride None
+        Order allow,deny
+        allow from all
+&lt;/Directory&gt;
+&lt;Location /cxs&gt;
+    Order deny,allow
+    deny from all
+    allow from 88.198.26.2
+    allow from www.apache.org
+&lt;/Location&gt;
+
+RewriteEngine On
+RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
+RewriteRule .* - [F]
+ProxyPreserveHost On
+ProxyPass /server-status !
+ProxyPass /robots.txt !
+
+RewriteCond %{HTTP_USER_AGENT} Googlebot [OR]
+RewriteCond %{HTTP_USER_AGENT} msnbot [OR]
+RewriteCond %{HTTP_USER_AGENT} Slurp
+RewriteRule ^.* - [F,L]
+
+ProxyPass / http://localhost:8181/ connectiontimeout=20 timeout=300 ttl=120
+ProxyPassReverse / http://localhost:8181/
+</pre> 
+  </div> 
+ </div> 
+</div> 
+<div class="section"> 
+ <h2 id="Changing_the_default_tracking_location">Changing the default tracking location</h2> 
+ <p>When performing localhost requests to Apache Unomi, a default location will be used to insert values into the session to make the location-based personalization still work. You can find the default location settings in the file : </p> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>org.apache.unomi.plugins.request.cfg
+</pre> 
+  </div> 
+ </div> 
+ <p>that contains the following default settings:</p> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre># The following settings represent the default position that is used for localhost requests
+defaultSessionCountryCode=CH
+defaultSessionCountryName=Switzerland
+defaultSessionCity=Geneva
+defaultSessionAdminSubDiv1=2660645
+defaultSessionAdminSubDiv2=6458783
+defaultSessionIsp=Cablecom
+defaultLatitude=46.1884341
+defaultLongitude=6.1282508
+</pre> 
+  </div> 
+ </div> 
+ <p>You might want to change these for testing or for demonstration purposes.</p> 
+</div> 
+<div class="section"> 
+ <h2 id="Apache_Karaf_SSH_Console">Apache Karaf SSH Console</h2> 
+ <p>The Apache Karaf SSH console is available inside Apache Unomi, but the port has been changed from the default value of 8101 to 8102 to avoid conflicts with other Karaf-based products. So to connect to the SSH console you should use:</p> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>ssh -p 8102 karaf@localhost
+</pre> 
+  </div> 
+ </div> 
+ <p>or the user/password you have setup to protect the system if you have changed it.</p> 
+</div>
+			</div>
+		</div>
+		<div class="span4">
+			<div id="toc-sidebar">
+				<div class="well">
+					<ul class="nav nav-list">
+						<li class="nav-header">Table of Contents</li>
+		<li class="dropdown"><a href="#configuration" title="Configuration">Configuration <b class="caret"></b></a>
+			<ul class="nav nav-list">
+		<li><a href="#Changing_the_default_configuration" title="Changing the default configuration">Changing the default configuration</a>
+		<li><a href="#Secured_events_configuration" title="Secured events configuration">Secured events configuration</a>
+		<li><a href="#Installing_the_MaxMind_GeoIPLite2_IP_lookup_database" title="Installing the MaxMind GeoIPLite2 IP lookup database">Installing the MaxMind GeoIPLite2 IP lookup database</a>
+		<li><a href="#Installing_Geonames_database" title="Installing Geonames database">Installing Geonames database</a>
+		<li><a href="#REST_API_Security" title="REST API Security">REST API Security</a>
+		<li><a href="#Automatic_profile_merging" title="Automatic profile merging">Automatic profile merging</a>
+		<li><a href="#Securing_a_production_environment" title="Securing a production environment">Securing a production environment</a>
+		<li><a href="#Integrating_with_an_Apache_HTTP_web_server" title="Integrating with an Apache HTTP web server">Integrating with an Apache HTTP web server</a>
+		<li><a href="#Changing_the_default_tracking_location" title="Changing the default tracking location">Changing the default tracking location</a>
+		<li><a href="#Apache_Karaf_SSH_Console" title="Apache Karaf SSH Console">Apache Karaf SSH Console</a>
+				<li class="divider"></li>
+			</ul>
+		</li>
+					</ul>
+				</div>
+			</div>
+		</div>
+	</div>
+	</div>
+
+	</div><!-- /container -->
+
+	<!-- Footer
+	================================================== -->
+	<footer class="well">
+		<div class="container">
+			<div class="row">
+				<div class="span2 bottom-nav">
+					<ul class="nav nav-list">
+						<li class="nav-header">Download</li>
+						<li >
+							<a href="../../download.html" title="Packages">Packages</a>
+						</li>
+						<li >
+							<a href="../../license.html" title="License">License</a>
+						</li>
+						<li class="nav-header">Contribute</li>
+						<li >
+							<a href="../../mail-lists.html" title="Mailing lists">Mailing lists</a>
+						</li>
+						<li >
+							<a href="../../source-repository.html" title="Source">Source</a>
+						</li>
+						<li >
+							<a href="../../issue-tracking.html" title="Issues">Issues</a>
+						</li>
+					</ul>
+				</div>
+				<div class="span2 bottom-nav">
+					<ul class="nav nav-list">
+						<li class="nav-header">Documentation</li>
+						<li >
+							<a href="../../" title="Site Home">Site Home</a>
+						</li>
+						<li >
+							<a href="../../main.html" title="Main documentation">Main documentation</a>
+						</li>
+						<li >
+							<a href="../../usecases.html" title="More use cases">More use cases</a>
+						</li>
+						<li >
+							<a href="../../rest-api-doc/index.html" title="REST API documentation">REST API documentation</a>
+						</li>
+						<li >
+							<a href="../../unomi-api/apidocs/index.html" title="API Javadoc">API Javadoc</a>
+						</li>
+					</ul>
+				</div>
+				<div class="span2 bottom-nav">
+					<ul class="nav nav-list">
+						<li class="nav-header">Standard</li>
+						<li >
+							<a href="https://www.oasis-open.org/committees/cxs/" title="OASIS Context Server Technical Committee" class="externalLink">OASIS Context Server Technical Committee</a>
+						</li>
+						<li class="nav-header">Privacy</li>
+						<li >
+							<a href="../../privacy-policy.html" title="Site policy">Site policy</a>
+						</li>
+						<li class="nav-header">Community</li>
+						<li >
+							<a href="../../mail-lists.html" title="Mailing lists">Mailing lists</a>
+						</li>
+						<li >
+							<a href="../../team-list.html" title="Team">Team</a>
+						</li>
+						<li >
+							<a href="../../maturity-model-report.html" title="Maturity model report card">Maturity model report card</a>
+						</li>
+						<li >
+							<a href="http://www.apache.org" title="The Apache Software Foundation" class="externalLink">The Apache Software Foundation</a>
+						</li>
+						<li >
+							<a href="http://www.apache.org/foundation/sponsorship.html" title="Sponsorship" class="externalLink">Sponsorship</a>
+						</li>
+						<li >
+							<a href="http://www.apache.org/foundation/thanks.html" title="Thanks" class="externalLink">Thanks</a>
+						</li>
+					</ul>
+				</div>
+				<div class="span3 bottom-nav">
+					<ul class="nav nav-list">
+						<li class="nav-header">Project Documentation</li>
+						<li >
+							<a href="../../project-info.html" title="Project Information">Project Information <i class="icon-chevron-right"></i></a>
+						</li>
+					</ul>
+				</div>
+				<div class="span3 bottom-description">
+					<blockquote>Powered by Apache Karaf</blockquote>
+				</div>
+			</div>
+		</div>
+	</footer>
+
+	<div class="container subfooter">
+		<div class="row">
+			<div class="span12">
+				<p class="pull-right"><a href="#">Back to top</a></p>
+				<p class="copyright">Copyright &copy;2014-2017 <a href="http://www.apache.org">Apache Software Foundation</a>. All Rights Reserved.</p>
+				<p><a href="http://github.com/andriusvelykis/reflow-maven-skin" title="Reflow Maven skin">Reflow Maven skin</a> by <a href="http://andrius.velykis.lt" target="_blank" title="Andrius Velykis">Andrius Velykis</a>.</p>
+			</div>
+		</div>
+	</div>
+
+	<!-- Le javascript
+	================================================== -->
+	<!-- Placed at the end of the document so the pages load faster -->
+	<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
+
+	<script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
+	<script src="../..//js/lightbox.min.js"></script>
+	<script src="../..//js/reflow-scroll.js"></script>
+	<script src="http://yandex.st/highlightjs/7.5/highlight.min.js"></script>
+
+	<script src="../..//js/reflow-skin.js"></script>
+
+	</body>
+</html>
\ No newline at end of file

Added: incubator/unomi/website/versions/1.2/connectors.html
URL: http://svn.apache.org/viewvc/incubator/unomi/website/versions/1.2/connectors.html?rev=1810306&view=auto
==============================================================================
--- incubator/unomi/website/versions/1.2/connectors.html (added)
+++ incubator/unomi/website/versions/1.2/connectors.html Mon Oct  2 08:11:40 2017
@@ -0,0 +1,296 @@
+
+<!DOCTYPE html>
+<!--
+ Generated by Apache Maven Doxia at 2017-10-02
+ Rendered using Reflow Maven Skin 1.1.1 (http://andriusvelykis.github.io/reflow-maven-skin)
+-->
+<html  xml:lang="en" lang="en">
+
+	<head>
+		<meta charset="UTF-8" />
+		<title>Connectors | Apache Unomi</title>
+		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+		<meta name="description" content="" />
+		<meta http-equiv="content-language" content="en" />
+ 
+		<link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap.min.css" rel="stylesheet" />
+		<link href="../..//css/docs.css" rel="stylesheet" />
+		<link href="../..//css/reflow-skin.css" rel="stylesheet" />
+
+		<link href="http://yandex.st/highlightjs/7.5/styles/github.min.css" rel="stylesheet" />
+
+		<link href="../..//css/lightbox.css" rel="stylesheet" />
+
+		<link href="../..//css/site.css" rel="stylesheet" />
+		<link href="../..//css/print.css" rel="stylesheet" media="print" />
+
+		<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
+		<!--[if lt IE 9]>
+			<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
+		<![endif]-->
+
+
+
+		<!-- Google Analytics -->
+		<script type="text/javascript">
+
+			var _gaq = _gaq || [];
+			_gaq.push(['_setAccount', 'UA-70313240-1']);
+			_gaq.push(['_trackPageview']);
+
+			(function() {
+				var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+				ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+				var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+			})();
+
+		</script>
+		</head>
+
+	<body class="page-versions-12-connectors project-unomi-root" data-spy="scroll" data-offset="60" data-target="#toc-scroll-target">
+
+		<div class="navbar navbar-fixed-top">
+			<div class="navbar-inner">
+				<div class="container">
+					<a class="btn btn-navbar" data-toggle="collapse" data-target="#top-nav-collapse">
+						<span class="icon-bar"></span>
+						<span class="icon-bar"></span>
+						<span class="icon-bar"></span>
+					</a>
+					<a class="brand" href="../.."><img src="http://unomi.incubator.apache.org/images/unomi-86x20.png" /></a>
+					<div class="nav-collapse collapse" id="top-nav-collapse">
+						<ul class="nav pull-right">
+							<li class="dropdown">
+								<a href="#" class="dropdown-toggle" data-toggle="dropdown">Download <b class="caret"></b></a>
+								<ul class="dropdown-menu">
+									<li ><a href="../../download.html" title="Packages">Packages</a></li>
+									<li ><a href="../../license.html" title="License">License</a></li>
+								</ul>
+							</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="../../" title="Site Home">Site Home</a></li>
+									<li ><a href="../../main.html" title="Main documentation">Main documentation</a></li>
+									<li ><a href="../../usecases.html" title="More use cases">More use cases</a></li>
+									<li ><a href="../../rest-api-doc/index.html" title="REST API documentation">REST API documentation</a></li>
+									<li ><a href="../../unomi-api/apidocs/index.html" title="API Javadoc">API Javadoc</a></li>
+								</ul>
+							</li>
+							<li class="dropdown">
+								<a href="#" class="dropdown-toggle" data-toggle="dropdown">Standard <b class="caret"></b></a>
+								<ul class="dropdown-menu">
+									<li ><a href="https://www.oasis-open.org/committees/cxs/" title="OASIS Context Server Technical Committee" class="externalLink">OASIS Context Server Technical Committee</a></li>
+								</ul>
+							</li>
+							<li class="dropdown">
+								<a href="#" class="dropdown-toggle" data-toggle="dropdown">Privacy <b class="caret"></b></a>
+								<ul class="dropdown-menu">
+									<li ><a href="../../privacy-policy.html" title="Site policy">Site policy</a></li>
+								</ul>
+							</li>
+							<li class="dropdown">
+								<a href="#" class="dropdown-toggle" data-toggle="dropdown">Contribute <b class="caret"></b></a>
+								<ul class="dropdown-menu">
+									<li ><a href="../../mail-lists.html" title="Mailing lists">Mailing lists</a></li>
+									<li ><a href="../../source-repository.html" title="Source">Source</a></li>
+									<li ><a href="../../issue-tracking.html" title="Issues">Issues</a></li>
+								</ul>
+							</li>
+							<li class="dropdown">
+								<a href="#" class="dropdown-toggle" data-toggle="dropdown">Community <b class="caret"></b></a>
+								<ul class="dropdown-menu">
+									<li ><a href="../../mail-lists.html" title="Mailing lists">Mailing lists</a></li>
+									<li ><a href="../../team-list.html" title="Team">Team</a></li>
+									<li ><a href="../../maturity-model-report.html" title="Maturity model report card">Maturity model report card</a></li>
+									<li ><a href="http://www.apache.org" title="The Apache Software Foundation" class="externalLink">The Apache Software Foundation</a></li>
+									<li ><a href="http://www.apache.org/foundation/sponsorship.html" title="Sponsorship" class="externalLink">Sponsorship</a></li>
+									<li ><a href="http://www.apache.org/foundation/thanks.html" title="Thanks" class="externalLink">Thanks</a></li>
+								</ul>
+							</li>
+						</ul>
+					</div><!--/.nav-collapse -->
+				</div>
+			</div>
+		</div>
+
+	<div class="container">
+
+	<!-- Masthead
+	================================================== -->
+
+	<header>
+		<div>
+			<ul class="breadcrumb">
+				<li class="publishDate version-date">Last Published: 2017-10-02</li>
+			</ul>
+		</div>
+	</header>
+
+	<div class="main-body">
+	<div class="row">
+		<div class="span8">
+			<div class="body-content">
+<!-- ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License. --> 
+<div class="page-header">
+ <h1 id="connectors">Connectors</h1>
+</div> 
+<p>Apache Unomi provides the following connector:</p> 
+<ul> 
+ <li><a href="salesforce-connector.html">Salesforce CRM connector</a></li> 
+</ul> 
+<div class="section"> 
+ <h2 id="Call_for_contributors">Call for contributors</h2> 
+ <p>We are looking for help with the development of additional connectors. Any contribution (large or small) is more than welcome. Feel free to discuss this in our <a href="../../mail-lists.html">mailing list</a>.</p> 
+</div>
+			</div>
+		</div>
+		<div class="span4">
+			<div id="toc-sidebar">
+				<div class="well">
+					<ul class="nav nav-list">
+						<li class="nav-header">Table of Contents</li>
+		<li class="dropdown"><a href="#connectors" title="Connectors">Connectors <b class="caret"></b></a>
+			<ul class="nav nav-list">
+		<li><a href="#Call_for_contributors" title="Call for contributors">Call for contributors</a>
+				<li class="divider"></li>
+			</ul>
+		</li>
+					</ul>
+				</div>
+			</div>
+		</div>
+	</div>
+	</div>
+
+	</div><!-- /container -->
+
+	<!-- Footer
+	================================================== -->
+	<footer class="well">
+		<div class="container">
+			<div class="row">
+				<div class="span2 bottom-nav">
+					<ul class="nav nav-list">
+						<li class="nav-header">Download</li>
+						<li >
+							<a href="../../download.html" title="Packages">Packages</a>
+						</li>
+						<li >
+							<a href="../../license.html" title="License">License</a>
+						</li>
+						<li class="nav-header">Contribute</li>
+						<li >
+							<a href="../../mail-lists.html" title="Mailing lists">Mailing lists</a>
+						</li>
+						<li >
+							<a href="../../source-repository.html" title="Source">Source</a>
+						</li>
+						<li >
+							<a href="../../issue-tracking.html" title="Issues">Issues</a>
+						</li>
+					</ul>
+				</div>
+				<div class="span2 bottom-nav">
+					<ul class="nav nav-list">
+						<li class="nav-header">Documentation</li>
+						<li >
+							<a href="../../" title="Site Home">Site Home</a>
+						</li>
+						<li >
+							<a href="../../main.html" title="Main documentation">Main documentation</a>
+						</li>
+						<li >
+							<a href="../../usecases.html" title="More use cases">More use cases</a>
+						</li>
+						<li >
+							<a href="../../rest-api-doc/index.html" title="REST API documentation">REST API documentation</a>
+						</li>
+						<li >
+							<a href="../../unomi-api/apidocs/index.html" title="API Javadoc">API Javadoc</a>
+						</li>
+					</ul>
+				</div>
+				<div class="span2 bottom-nav">
+					<ul class="nav nav-list">
+						<li class="nav-header">Standard</li>
+						<li >
+							<a href="https://www.oasis-open.org/committees/cxs/" title="OASIS Context Server Technical Committee" class="externalLink">OASIS Context Server Technical Committee</a>
+						</li>
+						<li class="nav-header">Privacy</li>
+						<li >
+							<a href="../../privacy-policy.html" title="Site policy">Site policy</a>
+						</li>
+						<li class="nav-header">Community</li>
+						<li >
+							<a href="../../mail-lists.html" title="Mailing lists">Mailing lists</a>
+						</li>
+						<li >
+							<a href="../../team-list.html" title="Team">Team</a>
+						</li>
+						<li >
+							<a href="../../maturity-model-report.html" title="Maturity model report card">Maturity model report card</a>
+						</li>
+						<li >
+							<a href="http://www.apache.org" title="The Apache Software Foundation" class="externalLink">The Apache Software Foundation</a>
+						</li>
+						<li >
+							<a href="http://www.apache.org/foundation/sponsorship.html" title="Sponsorship" class="externalLink">Sponsorship</a>
+						</li>
+						<li >
+							<a href="http://www.apache.org/foundation/thanks.html" title="Thanks" class="externalLink">Thanks</a>
+						</li>
+					</ul>
+				</div>
+				<div class="span3 bottom-nav">
+					<ul class="nav nav-list">
+						<li class="nav-header">Project Documentation</li>
+						<li >
+							<a href="../../project-info.html" title="Project Information">Project Information <i class="icon-chevron-right"></i></a>
+						</li>
+					</ul>
+				</div>
+				<div class="span3 bottom-description">
+					<blockquote>Powered by Apache Karaf</blockquote>
+				</div>
+			</div>
+		</div>
+	</footer>
+
+	<div class="container subfooter">
+		<div class="row">
+			<div class="span12">
+				<p class="pull-right"><a href="#">Back to top</a></p>
+				<p class="copyright">Copyright &copy;2014-2017 <a href="http://www.apache.org">Apache Software Foundation</a>. All Rights Reserved.</p>
+				<p><a href="http://github.com/andriusvelykis/reflow-maven-skin" title="Reflow Maven skin">Reflow Maven skin</a> by <a href="http://andrius.velykis.lt" target="_blank" title="Andrius Velykis">Andrius Velykis</a>.</p>
+			</div>
+		</div>
+	</div>
+
+	<!-- Le javascript
+	================================================== -->
+	<!-- Placed at the end of the document so the pages load faster -->
+	<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
+
+	<script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
+	<script src="../..//js/lightbox.min.js"></script>
+	<script src="../..//js/reflow-scroll.js"></script>
+	<script src="http://yandex.st/highlightjs/7.5/highlight.min.js"></script>
+
+	<script src="../..//js/reflow-skin.js"></script>
+
+	</body>
+</html>
\ No newline at end of file

Added: incubator/unomi/website/versions/1.2/custom-extensions.html
URL: http://svn.apache.org/viewvc/incubator/unomi/website/versions/1.2/custom-extensions.html?rev=1810306&view=auto
==============================================================================
--- incubator/unomi/website/versions/1.2/custom-extensions.html (added)
+++ incubator/unomi/website/versions/1.2/custom-extensions.html Mon Oct  2 08:11:40 2017
@@ -0,0 +1,671 @@
+
+<!DOCTYPE html>
+<!--
+ Generated by Apache Maven Doxia at 2017-10-02
+ Rendered using Reflow Maven Skin 1.1.1 (http://andriusvelykis.github.io/reflow-maven-skin)
+-->
+<html  xml:lang="en" lang="en">
+
+	<head>
+		<meta charset="UTF-8" />
+		<title>Custom extensions | Apache Unomi</title>
+		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+		<meta name="description" content="" />
+		<meta http-equiv="content-language" content="en" />
+ 
+		<link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap.min.css" rel="stylesheet" />
+		<link href="../..//css/docs.css" rel="stylesheet" />
+		<link href="../..//css/reflow-skin.css" rel="stylesheet" />
+
+		<link href="http://yandex.st/highlightjs/7.5/styles/github.min.css" rel="stylesheet" />
+
+		<link href="../..//css/lightbox.css" rel="stylesheet" />
+
+		<link href="../..//css/site.css" rel="stylesheet" />
+		<link href="../..//css/print.css" rel="stylesheet" media="print" />
+
+		<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
+		<!--[if lt IE 9]>
+			<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
+		<![endif]-->
+
+
+
+		<!-- Google Analytics -->
+		<script type="text/javascript">
+
+			var _gaq = _gaq || [];
+			_gaq.push(['_setAccount', 'UA-70313240-1']);
+			_gaq.push(['_trackPageview']);
+
+			(function() {
+				var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+				ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+				var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+			})();
+
+		</script>
+		</head>
+
+	<body class="page-versions-12-custom-extensions project-unomi-root" data-spy="scroll" data-offset="60" data-target="#toc-scroll-target">
+
+		<div class="navbar navbar-fixed-top">
+			<div class="navbar-inner">
+				<div class="container">
+					<a class="btn btn-navbar" data-toggle="collapse" data-target="#top-nav-collapse">
+						<span class="icon-bar"></span>
+						<span class="icon-bar"></span>
+						<span class="icon-bar"></span>
+					</a>
+					<a class="brand" href="../.."><img src="http://unomi.incubator.apache.org/images/unomi-86x20.png" /></a>
+					<div class="nav-collapse collapse" id="top-nav-collapse">
+						<ul class="nav pull-right">
+							<li class="dropdown">
+								<a href="#" class="dropdown-toggle" data-toggle="dropdown">Download <b class="caret"></b></a>
+								<ul class="dropdown-menu">
+									<li ><a href="../../download.html" title="Packages">Packages</a></li>
+									<li ><a href="../../license.html" title="License">License</a></li>
+								</ul>
+							</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="../../" title="Site Home">Site Home</a></li>
+									<li ><a href="../../main.html" title="Main documentation">Main documentation</a></li>
+									<li ><a href="../../usecases.html" title="More use cases">More use cases</a></li>
+									<li ><a href="../../rest-api-doc/index.html" title="REST API documentation">REST API documentation</a></li>
+									<li ><a href="../../unomi-api/apidocs/index.html" title="API Javadoc">API Javadoc</a></li>
+								</ul>
+							</li>
+							<li class="dropdown">
+								<a href="#" class="dropdown-toggle" data-toggle="dropdown">Standard <b class="caret"></b></a>
+								<ul class="dropdown-menu">
+									<li ><a href="https://www.oasis-open.org/committees/cxs/" title="OASIS Context Server Technical Committee" class="externalLink">OASIS Context Server Technical Committee</a></li>
+								</ul>
+							</li>
+							<li class="dropdown">
+								<a href="#" class="dropdown-toggle" data-toggle="dropdown">Privacy <b class="caret"></b></a>
+								<ul class="dropdown-menu">
+									<li ><a href="../../privacy-policy.html" title="Site policy">Site policy</a></li>
+								</ul>
+							</li>
+							<li class="dropdown">
+								<a href="#" class="dropdown-toggle" data-toggle="dropdown">Contribute <b class="caret"></b></a>
+								<ul class="dropdown-menu">
+									<li ><a href="../../mail-lists.html" title="Mailing lists">Mailing lists</a></li>
+									<li ><a href="../../source-repository.html" title="Source">Source</a></li>
+									<li ><a href="../../issue-tracking.html" title="Issues">Issues</a></li>
+								</ul>
+							</li>
+							<li class="dropdown">
+								<a href="#" class="dropdown-toggle" data-toggle="dropdown">Community <b class="caret"></b></a>
+								<ul class="dropdown-menu">
+									<li ><a href="../../mail-lists.html" title="Mailing lists">Mailing lists</a></li>
+									<li ><a href="../../team-list.html" title="Team">Team</a></li>
+									<li ><a href="../../maturity-model-report.html" title="Maturity model report card">Maturity model report card</a></li>
+									<li ><a href="http://www.apache.org" title="The Apache Software Foundation" class="externalLink">The Apache Software Foundation</a></li>
+									<li ><a href="http://www.apache.org/foundation/sponsorship.html" title="Sponsorship" class="externalLink">Sponsorship</a></li>
+									<li ><a href="http://www.apache.org/foundation/thanks.html" title="Thanks" class="externalLink">Thanks</a></li>
+								</ul>
+							</li>
+						</ul>
+					</div><!--/.nav-collapse -->
+				</div>
+			</div>
+		</div>
+
+	<div class="container">
+
+	<!-- Masthead
+	================================================== -->
+
+	<header>
+		<div>
+			<ul class="breadcrumb">
+				<li class="publishDate version-date">Last Published: 2017-10-02</li>
+			</ul>
+		</div>
+	</header>
+
+	<div class="main-body">
+	<div class="row">
+		<div class="span8">
+			<div class="body-content">
+<!-- ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License. --> 
+<div class="page-header">
+ <h1 id="custom_extensions">Custom extensions</h1>
+</div> 
+<p>Apache Unomi is a pluggeable server that may be extended in many ways. This document assumes you are familiar with the <a href="concepts.html">Apache Unomi concepts</a> . This document is mostly a reference document on the different things that may be used inside an extension. If you are looking for complete samples, please see the <a href="samples.html">samples page</a>.</p> 
+<div class="section"> 
+ <h2 id="Creating_an_extension">Creating an extension</h2> 
+ <p>An extension is simply a Maven project, with a Maven pom that looks like this:</p> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>&lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&quot;&gt;
+    &lt;parent&gt;
+        &lt;groupId&gt;org.apache.unomi&lt;/groupId&gt;
+        &lt;artifactId&gt;unomi-extensions&lt;/artifactId&gt;
+        &lt;version&gt;1.2.0-incubating-SNAPSHOT&lt;/version&gt;
+    &lt;/parent&gt;
+
+    &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
+
+    &lt;artifactId&gt;unomi-extension-example&lt;/artifactId&gt;
+    &lt;name&gt;Apache Unomi :: Extensions :: Example&lt;/name&gt;
+    &lt;description&gt;Service implementation for the Apache Unomi Context Server extension that integrates with the Geonames database&lt;/description&gt;
+    &lt;version&gt;1.2.0-incubating-SNAPSHOT&lt;/version&gt;
+    &lt;packaging&gt;bundle&lt;/packaging&gt;
+
+    &lt;dependencies&gt;
+        &lt;!-- This dependency is not required but generally used in extensions --&gt;
+        &lt;dependency&gt;
+            &lt;groupId&gt;org.apache.unomi&lt;/groupId&gt;
+            &lt;artifactId&gt;unomi-api&lt;/artifactId&gt;
+            &lt;version&gt;1.2.0-incubating-SNAPSHOT&lt;/version&gt;
+            &lt;scope&gt;provided&lt;/scope&gt;
+        &lt;/dependency&gt;    
+    &lt;/dependencies&gt;
+
+    &lt;build&gt;
+        &lt;plugins&gt;
+            &lt;plugin&gt;
+                &lt;groupId&gt;org.apache.felix&lt;/groupId&gt;
+                &lt;artifactId&gt;maven-bundle-plugin&lt;/artifactId&gt;
+                &lt;extensions&gt;true&lt;/extensions&gt;
+                &lt;configuration&gt;
+                    &lt;instructions&gt;
+                        &lt;Embed-Dependency&gt;*;scope=compile|runtime&lt;/Embed-Dependency&gt;
+                        &lt;Import-Package&gt;
+                            sun.misc;resolution:=optional,
+                            *
+                        &lt;/Import-Package&gt;
+                    &lt;/instructions&gt;
+                &lt;/configuration&gt;
+            &lt;/plugin&gt;    
+        &lt;/plugins&gt;
+    &lt;/build&gt;
+&lt;/project&gt;
+</pre> 
+  </div> 
+ </div> 
+ <p>An extension may contain many different kinds of Apache Unomi objects, as well as custom OSGi services or anything that is needed to build your application.</p> 
+</div> 
+<div class="section"> 
+ <h2 id="Predefined_segments">Predefined segments</h2> 
+ <p>You may provide pre-defined segments by simply adding a JSON file in the src/main/resources/META-INF/cxs/segments directory of your Maven project. Here is an example of a pre-defined segment:</p> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>{
+  &quot;metadata&quot;: {
+    &quot;id&quot;: &quot;leads&quot;,
+    &quot;name&quot;: &quot;Leads&quot;,
+    &quot;scope&quot;: &quot;systemscope&quot;,
+    &quot;description&quot;: &quot;You can customize the list below by editing the leads segment.&quot;,
+    &quot;readOnly&quot;:true
+  },
+  &quot;condition&quot;: {
+    &quot;parameterValues&quot;: {
+      &quot;subConditions&quot;: [
+        {
+          &quot;parameterValues&quot;: {
+            &quot;propertyName&quot;: &quot;properties.leadAssignedTo&quot;,
+            &quot;comparisonOperator&quot;: &quot;exists&quot;
+          },
+          &quot;type&quot;: &quot;profilePropertyCondition&quot;
+        }
+      ],
+      &quot;operator&quot; : &quot;and&quot;
+    },
+    &quot;type&quot;: &quot;booleanCondition&quot;
+  }
+}
+</pre> 
+  </div> 
+ </div> 
+ <p>Basically this segment uses a condition to test if the profile has a property <tt>leadAssignedTo</tt> that exists. All profiles that match this condition will be part of the pre-defined segment.</p> 
+</div> 
+<div class="section"> 
+ <h2 id="Predefined_rules">Predefined rules</h2> 
+ <p>You may provide pre-defined rules by simply adding a JSON file in the src/main/resources/META-INF/cxs/rules directory of your Maven project. Here is an example of a pre-defined rule:</p> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>{
+    &quot;metadata&quot; : {
+        &quot;id&quot;: &quot;evaluateProfileSegments&quot;,
+        &quot;name&quot;: &quot;Evaluate segments&quot;,
+        &quot;description&quot; : &quot;Evaluate segments when a profile is modified&quot;,
+        &quot;readOnly&quot;:true
+    },
+
+    &quot;condition&quot; : {
+        &quot;type&quot;: &quot;profileUpdatedEventCondition&quot;,
+        &quot;parameterValues&quot;: {
+        }
+    },
+
+    &quot;actions&quot; : [
+        {
+            &quot;type&quot;: &quot;evaluateProfileSegmentsAction&quot;,
+            &quot;parameterValues&quot;: {
+            }
+        }
+    ]
+
+}
+</pre> 
+  </div> 
+ </div> 
+ <p>In this example we provide a rule that will execute when a predefined composed condition of type “profileUpdatedEventCondition” is received. See below to see how predefined composed conditions are declared. Once the condition is matched, the actions will be executed in sequence. In this example there is only a single action of type “evaluateProfileSegmentsAction” that is defined so it will be executed by Apache Unomi’s rule engine. You can also see below how custom actions may be defined. </p> 
+</div> 
+<div class="section"> 
+ <h2 id="Predefined_properties">Predefined properties</h2> 
+ <p>By default Apache Unomi comes with a set of pre-defined properties, but in many cases it is useful to add additional predefined property definitions. You can create property definitions for session or profile properties by creating them in different directories.</p> 
+ <p>For session properties you must create a JSON file in the following directory in your Maven project:</p> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>src/main/resources/META-INF/cxs/properties/sessions
+</pre> 
+  </div> 
+ </div> 
+ <p>For profile properties you must create the JSON file inside the directory in your Maven project:</p> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>src/main/resources/META-INF/cxs/properties/profiles
+</pre> 
+  </div> 
+ </div> 
+ <p>Here is an example of a property definition JSON file</p> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>{
+    &quot;metadata&quot;: {     &quot;id&quot;: &quot;city&quot;, &quot;name&quot;: &quot;City&quot;   },
+    &quot;type&quot;: &quot;string&quot;,
+    &quot;tags&quot;: [&quot;contactProfileProperties&quot;],
+    &quot;defaultValue&quot;: &quot;&quot;,
+    &quot;automaticMappingsFrom&quot;: [ ],
+    &quot;rank&quot;: &quot;304.0&quot;
+}
+</pre> 
+  </div> 
+ </div> 
+</div> 
+<div class="section"> 
+ <h2 id="Predefined_child_conditions">Predefined child conditions</h2> 
+ <p>You can define new predefined conditions that are actually conditions inheriting from a parent condition and setting pre-defined parameter values. You can do this by creating a JSON file in: </p> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>src/main/resources/META-INF/cxs/conditions
+</pre> 
+  </div> 
+ </div> 
+ <p>Here is an example of a JSON file that defines a profileUpdateEventCondition that inherits from a parent condition of type eventTypeCondition. </p> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>{
+  &quot;metadata&quot;: {
+    &quot;id&quot;: &quot;profileUpdatedEventCondition&quot;,
+    &quot;name&quot;: &quot;profileUpdatedEventCondition&quot;,
+    &quot;description&quot;: &quot;&quot;,
+    &quot;tags&quot;: [
+      &quot;event&quot;,
+      &quot;eventCondition&quot;
+    ],
+    &quot;readOnly&quot;: true
+  },
+  &quot;parentCondition&quot;: {
+    &quot;type&quot;: &quot;eventTypeCondition&quot;,
+    &quot;parameterValues&quot;: {
+      &quot;eventTypeId&quot;: &quot;profileUpdated&quot;
+    }
+  },
+
+  &quot;parameters&quot;: [
+  ]
+}
+</pre> 
+  </div> 
+ </div> 
+</div> 
+<div class="section"> 
+ <h2 id="Predefined_personas">Predefined personas</h2> 
+ <p>Personas may also be pre-defined by creating JSON files in the following directory:</p> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>src/main/resources/META-INF/cxs/personas
+</pre> 
+  </div> 
+ </div> 
+ <p>Here is an example of a persona definition JSON file: </p> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>{
+    &quot;persona&quot;: {
+        &quot;itemId&quot;: &quot;usVisitor&quot;,
+        &quot;properties&quot;: {
+            &quot;description&quot;: &quot;Represents a visitor browsing from inside the continental US&quot;,
+            &quot;firstName&quot;: &quot;U.S.&quot;,
+            &quot;lastName&quot;: &quot;Visitor&quot;
+        },
+        &quot;segments&quot;: []
+    },
+    &quot;sessions&quot;: [
+        {
+            &quot;itemId&quot;: &quot;aa3b04bd-8f4d-4a07-8e96-d33ffa04d3d9&quot;,
+            &quot;profileId&quot;: &quot;usVisitor&quot;,
+            &quot;properties&quot;: {
+                &quot;operatingSystemName&quot;: &quot;OS X 10.9 Mavericks&quot;,
+                &quot;sessionCountryName&quot;: &quot;United States&quot;,
+                &quot;location&quot;: {
+                    &quot;lat&quot;:37.422,
+                    &quot;lon&quot;:-122.084058
+                },
+                &quot;userAgentVersion&quot;: &quot;37.0.2062.120&quot;,
+                &quot;sessionCountryCode&quot;: &quot;US&quot;,
+                &quot;deviceCategory&quot;: &quot;Personal computer&quot;,
+                &quot;operatingSystemFamily&quot;: &quot;OS X&quot;,
+                &quot;userAgentName&quot;: &quot;Chrome&quot;,
+                &quot;sessionCity&quot;: &quot;Mountain View&quot;,
+                &quot;remoteHost&quot;: &quot;www.google.com&quot;,
+                &quot;remoteAddr&quot;: &quot;66.249.66.1&quot;
+            },
+            &quot;timeStamp&quot;: &quot;2014-09-18T11:40:54Z&quot;,
+            &quot;lastEventDate&quot;: &quot;2014-09-18T11:40:59Z&quot;,
+            &quot;duration&quot;: 4790
+        }
+    ]
+}
+</pre> 
+  </div> 
+ </div> 
+ <p>You can see that it’s also possible to define sessions for personas.</p> 
+</div> 
+<div class="section"> 
+ <h2 id="Custom_actions">Custom actions</h2> 
+ <p>Custom actions are a powerful way to integrate with external systems by being able to define custom logic that will be executed by an Apache Unomi rule. An action is defined by a JSON file created in the following directory:</p> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>src/main/resources/META-INF/cxs/actions
+</pre> 
+  </div> 
+ </div> 
+ <p>Here is an example of a JSON action definition:</p> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>{
+  &quot;metadata&quot;: {
+    &quot;id&quot;: &quot;addToListsAction&quot;,
+    &quot;name&quot;: &quot;addToListsAction&quot;,
+    &quot;description&quot;: &quot;&quot;,
+    &quot;tags&quot;: [
+      &quot;demographic&quot;,
+      &quot;hidden.availableToEndUser&quot;
+    ],
+    &quot;readOnly&quot;: true
+  },
+  &quot;actionExecutor&quot;: &quot;addToLists&quot;,
+  &quot;parameters&quot;: [
+    {
+      &quot;id&quot;: &quot;listIdentifiers&quot;,
+      &quot;type&quot;: &quot;string&quot;,
+      &quot;multivalued&quot;: true
+    }
+  ]
+}    
+</pre> 
+  </div> 
+ </div> 
+ <p>The <tt>actionExecutor</tt> identifier refers to a service property that is defined in the OSGi Blueprint service registration. Note that any OSGi service registration may be used, but in these examples we use OSGi Blueprint. The definition for the above JSON file will be found in a file called <tt>src/main/resources/OSGI-INF/blueprint/blueprint.xml</tt> with the following content:</p> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
+&lt;blueprint xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns=&quot;http://www.osgi.org/xmlns/blueprint/v1.0.0&quot;
+           xsi:schemaLocation=&quot;http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd&quot;&gt;
+
+    &lt;reference id=&quot;profileService&quot; interface=&quot;org.apache.unomi.api.services.ProfileService&quot;/&gt;
+    &lt;reference id=&quot;eventService&quot; interface=&quot;org.apache.unomi.api.services.EventService&quot;/&gt;
+
+    &lt;!-- Action executors --&gt;
+
+    &lt;service auto-export=&quot;interfaces&quot;&gt;
+        &lt;service-properties&gt;
+            &lt;entry key=&quot;actionExecutorId&quot; value=&quot;addToLists&quot;/&gt;
+        &lt;/service-properties&gt;
+        &lt;bean class=&quot;org.apache.unomi.lists.actions.AddToListsAction&quot;&gt;
+            &lt;property name=&quot;profileService&quot; ref=&quot;profileService&quot;/&gt;
+            &lt;property name=&quot;eventService&quot; ref=&quot;eventService&quot;/&gt;
+        &lt;/bean&gt;
+    &lt;/service&gt;
+
+&lt;/blueprint&gt;
+</pre> 
+  </div> 
+ </div> 
+ <p>You can note here the <tt>actionExecutorId</tt> that corresponds to the <tt>actionExecutor</tt> in the JSON file.</p> 
+ <p>The implementation of the action is available here : <a class="externalLink" href="https://github.com/apache/incubator-unomi/blob/master/extensions/lists-extension/actions/src/main/java/org/apache/unomi/lists/actions/AddToListsAction.java">org.apache.unomi.lists.actions.AddToListsAction</a> </p> 
+</div> 
+<div class="section"> 
+ <h2 id="Custom_conditions">Custom conditions</h2> 
+ <p>Custom conditions are different from predefined child conditions because they implement their logic using Java classes. They are also declared by adding a JSON file into the conditions directory:</p> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>src/main/resources/META-INF/cxs/conditions
+</pre> 
+  </div> 
+ </div> 
+ <p>Here is an example of JSON custom condition definition:</p> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>{
+  &quot;metadata&quot;: {
+    &quot;id&quot;: &quot;matchAllCondition&quot;,
+    &quot;name&quot;: &quot;matchAllCondition&quot;,
+    &quot;description&quot;: &quot;&quot;,
+    &quot;tags&quot;: [
+      &quot;logical&quot;,
+      &quot;profileCondition&quot;,
+      &quot;eventCondition&quot;,
+      &quot;sessionCondition&quot;,
+      &quot;sourceEventCondition&quot;
+    ],
+    &quot;readOnly&quot;: true
+  },
+  &quot;conditionEvaluator&quot;: &quot;matchAllConditionEvaluator&quot;,
+  &quot;queryBuilder&quot;: &quot;matchAllConditionESQueryBuilder&quot;,
+
+  &quot;parameters&quot;: [
+  ]
+}
+</pre> 
+  </div> 
+ </div> 
+ <p>Note the <tt>conditionEvaluator</tt> and the <tt>queryBuilder</tt> values. These reference OSGi service properties that are declared in an OSGi Blueprint configuration file (other service definitions may also be used such as Declarative Services or even Java registered services). Here is an example of an OSGi Blueprint definition corresponding to the above JSON condition definition file.</p> 
+ <div class="source"> 
+  <div class="source"> 
+   <pre>src/main/resources/OSGI-INF/blueprint/blueprint.xml
+
+&lt;blueprint xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns=&quot;http://www.osgi.org/xmlns/blueprint/v1.0.0&quot;
+           xsi:schemaLocation=&quot;http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd&quot;&gt;
+
+    &lt;service
+            interface=&quot;org.apache.unomi.persistence.elasticsearch.conditions.ConditionESQueryBuilder&quot;&gt;
+        &lt;service-properties&gt;
+            &lt;entry key=&quot;queryBuilderId&quot; value=&quot;matchAllConditionESQueryBuilder&quot;/&gt;
+        &lt;/service-properties&gt;
+        &lt;bean class=&quot;org.apache.unomi.plugins.baseplugin.conditions.MatchAllConditionESQueryBuilder&quot;/&gt;
+    &lt;/service&gt;
+
+    &lt;service interface=&quot;org.apache.unomi.persistence.elasticsearch.conditions.ConditionEvaluator&quot;&gt;
+        &lt;service-properties&gt;
+            &lt;entry key=&quot;conditionEvaluatorId&quot; value=&quot;matchAllConditionEvaluator&quot;/&gt;
+        &lt;/service-properties&gt;
+        &lt;bean class=&quot;org.apache.unomi.plugins.baseplugin.conditions.MatchAllConditionEvaluator&quot;/&gt;
+    &lt;/service&gt;
+
+&lt;/blueprint&gt;
+</pre> 
+  </div> 
+ </div> 
+ <p>You can find the implementation of the two classes here : </p> 
+ <ul> 
+  <li><a class="externalLink" href="https://github.com/apache/incubator-unomi/blob/master/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/MatchAllConditionESQueryBuilder.java">org.apache.unomi.plugins.baseplugin.conditions.MatchAllConditionESQueryBuilder</a></li> 
+  <li><a class="externalLink" href="https://github.com/apache/incubator-unomi/blob/master/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/MatchAllConditionEvaluator.java">org.apache.unomi.plugins.baseplugin.conditions.MatchAllConditionEvaluator</a></li> 
+ </ul> 
+</div>
+			</div>
+		</div>
+		<div class="span4">
+			<div id="toc-sidebar">
+				<div class="well">
+					<ul class="nav nav-list">
+						<li class="nav-header">Table of Contents</li>
+		<li class="dropdown"><a href="#custom_extensions" title="Custom extensions">Custom extensions <b class="caret"></b></a>
+			<ul class="nav nav-list">
+		<li><a href="#Creating_an_extension" title="Creating an extension">Creating an extension</a>
+		<li><a href="#Predefined_segments" title="Predefined segments">Predefined segments</a>
+		<li><a href="#Predefined_rules" title="Predefined rules">Predefined rules</a>
+		<li><a href="#Predefined_properties" title="Predefined properties">Predefined properties</a>
+		<li><a href="#Predefined_child_conditions" title="Predefined child conditions">Predefined child conditions</a>
+		<li><a href="#Predefined_personas" title="Predefined personas">Predefined personas</a>
+		<li><a href="#Custom_actions" title="Custom actions">Custom actions</a>
+		<li><a href="#Custom_conditions" title="Custom conditions">Custom conditions</a>
+				<li class="divider"></li>
+			</ul>
+		</li>
+					</ul>
+				</div>
+			</div>
+		</div>
+	</div>
+	</div>
+
+	</div><!-- /container -->
+
+	<!-- Footer
+	================================================== -->
+	<footer class="well">
+		<div class="container">
+			<div class="row">
+				<div class="span2 bottom-nav">
+					<ul class="nav nav-list">
+						<li class="nav-header">Download</li>
+						<li >
+							<a href="../../download.html" title="Packages">Packages</a>
+						</li>
+						<li >
+							<a href="../../license.html" title="License">License</a>
+						</li>
+						<li class="nav-header">Contribute</li>
+						<li >
+							<a href="../../mail-lists.html" title="Mailing lists">Mailing lists</a>
+						</li>
+						<li >
+							<a href="../../source-repository.html" title="Source">Source</a>
+						</li>
+						<li >
+							<a href="../../issue-tracking.html" title="Issues">Issues</a>
+						</li>
+					</ul>
+				</div>
+				<div class="span2 bottom-nav">
+					<ul class="nav nav-list">
+						<li class="nav-header">Documentation</li>
+						<li >
+							<a href="../../" title="Site Home">Site Home</a>
+						</li>
+						<li >
+							<a href="../../main.html" title="Main documentation">Main documentation</a>
+						</li>
+						<li >
+							<a href="../../usecases.html" title="More use cases">More use cases</a>
+						</li>
+						<li >
+							<a href="../../rest-api-doc/index.html" title="REST API documentation">REST API documentation</a>
+						</li>
+						<li >
+							<a href="../../unomi-api/apidocs/index.html" title="API Javadoc">API Javadoc</a>
+						</li>
+					</ul>
+				</div>
+				<div class="span2 bottom-nav">
+					<ul class="nav nav-list">
+						<li class="nav-header">Standard</li>
+						<li >
+							<a href="https://www.oasis-open.org/committees/cxs/" title="OASIS Context Server Technical Committee" class="externalLink">OASIS Context Server Technical Committee</a>
+						</li>
+						<li class="nav-header">Privacy</li>
+						<li >
+							<a href="../../privacy-policy.html" title="Site policy">Site policy</a>
+						</li>
+						<li class="nav-header">Community</li>
+						<li >
+							<a href="../../mail-lists.html" title="Mailing lists">Mailing lists</a>
+						</li>
+						<li >
+							<a href="../../team-list.html" title="Team">Team</a>
+						</li>
+						<li >
+							<a href="../../maturity-model-report.html" title="Maturity model report card">Maturity model report card</a>
+						</li>
+						<li >
+							<a href="http://www.apache.org" title="The Apache Software Foundation" class="externalLink">The Apache Software Foundation</a>
+						</li>
+						<li >
+							<a href="http://www.apache.org/foundation/sponsorship.html" title="Sponsorship" class="externalLink">Sponsorship</a>
+						</li>
+						<li >
+							<a href="http://www.apache.org/foundation/thanks.html" title="Thanks" class="externalLink">Thanks</a>
+						</li>
+					</ul>
+				</div>
+				<div class="span3 bottom-nav">
+					<ul class="nav nav-list">
+						<li class="nav-header">Project Documentation</li>
+						<li >
+							<a href="../../project-info.html" title="Project Information">Project Information <i class="icon-chevron-right"></i></a>
+						</li>
+					</ul>
+				</div>
+				<div class="span3 bottom-description">
+					<blockquote>Powered by Apache Karaf</blockquote>
+				</div>
+			</div>
+		</div>
+	</footer>
+
+	<div class="container subfooter">
+		<div class="row">
+			<div class="span12">
+				<p class="pull-right"><a href="#">Back to top</a></p>
+				<p class="copyright">Copyright &copy;2014-2017 <a href="http://www.apache.org">Apache Software Foundation</a>. All Rights Reserved.</p>
+				<p><a href="http://github.com/andriusvelykis/reflow-maven-skin" title="Reflow Maven skin">Reflow Maven skin</a> by <a href="http://andrius.velykis.lt" target="_blank" title="Andrius Velykis">Andrius Velykis</a>.</p>
+			</div>
+		</div>
+	</div>
+
+	<!-- Le javascript
+	================================================== -->
+	<!-- Placed at the end of the document so the pages load faster -->
+	<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
+
+	<script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
+	<script src="../..//js/lightbox.min.js"></script>
+	<script src="../..//js/reflow-scroll.js"></script>
+	<script src="http://yandex.st/highlightjs/7.5/highlight.min.js"></script>
+
+	<script src="../..//js/reflow-skin.js"></script>
+
+	</body>
+</html>
\ No newline at end of file