blob: fbebd832b7418e01ee38663dd821da129e913ea5 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Apache TomEE</title>
<meta name="description"
content="Apache TomEE is a lightweight, yet powerful, JavaEE Application server with feature rich tooling." />
<meta name="keywords" content="tomee,asf,apache,javaee,jee,shade,embedded,test,junit,applicationcomposer,maven,arquillian" />
<meta name="author" content="Luka Cvetinovic for Codrops" />
<link rel="icon" href="../../favicon.ico">
<link rel="icon" type="image/png" href="../../favicon.png">
<meta name="msapplication-TileColor" content="#80287a">
<meta name="theme-color" content="#80287a">
<link rel="stylesheet" type="text/css" href="../../css/normalize.css">
<link rel="stylesheet" type="text/css" href="../../css/bootstrap.css">
<link rel="stylesheet" type="text/css" href="../../css/owl.css">
<link rel="stylesheet" type="text/css" href="../../css/animate.css">
<link rel="stylesheet" type="text/css" href="../../fonts/font-awesome-4.1.0/css/font-awesome.min.css">
<link rel="stylesheet" type="text/css" href="../../fonts/eleganticons/et-icons.css">
<link rel="stylesheet" type="text/css" href="../../css/jqtree.css">
<link rel="stylesheet" type="text/css" href="../../css/idea.css">
<link rel="stylesheet" type="text/css" href="../../css/cardio.css">
<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="preloader">
<img src="../../img/loader.gif" alt="Preloader image">
</div>
<nav class="navbar">
<div class="container">
<div class="row"> <div class="col-md-12">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<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="/">
<span>
<img src="../../img/logo-active.png">
</span>
Apache TomEE
</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav navbar-right main-nav">
<li><a href="../../docs.html">Documentation</a></li>
<li><a href="../../community/index.html">Community</a></li>
<li><a href="../../security/security.html">Security</a></li>
<li><a href="../../download-ng.html">Downloads</a></li>
</ul>
</div>
<!-- /.navbar-collapse -->
</div></div>
</div>
<!-- /.container-fluid -->
</nav>
<div id="main-block" class="container main-block">
<div class="row title">
<div class="col-md-12">
<div class='page-header'>
<h1>MultiPulse (UDP) Discovery</h1>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>MultiPulse is an alternative multicast lookup that does not use a
regular heartbeat. Instead, servers listen for a multicast request
packet (a pulse) to which a response is then sent. Multicast network
traffic is effectively reduced to an absolute minimum.</p>
</div>
<div class="paragraph">
<p>MultiPulse is only useful in network scenarios where both client and
server can be configured to send multicast UDP packets.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_server_configuration">Server Configuration</h2>
<div class="sectionbody">
<div class="paragraph">
<p>After you boot the server for the first time the default configuration
will create the file <code>conf/conf.d/multipulse.properties</code> containing:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-properties" data-lang="properties">server = org.apache.openejb.server.discovery.MulticastPulseAgent
bind = 239.255.2.3
port = 6142
disabled = true
group = default</code></pre>
</div>
</div>
<div class="paragraph">
<p>You just need to enable the agent by setting <code>disabled = false</code>. It is
advisable to disable multicast in the <code>multicast.properties file</code>, or at
least to use a different bind address or port should you wish to use
both.</p>
</div>
<div class="paragraph">
<p>All of the above settings except <code>server</code> can be modified as required.
The <code>port</code> and <code>bind</code> must be valid for general multicast/udp network
communication.</p>
</div>
<div class="paragraph">
<p>The <code>group</code> setting can be changed to further group/cluster servers that
may use the same multicast channel. As shown below the client also has
an optional <code>group</code> setting which can be used to select an appropriate
server cluster from the multicast channel (See MultiPulse Client).</p>
</div>
<div class="paragraph">
<p>The next step is to ensure that the advertised services are configured
for discovery. Edit the <code>ejbd.properties</code> file (and any other enabled
services such as http, etc.) and ensure that the <code>discovery</code> option is
set to a value that remote clients will be able to resolve.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-properties" data-lang="properties">server = org.apache.openejb.server.ejbd.EjbServer
bind = 0.0.0.0
port = 4201
disabled = false
threads = 20
discovery = ejb:ejbd://{bind}:{port}</code></pre>
</div>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
If either <code>0.0.0.0</code> (IPv4) or <code>[::]</code> (IPv6) wildcard bind
addresses are used then the server will actually broadcast all of it&#8217;s
known public hosts to clients. Clients will then cycle though and
attempt to connect to the provided hosts until successful.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>If <code>localhost</code> is used then only clients on the same physical machine
will actually 'see' the server response.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_multipulse_client">MultiPulse Client</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The multipulse functionality is not just for servers to find each other
in a cluster, it can also be used for EJB clients to discover a server.
A special <code>multipulse://</code> URL can be used in the <code>InitialContext</code>
properties to signify that multipulse should be used to seed the
connection process. Such as:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.RemoteInitialContextFactory");
p.put(Context.PROVIDER_URL, "multipulse://239.255.2.3:6142?group=default&amp;timeout=250");
InitialContext remoteContext = new InitialContext(p);</code></pre>
</div>
</div>
<div class="paragraph">
<p>The URL has optional query parameters such as <code>schemes</code> and <code>group</code> and
<code>timeout</code> which allow you to zero in on a particular type of service of
a particular cluster group as well as set how long you are willing to
wait in the discovery process till finally giving up. The first matching
service that it sees "flowing" around on the UDP stream is the one it
picks and sticks to for that and subsequent requests, ensuring UDP is
only used when there are no other servers to talk to.</p>
</div>
<div class="paragraph">
<p>Note that EJB clients do not need to use multipulse to find a server. If
the client knows the URL of a server in the cluster, it may use it and
connect directly to that server, at which point that server will share
the full list of its peers.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_multicast_servers_with_tcp_clients">Multicast Servers with TCP Clients</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Note that clients do not need to use multipulse to communicate with
servers. Servers can use multicast to discover each other, but clients
are still free to connect to servers in the network using the server&#8217;s
TCP address.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.RemoteInitialContextFactory");
p.put(Context.PROVIDER_URL, "ejbd://192.168.1.30:4201");
InitialContext remoteContext = new InitialContext(p);</code></pre>
</div>
</div>
<div class="paragraph">
<p>When the client connects, the server will send the URLs of all the
servers in the group and failover will take place normally.</p>
</div>
</div>
</div>
</div>
</div>
</div>
<footer>
<div class="container">
<div class="row">
<div class="col-sm-6 text-center-mobile">
<h3 class="white">Be simple. Be certified. Be Tomcat.</h3>
<h5 class="light regular light-white">"A good application in a good server"</h5>
<ul class="social-footer">
<li><a href="https://www.facebook.com/ApacheTomEE/"><i class="fa fa-facebook"></i></a></li>
<li><a href="https://twitter.com/apachetomee"><i class="fa fa-twitter"></i></a></li>
<li><a href="https://plus.google.com/communities/105208241852045684449"><i class="fa fa-google-plus"></i></a></li>
</ul>
</div>
<div class="col-sm-6 text-center-mobile">
<div class="row opening-hours">
<div class="col-sm-3 text-center-mobile">
<h5><a href="../../latest/docs/documentation.html" class="white">Documentation</a></h5>
<ul class="list-unstyled">
<li><a href="../../latest/docs/admin/configuration/index.html" class="regular light-white">How to configure</a></li>
<li><a href="../../latest/docs/admin/file-layout.html" class="regular light-white">Dir. Structure</a></li>
<li><a href="../../latest/docs/developer/testing/index.html" class="regular light-white">Testing</a></li>
<li><a href="../../latest/docs/admin/cluster/index.html" class="regular light-white">Clustering</a></li>
</ul>
</div>
<div class="col-sm-3 text-center-mobile">
<h5><a href="../../latest/examples/" class="white">Examples</a></h5>
<ul class="list-unstyled">
<li><a href="../../latest/examples/simple-cdi-interceptor.html" class="regular light-white">CDI Interceptor</a></li>
<li><a href="../../latest/examples/rest-cdi.html" class="regular light-white">REST with CDI</a></li>
<li><a href="../../latest/examples/ejb-examples.html" class="regular light-white">EJB</a></li>
<li><a href="../../latest/examples/jsf-managedBean-and-ejb.html" class="regular light-white">JSF</a></li>
</ul>
</div>
<div class="col-sm-3 text-center-mobile">
<h5><a href="../../community/index.html" class="white">Community</a></h5>
<ul class="list-unstyled">
<li><a href="../../community/contributors.html" class="regular light-white">Contributors</a></li>
<li><a href="../../community/social.html" class="regular light-white">Social</a></li>
<li><a href="../../community/sources.html" class="regular light-white">Sources</a></li>
</ul>
</div>
<div class="col-sm-3 text-center-mobile">
<h5><a href="../../security/index.html" class="white">Security</a></h5>
<ul class="list-unstyled">
<li><a href="http://apache.org/security" target="_blank" class="regular light-white">Apache Security</a></li>
<li><a href="http://apache.org/security/projects.html" target="_blank" class="regular light-white">Security Projects</a></li>
<li><a href="http://cve.mitre.org" target="_blank" class="regular light-white">CVE</a></li>
</ul>
</div>
</div>
</div>
</div>
<div class="row bottom-footer text-center-mobile">
<div class="col-sm-12 light-white">
<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>
</div>
</div>
</div>
</footer>
<!-- Holder for mobile navigation -->
<div class="mobile-nav">
<ul>
<li><a hef="../../latest/docs/admin/index.html">Administrators</a>
<li><a hef="../../latest/docs/developer/index.html">Developers</a>
<li><a hef="../../latest/docs/advanced/index.html">Advanced</a>
<li><a hef="../../community/index.html">Community</a>
</ul>
<a href="#" class="close-link"><i class="arrow_up"></i></a>
</div>
<!-- Scripts -->
<script src="../../js/jquery-1.11.1.min.js"></script>
<script src="../../js/owl.carousel.min.js"></script>
<script src="../../js/bootstrap.min.js"></script>
<script src="../../js/wow.min.js"></script>
<script src="../../js/typewriter.js"></script>
<script src="../../js/jquery.onepagenav.js"></script>
<script src="../../js/tree.jquery.js"></script>
<script src="../../js/highlight.pack.js"></script>
<script src="../../js/main.js"></script>
</body>
</html>