blob: 919b0e4273ff96f9672ac86b3cae448e99240de8 [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>App Clients and JNDI</h1>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="paragraph">
<p>There are some slight differences between the way OpenEJB
does app clients and the way Geronimo does app clients</p>
</div>
<div class="paragraph">
<p>Neither uses the names created via the openejb.jndiname.format.  So
changing that will (should) have no affect.  The idea is that users
should be able to set it to be whatever they want it to be and that
should not break the App Client code.  The openejb.jndiname.format is
specifically for "plain" clients and allows them to get the names as
they want them.</p>
</div>
<div class="paragraph">
<p>Internally, we bind each EJB proxy under essentially a hardcoded and
predictable format and then again using the user supplied format.  So
there are at minimum two JNDI trees with every EJB proxy.  It used to be
two at least.  Now we have quite a few because of Java EE 6 global JNDI
and the support we added for <code>@LocalClient</code> and allowing the same
interface to be used as both <code>@Local</code> and <code>@Remote</code>.</p>
</div>
<div class="paragraph">
<p>Basically we have:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>openejb/Deployment/&lt;hardcoded internal format&gt;</p>
</li>
<li>
<p>openejb/local/&lt;strategy format&gt;</p>
</li>
<li>
<p>openejb/remote/&lt;strategy format&gt;</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The 'openejb/Deployment' section is the non-changing fully qualified
name for use internally and by app clients.</p>
</div>
<div class="paragraph">
<p>The 'openejb/remote' section is for "pretty" names looked up via plain
clients using the RemoteInitialContextFactory.  The protocol can tell
the difference between app clients and plain clients and knows which
area to look in.</p>
</div>
<div class="paragraph">
<p>The 'openejb/local' section is for "pretty" names looked up via the
LocalInitialContextFactory.</p>
</div>
<div class="paragraph">
<p>The "pretty" names are defined by the openejb.jndiname.format and since
the user has control of that formatting it&#8217;s possible that not all
proxies can be bound.  Say the bean has both a local and remote
interface and the user has just "{deploymentId}" or "{ejbName}" as the
format.  Hence those bind calls use the "optional" set of binding
methods.</p>
</div>
<div class="paragraph">
<p>The format of the internal names bound into openejb/Deployment is
guaranteed to be unique.  It&#8217;s not pretty to look at obviously, but
every possible proxy will be bound there guaranteed.  For binding into
'openejb/Deployment' we don&#8217;t use the "optional" set of binding methods.
 If something can&#8217;t be bound it&#8217;s a deployment issue.</p>
</div>
<div class="paragraph">
<p>The home interface is bound, but with the name of the corresponding
business interface rather than the home interface.  </p>
</div>
<div class="paragraph">
<p>To be a little bit more clear -  Both OpenEJB and Geronimo build their
own JNDI trees for the App Client.  Geronimo prefers to have its own
JNDI tree for the App Client as there are other things in it that are
not EJB related.  Either way the OpenEJB EJBd protocol can carry the
"id" of the App Client and both Geronimo and OpenEJB rely on that.</p>
</div>
<div class="paragraph">
<p>In Geronimo App Clients the id is set to "Deployments" and that tells
OpenEJB not to look in the "openejb/remote" section of JNDI as it
normally would.  It will instead use the "openejb/Deployments" section
of JNDI were the names follow a predictable and unchanging format.</p>
</div>
<div class="paragraph">
<p>In OpenEJB App Clients the id is set to the name of the App Client and
we instead look in "openejb/client//" where names are formatted by the
user via the application-client.xml.</p>
</div>
<div class="paragraph">
<p>When calls are made from client to server and the App Client module id
is not present, we look in openejb/remote/ where names are formatted
using the openejb.jndi.format</p>
</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/" 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>