blob: 2bfe779865a9b4c38e1e88162262f180717f597d [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Validation Tool</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>Validation Tool
<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><a name="ValidationTool-NAME"></a></p>
<h1>NAME</h1>
<p>openejb validate - OpenEJB Validation Tool</p>
<p><a name="ValidationTool-SYNOPSIS"></a></p>
<h1>SYNOPSIS</h1>
<p>openejb validate <a href="options.html">options</a>
jarfiles</p>
<p><a name="ValidationTool-NOTE"></a></p>
<h1>NOTE</h1>
<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:\openejb.</p>
<p>In Windows, the validation tool can be executed as follows:</p>
<p><em>C:\openejb> openejb validate -help</em></p>
<p><div class="warning">}
There is a bug in the openejb.bat script of OpenEJB 0.9.0 that doesn't
allow you to execute the validate command as above. For that release,
Windows users can execute the following command:
<em>C:\openejb> bin\validate.bat -help</em>
<div class="warning">}</p>
<p>In UNIX, Linux, or Mac OS X, the deploy tool can be executed as follows:</p>
<p>`<a href="user@host-openejb.html">user@host openejb</a></p>
<h1>./openejb.sh validate -help`</h1>
<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>
<p>`<a href="user@host-openejb.html">user@host openejb</a></p>
<h1>chmod 755 openejb.sh bin/*.sh`</h1>
<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>
<p><em>openejb validate -help</em></p>
<p><a name="ValidationTool-DESCRIPTION"></a></p>
<h1>DESCRIPTION</h1>
<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>
<p>More checks will be added in the future.</p>
<p><a name="ValidationTool-OPTIONS"></a></p>
<h1>OPTIONS</h1>
<table>
<tr><td>-v</td><td>Sets the output level to 1. This will output just the minumum details
on each failure.</td></tr>
<tr><td>-vv</td><td>Default. Sets the output level to 2. Outputs one line summaries of
each failure. This is the default output level.</td></tr>
<tr><td>-vvv</td><td>Sets the output level to 3. Outputs verbose details on each failure,
usually with details on how to correct the failures.</td></tr>
<tr><td>-xml</td><td>Outputs information in well-formed XML.</td></tr>
<tr><td>-nowarn</td><td>Suppresses warnings.</td></tr>
<tr><td>-version</td><td>Print the version.</td></tr>
<tr><td>-help</td><td>Print this help message.</td></tr>
<tr><td>-examples</td><td>Show examples of how to use the options.</td></tr>
</table>
<p><a name="ValidationTool-COMMONISSUES"></a></p>
<h1>COMMON ISSUES</h1>
<p><a name="ValidationTool-MisslocatedclassorNoClassDefFoundError"></a></p>
<h2>Misslocated class or NoClassDefFoundError</h2>
<p>The short explanation is that the parent doesn't have all the classes it
needs as some of them are only in the child classloader, where the parent
can't see them.</p>
<p>This would occur, for example, if a class was loaded by the parent
classloader, but that class' superclass wasn't visible to the parent
classloader, perhaps because it is only in the child classloader.</p>
<p>Here is a more concrete example:</p>
<pre><code>public interface Person extends EJBObject {
}
public interface Employee extends Person {
}
</code></pre>
<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's say that for some reason the Employee interface is also in another
jar and that jar was loaded into the system classpath.</p>
<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's
superinterface, Person, where it immediatly blows up and throws a
NoClassDefFoundError: Person.</p>
<p>Most people will look at their ejb-jar and think, "But all my classes are
there!?", which is true. It really doesn'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's job to find <em>all</em> the dependent classes. If
it can't ... NoClassDefFoundError.</p>
<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>