<!DOCTYPE html>
<html lang="en">
  <head>

    <meta charset="UTF-8">
      <title>Multipoint Recommendations</title>
    <meta name="description" content="Apache TomEE">
    <meta name="author" content="Apache TomEE">
    <meta name="google-translate-customization" content="f36a520c08f4c9-0a04e86a9c075ce9-g265f3196f697cf8f-10">
    <meta http-equiv="Pragma" content="no-cache">
    <meta http-equiv="Expires" content="0">
    <meta http-equiv="Cache-Control" content="no-store, no-cache, must-revalidate, max-age=0">

    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
    <!--[if lt IE 9]>
      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->

    <!-- Le styles -->
    <link href="./resources/css/bootstrap.css" rel="stylesheet">
    <link href="./resources/css/prettify.css" rel="stylesheet">
    <!--link href="./resources/css/bootstrap-mods.css" rel="stylesheet"-->
    <link href="./resources/css/main.css" rel="stylesheet">
    <link href="./resources/font-awesome-4.6.3/css/font-awesome.min.css" rel="stylesheet">

    <script type="text/javascript">
        var t = encodeURIComponent(document.title.replace(/^\s+|\s+$/g,""));
        var u = encodeURIComponent(""+document.URL);
    
      function fbshare () {
          window.open(
                  "http://www.facebook.com/sharer/sharer.php?u="+u,
                  'Share on Facebook',
                  'width=640,height=426');
      };
      function gpshare () {
          window.open(
                  "https://plus.google.com/share?url="+u,
                  'Share on Google+',
                  'width=584,height=385');
      };
      function twshare () {
          window.open(
                  "https://twitter.com/intent/tweet?url="+u+"&text="+t,
                  'Share on Twitter',
                  'width=800,height=526');
      };
      function pinshare () {
          window.open("//www.pinterest.com/pin/create/button/?url="+u+"&media=http%3A%2F%2Ftomee.apache.org%2Fresources%2Fimages%2Ffeather-logo.png&description="+t,
                  'Share on Pinterest',
                  'width=800,height=526');
      };
    </script>

    <!-- Le fav and touch icons -->
    <link rel="shortcut icon" href="./favicon.ico">
    <link rel="apple-touch-icon" href="./resources/images/apple-touch-icon.png">
    <link rel="apple-touch-icon" sizes="72x72" href="./resources/images/apple-touch-icon-72x72.png">
    <link rel="apple-touch-icon" sizes="114x114" href="./resources/images/apple-touch-icon-114x114.png">

    <script src="./resources/js/prettify.js" type="text/javascript"></script>
    <script src="./resources/js/jquery-latest.js"></script>
    <script src="http://platform.twitter.com/widgets.js" type="text/javascript"></script>
    <script src="./resources/js/common.js"></script>
    <script src="./resources/js/prettyprint.js"></script>
    <!--script src="//assets.pinterest.com/js/pinit.js" type="text/javascript" async></script//-->
    
    <script type="text/javascript">

      var _gaq = _gaq || [];
      _gaq.push(['_setAccount', 'UA-2717626-1']);
      _gaq.push(['_setDomainName', 'apache.org']);
      _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>

    <div class="topbar" data-dropdown="dropdown">
      <div class="fill">
        <div class="container">
          <a class="brand" href="./index.html">Apache TomEE</a>
          <ul class="nav">
              <li class="dropdown">
                  <a class="dropdown-toggle" data-toggle="dropdown" href="#">
                  Apache
                      <b class="caret"></b>
                  </a>
                  <ul class="dropdown-menu">
                     <!-- <li><a href="./misc/whoweare.html">Who we are?</a></li> -->
                     <!-- <li><a href="./misc/heritage.html">Heritage</a></li> -->
                     <li><a href="http://www.apache.org">Apache Home</a></li>
                     <!-- <li><a href="./misc/resources.html">Resources</a></li> -->
                     <li><a href="./misc/contact.html">Contact</a></li>
                     <li><a href="./misc/legal.html">Legal</a></li>
                     <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
                     <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
                     <li class="divider"/>
                     <li><a href="http://www.apache.org/security">Security</a></li>
                  </ul>
              </li>
              <li><a href="./index.html">Home</a></li>
              <li><a href="./downloads.html">Downloads</a></li>
              <li><a href="./documentation.html">Documentation</a></li>
              <li><a href="./examples-trunk/index.html">Examples</a></li>
              <li><a href="./support.html">Support</a></li>
              <li><a href="./contribute.html">Contribute</a></li>
              <li><a href="./security/index.html">Security</a></li>
          </ul>

            <!-- Google CSE Search Box Begins  -->
            <FORM class="pull-right" id="searchbox_010475492895890475512:_t4iqjrgx90" action="http://www.google.com/cse">
                <INPUT type="hidden" name="cx" value="010475492895890475512:_t4iqjrgx90">
                <INPUT type="hidden" name="cof" value="FORID:0">
                <INPUT size="18" width="130" style="width:130px" name="q" type="text" placeholder="Search">
            </FORM>
            <!--<SCRIPT type="text/javascript" src="http://www.google.com/coop/cse/brand?form=searchbox_010475492895890475512:_t4iqjrgx90"></SCRIPT>-->
            <!-- Google CSE Search Box Ends -->
        </div>
      </div>
    </div>

    <div class="container">
    

<div class="page-header">
    <small><a href="./index.html">Home</a></small><br>
    <h1>Multipoint Recommendations

        <div style="float: right; position: relative; bottom: -10px; ">
            <a onclick="javascript:gpshare()" class="gp-share sprite" title="Share on Google+">share [gp]</a>
            <a onclick="javascript:fbshare()" class="fb-share sprite" title="Share on Facebook">share [fb]</a>
            <a onclick="javascript:twshare()" class="tw-share sprite" title="Share on Twitter">share [tw]</a>
            <a onclick="javascript:pinshare()" class="pin-share sprite" title="Share on Pinterest">share [pin]</a>
            <a data-toggle="modal" href="#edit" class="edit-page" title="Contribute to this Page">contribute</a>
        </div>
    </h1>
</div>

<p>As mentioned the <code>initialServers</code> is only used for bootstrapping
the multipoint network.  Once running, all servers will dynamically
establish direct connections with each other and there is no single point
of failure.</p>

<p>However to ensure that the bootstrapping process can occur successfully,
the <code>initialServers</code> property of the <code>conf/multipoint.properties</code> file
must be set carefully and with a specific server start order in mind.  Each
server consults its <code>initialServers</code> list exactly once in the
bootstrapping phase at startup, after that time connections are made
dynamically.</p>

<p>This means that at least one of the servers listed in <code>initialServers</code>
must already be running when the server starts or the server might never
become introduced and connected to all the other servers in the network.</p>

<h1>Failed scenario <small>background</small></h1>

<p>As an example of a failed scenario, imagine there are three servers;
<code>server1</code>, <code>server2</code>, <code>server3</code>.  They are setup only to point to the server in
front of them making a chain:</p>

<ul>
<li>server1; <code>initialServers = server2</code></li>
<li>server2; <code>initialServers = server3</code></li>
<li>server3; <code>initialServers = *&amp;lt;blank&gt;*</code></li>
</ul>

<p>Which is essentially <code>server1</code> -> <code>server2</code> -> <code>server3</code>.  This scenario could
work, but they servers would have to be started in exactly the opposite
order:</p>

<ol>
<li><code>server3</code> starts</li>
<li><code>server2</code> starts
<ol>
<li><em>static:</em> connect to <code>server3</code></li>
</ol></li>
<li><code>server1</code> starts
<ol>
<li><em>static:</em> connect to <code>server2</code></li>
<li><em>dynamic:</em> connect to <code>server3</code></li>
</ol></li>
</ol>

<p>At this point all servers would be fully connected.  But the above setup is
flawed and could easily fail.  The first flaw is <code>server3</code> lists nothing in
its <code>initialServers</code> list, so if it were restarted it would leave the
multipoint network and not know how to get back in.</p>

<p>The second flaw is if you started them in any other order, you would also
not get a fully connected multipoint network.  Say the servers were started
in "front" order:</p>

<ol>
<li><code>server1</code> starts
<ol>
<li><em>static:</em> connect to <code>server2</code> - failed, <code>server2</code> not started.</li>
</ol></li>
<li><code>server2</code> starts
<ol>
<li><em>static:</em> connect to <code>server3</code> - failed, <code>server3</code> not started.</li>
</ol></li>
<li><code>server3</code> starts
<ol>
<li>no connection attempts, initialServers list is empty.</li>
</ol></li>
</ol>

<p>After startup completes, all servers will be completely isolated and
failover will not work.  The described setup is weaker than it needs to be.
Listing just one server means the listed server is a potential point of
weakness.  As a matter of trivia, it is interesting to point out that you
could bring a fourth server online temporarily that lists all three
servers.  Once it makes the introductions and all servers learn of each
other, you could shut it down again.</p>

<p>The above setup is easily fixable via better configuration.  If <code>server3</code>
listed both <code>server1</code> and <code>server2</code> in its initialServers list, rather than
listing nothing at all, then all servers would fully discover each other
regardless of startup order; assuming all three servers did eventually
start.</p>

<h1>Bootstrapping Three Servers or Less</h1>

<p>In a three sever scenario, we recommend simply having all three servers
list all three servers.  </p>

<ul>
<li>server1/conf/multipoint.properties
<ul>
<li><code>initialServers = server1, server2, server3</code></li>
</ul></li>
<li>server2/conf/multipoint.properties
<ul>
<li><code>initialServers = server1, server2, server3</code></li>
</ul></li>
<li>server3/conf/multipoint.properties
<ul>
<li><code>initialServers = server1, server2, server3</code></li>
</ul></li>
</ul>

<p>There's no harm to a server listing itself.  It gives you one clean list to
maintain and it will work even if you decide not to start one of the three
servers.</p>

<h1>Bootstrapping Four Servers or More</h1>

<p>In a scenario of four or more, we recommend picking at least to servers and
focus on always keeping at least one of them running.  Lets refer to them
as "root" servers for simplicity sake.</p>

<ul>
<li>server1/conf/multipoint.properties
<ul>
<li><code>initialServers = server2</code></li>
</ul></li>
<li>server2/conf/multipoint.properties
<ul>
<li><code>initialServers = server1</code></li>
</ul></li>
</ul>

<p>Root <code>server1</code> would list root <code>server2</code> so they would always be linked to each
other regardless of start order or if one of them went down.  <code>Server1</code> could
be shutdown and reconnect on startup to the full multipoint network through
<code>server2</code>, and vice versa.</p>

<p>All other servers would simply list the root servers (<code>server1</code>, <code>server2</code>) in
their initialServers list.</p>

<ul>
<li>server3/conf/multipoint.properties
<ul>
<li><code>initialServers = server1, server2</code></li>
</ul></li>
<li>server4/conf/multipoint.properties
<ul>
<li><code>initialServers = server1, server2</code></li>
</ul></li>
<li>serverN/conf/multipoint.properties
<ul>
<li><code>initialServers = server1, server2</code></li>
</ul></li>
</ul>

<p>As long as at least one root server (<code>server1</code> or <code>server2</code>) was running, you
can bring other servers on and offline at will and always have a fully
connected graph.</p>

<p>Of course all servers once running and connected will have a full list of
all other servers in the network, so if at any time the "root" servers
weren't around to make initial introductions to new servers it would be no
trouble.  It's possible to reconfigure new servers to point at any other
server in the network as all servers will have the full list.  So these
"root" servers are no real point of failure in function, but only of
convenience.</p>

<h1>Setting initialServers <small>overrides</small></h1>

<p>Always remember that any property in a <code>conf/&lt;server-service&gt;.properties</code>
file can be overridden on the command line or via system properties.  So it
is possible easily set the <code>initialServers</code> list in startup scripts.</p>

<p>A bash example might look something like:</p>

<pre><code>!/bin/bash

OPENEJB_HOME=/opt/openejb-3.1.3
INITIAL_LIST=$(cat /some/shared/directory/our_initial_servers.txt)

$OPENEJB_HOME/bin/openejb start -Dmultipoint.initialServers=$INITIAL_LIST
</code></pre>




        <div id="edit" class="modal hide fade in" style="display: none; ">
            <div class="modal-header">
                <a class="close" data-dismiss="modal">x</a>

                <h3>Thank you for contributing to the documentation!</h3>
            </div>
            <div class="modal-body">
                <h4>Any help with the documentation is greatly appreciated.</h4>
                <p>All edits are reviewed before going live, so feel free to do much more than fix typos or links.  If you see a page that could benefit from an entire rewrite, we'd be thrilled to review it.  Don't be surprised if we like it so much we ask you for help with other pages :)</p>
                <small>NOTICE: unless indicated otherwise on the pages in question, all editable content available from apache.org is presumed to be licensed under the Apache License (AL) version 2.0 and hence all submissions to apache.org treated as formal Contributions under the license terms.</small>
                <!--[if gt IE 6]>
                <h4>Internet Explorer Users</h4>
                <p>If you are not an Apache committer, click the Yes link and enter a <i>anonymous</i> for the username and leave the password empty</p>
                <![endif]-->

            </div>
            <div class="modal-footer">
                Do you have an Apache ID?
                <a href="javascript:void(location.href='https://cms.apache.org/redirect?uri='+escape(location.href))" class="btn">Yes</a>
                <a href="javascript:void(location.href='https://anonymous:@cms.apache.org/redirect?uri='+escape(location.href))" class="btn">No</a>
            </div>
        </div>
        <script src="./resources/js/bootstrap-modal.js"></script>

        <footer>
            <p>Copyright &copy; 1999-2016 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.
                Apache TomEE, TomEE, Apache, the Apache feather logo, and the Apache TomEE project logo are trademarks of The Apache Software Foundation.
                All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p>
        </footer>

    </div> <!-- /container -->

    <!-- Javascript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="./resources/js/bootstrap-dropdown.js"></script>

  </body>
</html>
