blob: 088f9300d00d960432da3551891e1dafcdd3b9c3 [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>Validation Tool</h1>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<h1 id="_name" class="sect0">NAME</h1>
<div class="paragraph">
<p>openejb validate - OpenEJB Validation Tool</p>
</div>
<h1 id="_synopsis" class="sect0">SYNOPSIS</h1>
<div class="paragraph">
<p>openejb validate <a href="options.html">options</a> jarfiles</p>
</div>
<h1 id="_note" class="sect0">NOTE</h1>
<div class="paragraph">
<p>The OpenEJB Validation tool must be executed from the OPENEJB_HOME
directory. This is the directory where OpenEJB was installed or
unpacked. For for the remainder of this document we will assume you
unpacked OpenEJB into the directory C:.</p>
</div>
<div class="paragraph">
<p>In Windows, the validation tool can be executed as follows:</p>
</div>
<div class="paragraph">
<p><em>C:&gt; openejb validate -help</em></p>
</div>
<div class="paragraph">
<p>{warning} There is a bug in the openejb.bat script of OpenEJB 0.9.0
that doesn&#8217;t allow you to execute the validate command as above. For
that release, Windows users can execute the following command: <em>C:&gt;
bin.bat -help</em></p>
</div>
<div class="paragraph">
<p>{warning}</p>
</div>
<div class="paragraph">
<p>In UNIX, Linux, or Mac OS X, the deploy tool can be executed as follows:</p>
</div>
<div class="paragraph">
<p><code>[user@host openejb](<a href="mailto:user@host-openejb.html">user@host-openejb.html</a>) # ./openejb.sh validate -help</code></p>
</div>
<div class="paragraph">
<p>Depending on your OpenEJB version, you may need to change execution bits
to make the scripts executable. You can do this with the following
command.</p>
</div>
<div class="paragraph">
<p><code>[user@host openejb](<a href="mailto:user@host-openejb.html">user@host-openejb.html</a>) # chmod 755 openejb.sh bin/*.sh</code></p>
</div>
<div class="paragraph">
<p>From here on out, it will be assumed that you know how to execute the
right openejb script for your operating system and commands will appear
in shorthand as show below.</p>
</div>
<div class="paragraph">
<p><em>openejb validate -help</em></p>
</div>
<h1 id="_description" class="sect0">DESCRIPTION</h1>
<div class="paragraph">
<p>The validation tool currently checks for the following things: * Does
the Jar have all the ejb-class class files * Does the Jar have all the
home class files * Does the Jar have all the remote class files * Is the
ejb-class a sub-interface of SessionBean or EntityBean * Is the home a
sub-interface of EJBHome * Is the remote a sub-interface of EJBObject *
Are all the methods in the remote interface implemented in the ejb-class
* Are there create methods in the home interface * Are the create
methods in the home interface implemented in the ejb-class * Are the
required post create methods in the ejb-class of EntityBeans * Are there
any create methods in the ejb-class, but not in the home interface</p>
</div>
<div class="paragraph">
<p>More checks will be added in the future.</p>
</div>
<h1 id="_options" class="sect0">OPTIONS</h1>
<div class="paragraph">
<p>-v</p>
</div>
<div class="paragraph">
<p>Sets the output level to 1. This will output just the minumum details on
each failure.</p>
</div>
<div class="paragraph">
<p>-vv</p>
</div>
<div class="paragraph">
<p>Default. Sets the output level to 2. Outputs one line summaries of each
failure. This is the default output level.</p>
</div>
<div class="paragraph">
<p>-vvv</p>
</div>
<div class="paragraph">
<p>Sets the output level to 3. Outputs verbose details on each failure,
usually with details on how to correct the failures.</p>
</div>
<div class="paragraph">
<p>-xml</p>
</div>
<div class="paragraph">
<p>Outputs information in well-formed XML.</p>
</div>
<div class="paragraph">
<p>-nowarn</p>
</div>
<div class="paragraph">
<p>Suppresses warnings.</p>
</div>
<div class="paragraph">
<p>-version</p>
</div>
<div class="paragraph">
<p>Print the version.</p>
</div>
<div class="paragraph">
<p>-help</p>
</div>
<div class="paragraph">
<p>Print this help message.</p>
</div>
<div class="paragraph">
<p>-examples</p>
</div>
<div class="paragraph">
<p>Show examples of how to use the options.</p>
</div>
<h1 id="_common_issues" class="sect0">COMMON ISSUES</h1>
<div class="sect1">
<h2 id="_misslocated_class_or_noclassdeffounderror">Misslocated class or NoClassDefFoundError</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The short explanation is that the parent doesn&#8217;t have all the classes it
needs as some of them are only in the child classloader, where the
parent can&#8217;t see them.</p>
</div>
<div class="paragraph">
<p>This would occur, for example, if a class was loaded by the parent
classloader, but that class' superclass wasn&#8217;t visible to the parent
classloader, perhaps because it is only in the child classloader.</p>
</div>
<div class="paragraph">
<p>Here is a more concrete example:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">public interface Person extends EJBObject {
}
public interface Employee extends Person {
}</code></pre>
</div>
</div>
<div class="paragraph">
<p>Ok, so when we build our ejb jar, we put both the Person and Employee
interfaces in the jar, so everything should be good (so we think). But
now let&#8217;s say that for some reason the Employee interface is also in
another jar and that jar was loaded into the system classpath.</p>
</div>
<div class="paragraph">
<p>When a new classloader is create for my ejb-jar at runtime and the
system attempts to load the Employee interface, the call goes right
through that classloader and down to the system classloader. The
Employee interface is found, because it was accidentally added to that
extra jar in the system classpath. So now the system classloader goes
looking for Employee&#8217;s superinterface, Person, where it immediatly blows
up and throws a NoClassDefFoundError: Person.</p>
</div>
<div class="paragraph">
<p>Most people will look at their ejb-jar and think, "But all my classes
are there!?", which is true. It really doesn&#8217;t matter though, because
one of those classes is also in the parent classloader. The first call
to load that class will bypass your classloader completely and go to the
parent. Once there, it is the parent&#8217;s job to find <em>all</em> the dependent
classes. If it can&#8217;t &#8230;&#8203; NoClassDefFoundError.</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>