You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by bu...@apache.org on 2011/07/10 06:35:00 UTC

svn commit: r792464 [22/23] - /websites/staging/openejb/trunk/content/

Added: websites/staging/openejb/trunk/content/validation-tool.cwiki
==============================================================================
--- websites/staging/openejb/trunk/content/validation-tool.cwiki (added)
+++ websites/staging/openejb/trunk/content/validation-tool.cwiki Sun Jul 10 04:34:53 2011
@@ -0,0 +1,95 @@
+
+h1. NAME
+
+openejb validate - OpenEJB Validation Tool
+
+h1. SYNOPSIS
+
+
+openejb validate [options] jarfiles
+
+h1. NOTE
+
+
+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.
+
+In Windows, the validation tool can be executed as follows:
+
+{{C:\openejb> openejb validate -help}}
+
+
+{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:
+{{C:\openejb> bin\validate.bat -help}}
+
+{warning}
+
+
+In UNIX, Linux, or Mac OS X, the deploy tool can be executed as follows:
+
+{{[user@host openejb]# ./openejb.sh validate -help}}
+
+
+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.
+
+{{[user@host openejb]# chmod 755 openejb.sh bin/*.sh}}
+
+
+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.
+
+{{openejb validate -help}}
+
+
+h1. DESCRIPTION
+
+
+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
+
+More checks will be added in the future.
+
+h1. OPTIONS
+
+
+|-v|Sets the output level to 1. This will output just the minumum details on each failure.|
+|-vv|Default. Sets the output level to 2. Outputs one line summaries of each failure. This is the default output level.|
+|-vvv|Sets the output level to 3. Outputs verbose details on each failure, usually with details on how to correct the failures.|
+|-xml|Outputs information in well-formed XML.|
+|-nowarn|Suppresses warnings.|
+|-version|Print the version.|
+|-help|Print this help message.|
+|-examples|Show examples of how to use the options.|
+
+h1. COMMON ISSUES
+
+h2. Misslocated class or NoClassDefFoundError
+
+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.
+
+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.
+
+Here is a more concrete example:
+{code}
+public interface Person extends EJBObject {
+}
+
+public interface Employee extends Person {
+}
+{code}
+
+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.
+
+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.
+
+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 *all* the dependent classes. If it can't ... NoClassDefFoundError.
+

Added: websites/staging/openejb/trunk/content/validation-tool.html
==============================================================================
--- websites/staging/openejb/trunk/content/validation-tool.html (added)
+++ websites/staging/openejb/trunk/content/validation-tool.html Sun Jul 10 04:34:53 2011
@@ -0,0 +1,222 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+    <title>Validation Tool</title>
+    <link rel="stylesheet" type="text/css" media="screen" href="http://incubator.apache.org/lucy/css/lucy.css">
+  </head>
+
+  <body>
+
+    <div id="lucy-rigid_wrapper">
+
+      <div id="lucy-top" class="container_16 lucy-white_box_3d">
+
+        <div id="lucy-logo_box" class="grid_8">
+          <a href="/OpenEJB/"><img src="http://openejb.apache.org/images/logo_openejb.gif" alt="Apache OpenEJB™"></a>
+        </div> <!-- lucy-logo_box -->
+
+        <div #id="lucy-top_nav_box" class="grid_8">
+          <div id="lucy-top_nav_bar" class="container_8">
+            <ul>
+              <li><a href="http://www.apache.org/" title="Apache Software Foundation">Apache Software Foundation</a></li>
+              <li><a href="http://www.apache.org/licenses/" title="License">License</a></li>
+              <li><a href="http://www.apache.org/foundation/sponsorship.html" title="Sponsorship">Sponsorship</a></li>
+              <li><a href="http://www.apache.org/foundation/thanks.html" title="Thanks">Thanks</a></li>
+              <li><a href="http://www.apache.org/security/ " title="Security">Security</a></li>
+            </ul>
+          </div> <!-- lucy-top_nav_bar -->
+          <p><a href="http://www.apache.org/">Apache</a>&nbsp;&raquo&nbsp;<a href="/">Incubator</a></p>
+          <form name="lucy-top_search_box" id="lucy-top_search_box" action="http://www.google.com/search" method="get">
+            <input value="*.apache.org" name="sitesearch" type="hidden"/>
+            <input type="text" name="q" id="query" style="width:85%">
+            <input type="submit" id="submit" value="Search">
+          </form>
+        </div> <!-- lucy-top_nav_box -->
+
+        <div class="clear"></div>
+
+      </div> <!-- lucy-top -->
+
+      <div id="lucy-main_content" class="container_16 lucy-white_box_3d">
+
+        <div class="grid_4" id="lucy-left_nav_box">
+          <h6>About</h6>
+            <ul>
+              <li><a href="/lucy/">Welcome</a></li>
+              <li><a href="/lucy/faq.html">FAQ</a></li>
+              <li><a href="/lucy/people.html">People</a></li>
+            </ul>
+          <h6>Resources</h6>
+            <ul>
+              <li><a href="/lucy/download.html">Download</a></li>
+              <li><a href="/lucy/mailing_lists.html">Mailing Lists</a></li>
+              <li><a href="/lucy/docs/perl/">Documentation</a></li>
+              <li><a href="http://wiki.apache.org/lucy/">Wiki</a></li>
+              <li><a href="https://issues.apache.org/jira/browse/LUCY">Issue Tracker</a></li>
+              <li><a href="/lucy/version_control.html">Version Control</a></li>
+            </ul>
+          <h6>Related Projects</h6>
+            <ul>
+              <li><a href="http://lucene.apache.org/java/">Lucene</a></li>
+              <li><a href="http://lucene.apache.org/solr/">Solr</a></li>
+              <li><a href="http://incubator.apache.org/lucene.net/">Lucene.NET</a></li>
+              <li><a href="http://lucene.apache.org/pylucene/">PyLucene</a></li>
+              <li><a href="http://lucene.apache.org/openrelevance/">Open Relevance</a></li>
+            </ul>
+        </div> <!-- lucy-left_nav_box -->
+
+        <div id="lucy-main_content_box" class="grid_9">
+          <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>{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></p>
+
+<p>{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> <!-- lucy-main_content_box --> 
+        <div class="clear"></div>
+
+      </div> <!-- lucy-main_content -->
+
+      <div id="lucy-copyright" class="container_16">
+        <p>Copyright &#169; 2010-2011 The Apache Software Foundation, Licensed under the 
+           <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.
+           <br/>
+          
+        </p>
+      </div> <!-- lucy-copyright -->
+
+    </div> <!-- lucy-rigid_wrapper -->
+
+  </body>
+</html>

Added: websites/staging/openejb/trunk/content/webadmin.cwiki
==============================================================================
--- websites/staging/openejb/trunk/content/webadmin.cwiki (added)
+++ websites/staging/openejb/trunk/content/webadmin.cwiki Sun Jul 10 04:34:53 2011
@@ -0,0 +1,95 @@
+The Webadmin is a new addition to OpenEJB 1.0 and very innovative in that it lets you plug-in your own admin beans.  Here are some screenshots:
+
+- [Main|http://openejb.apache.org/images/webadmin-main.png]
+- [EJB Details|http://openejb.apache.org/images/webadmin-ejbdetails.png]
+- [List Logs|http://openejb.apache.org/images/webadmin-listlogs.png]
+- [System Properties|http://openejb.apache.org/images/webadmin-properties.png]
+- [JNDI Viewer|http://openejb.apache.org/images/webadmin-viewjndi.png]
+- [EJB Viewer|http://openejb.apache.org/images/webadmin-ejbviewer.png]
+- [Object and EJB Invoker|http://openejb.apache.org/images/webadmin-objectinvoker.png]
+
+h2. Enabling the Webadmin in 1.0 beta 1
+
+The Webadmin console is in the 1.0 beta 1 release.  To enable it, simply move into the openejb.home directory and *copy* the openejb-webadmin-main.jar from the _beans_ directory into the _lib_ directory.  Then start the server.
+
+{noformat}
+mingus:~/
+$ cd /usr/local/openejb-1.0-beta1
+
+mingus:/usr/local/openejb-1.0-beta1 03:37:33 
+$ cp beans/openejb-webadmin-main.jar lib/
+
+mingus:/usr/local/openejb-1.0-beta1 03:37:52 
+$ ./bin/openejb start
+OPENEJB_HOME = /usr/local/openejb-1.0-beta1
+OpenEJB 1.0-beta1    build: 20050829-2233
+http://www.openejb.org
+resources 1
+OpenEJB ready.
+[init] OpenEJB Remote Server
+  ** Starting Services **
+  NAME                 IP              PORT  
+  admin thread         127.0.0.1       4200  
+  ejbd                 127.0.0.1       4201  
+  telnet               127.0.0.1       4202  
+  webadmin             127.0.0.1       4203  
+-------
+Ready!
+{noformat}
+
+Now you can open your browser to go to http://localhost:4203/
+
+h1. WebAdmin Beans
+
+To create an EJB and have it included as part of the WebAdmin, simply subclass from WebAdminBean and include it in your ejb-jar.xml file as such:
+
+{code:xml|title=ejb-jar.xml} 
+  <session>
+    <description>A JNDI viewer</description>
+    <ejb-name>webadmin/ViewJndi</ejb-name>
+    <home>org.openejb.webadmin.HttpHome</home>
+    <remote>org.openejb.webadmin.HttpObject</remote>
+    <ejb-class>org.openejb.webadmin.clienttools.ViewJndiBean</ejb-class>
+    <session-type>Stateless</session-type>
+    <transaction-type>Bean</transaction-type>
+  </session>
+{code}
+
+The ejb-name is used to create the menus and should follow the format of 'menu-section/menu-item'. WebAdminBeans are grouped together by the 'menu-section' portion of their ejb-name. The 'menu-item' is the clickable link that causes the EJB code to be execute. Very simple and makes it possible to package administrative components with your EJB applications.
+
+h1. WebAdmin Plugins
+
+Here is a project that already takes advantage of the new feature. [BeanGen|http://beangen.sourceforge.net]
+
+h1. Developers guide
+Below is David Blevins' email on how webadmin worked. Please have a look at the text below before you start working on porting the existing WebAdmin to version 3.
+
+Plain old stateless beans were used as the "servlets".  To make a bean that would show up in the Webadmin Console you simply had to implement the HttpBean interface (i think it's now called HttpListener) and give your bean a deploymentId following this format "webadmin/{section}/\{page\}".  Anyone could add to the Webadmin console by doing both of these things, which is really cool as people developing EJB apps can also deploy beans for administering those apps right in the exact same jar.  This is not only easy for packaging but means new sections can be added/removed on the fly.
+
+Using the described "webadmin/{section}/\{page\}" deploymentId format, things end up automagically grouped in the JNDI tree.  There's a 'webadmin' context we grab which will contain any number of "section" contexts ("ClientTools", "EJBGenerator", etc.).  Each of those section subcontexts will contain several beans which we will use to make the pages.  Making the menu is pretty easy as we just iterate over the webadmin section of the global jndi tree.
+
+When an http request came in we just took the path part of the GET or POST request, prepended "webadmin/" and then went looking for a bean with that deployment id and invoked it via it's HttpBean (now called HttpListener) interface passing in a HttpRequest and HttpResponse objects which are trimmed down versions of similar servlet classes.
+There'll be some changes to this as now we support our plain ejb protocol over our http implementation, so the two will have to find a way to share the URL space.  See the openejb-http module.
+
+To implement session state, we had a stateful session bean implementing an HttpSession interface (again, similar to the servlet equivalent) and simply wrote the internal ID of the bean instance into a Cookie sent to the browser.  For some reason we would write the javax.ejb.Handle of the stateful bean's EJBObject to disk and
+read it back out on subsequent requests then used it to get a reference to the EJBObject again.  I'm not sure why we didn't just keep a static hashmap and put the EJBObject right in it using an ID we could just make up like UUID (that would have been way simpler).
+
+We had a standard superclass we favored for beans that implemented the HttpBean (HttpListener) interface that did templating and the aforementioned menu  construction.  The templating was perhaps too tricky as we used a non-printable character to determine where to insert data.  Now we could just use swizzle-stream for some pretty decent templating ability or even velocity.  I'd be hesitant to endorse velocity as we already have a dep on swizzle-stream and wouldn't want to see us add another meg to our distro size if we can avoid it -- we have like 3 times as many deps as 1.0 did and we should probably start tightening the belt.
+
+To serve static things like images, we had a "default" HttpBean which searched for the items in the classpath and wrote them into the response setting the mime type, etc. correctly.  One thing that we never did which still needs to happen is that the bean didn't have the logic to set the modification information into the response so the "If modified since" header which would allow the browser to rely on it's cache instead of requesting the same images over and over again.
+
+That pretty much covers the way it was put together.
+
+
+  - The Jndi Viewer, Class Viewer, Ejb Viewer, and Object Invoker
+were written by yours truly
+  - The EJB Generator was written by Jeremy Whitlock
+  - Everything else was written by Tim Urberg.  Tim was "WebAdmin guy" for a good long while.  Before Tim came along the webadmin was just some experimental code I    
+    had in a branch, he did more than he realizes by putting his energy into it -- active people attract/ create more active people.  Maybe we can convince him to 
+    come back and work on it ;)
+
+And of course I have to mention our own Paulo Lopes who wrote a really cool project out in SF.net (http://beangen.sourceforge.net/) which was the first plugin for the OpenEJB Webadmin.  He wrote it before we even had shipped a release containing the Webadmin or had any docs at all on it, which in my mind shows just how neat the idea of using ejb's and simple conventions to do the console really is.
+
+Some notes going forward is that we have a truck load of meta-data now available via SystemInstance.get().get (OpenEjbConfiguration.class).  Certainly JSR-77 is one option, but we could do far better with plain old java code.  That tree is the primary source of meta-data for OpenEJB, it's what was used to construct every container, bean, resource adapter, database connector and *everything* in the system (well, sans the protocols).  Someone new to the project can look at it and understand it without having to read any abstract specs.  Something to consider.  The tree is read only in it's function, however it is possible to copy then edit and make new containers, etc. based on existing definitions.
+
+Additionally, using this same data structure it's possible to show the potential services available via the service-jar.xml files in the classpath that detail containers, resource adapters, database connectors, etc. which can be configured/created at runtime.  So we could also display a sort of catalogue of components (aka. services) that someone could click and deploy via the console.

Added: websites/staging/openejb/trunk/content/webadmin.html
==============================================================================
--- websites/staging/openejb/trunk/content/webadmin.html (added)
+++ websites/staging/openejb/trunk/content/webadmin.html Sun Jul 10 04:34:53 2011
@@ -0,0 +1,286 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+    <title>Webadmin</title>
+    <link rel="stylesheet" type="text/css" media="screen" href="http://incubator.apache.org/lucy/css/lucy.css">
+  </head>
+
+  <body>
+
+    <div id="lucy-rigid_wrapper">
+
+      <div id="lucy-top" class="container_16 lucy-white_box_3d">
+
+        <div id="lucy-logo_box" class="grid_8">
+          <a href="/OpenEJB/"><img src="http://openejb.apache.org/images/logo_openejb.gif" alt="Apache OpenEJB™"></a>
+        </div> <!-- lucy-logo_box -->
+
+        <div #id="lucy-top_nav_box" class="grid_8">
+          <div id="lucy-top_nav_bar" class="container_8">
+            <ul>
+              <li><a href="http://www.apache.org/" title="Apache Software Foundation">Apache Software Foundation</a></li>
+              <li><a href="http://www.apache.org/licenses/" title="License">License</a></li>
+              <li><a href="http://www.apache.org/foundation/sponsorship.html" title="Sponsorship">Sponsorship</a></li>
+              <li><a href="http://www.apache.org/foundation/thanks.html" title="Thanks">Thanks</a></li>
+              <li><a href="http://www.apache.org/security/ " title="Security">Security</a></li>
+            </ul>
+          </div> <!-- lucy-top_nav_bar -->
+          <p><a href="http://www.apache.org/">Apache</a>&nbsp;&raquo&nbsp;<a href="/">Incubator</a></p>
+          <form name="lucy-top_search_box" id="lucy-top_search_box" action="http://www.google.com/search" method="get">
+            <input value="*.apache.org" name="sitesearch" type="hidden"/>
+            <input type="text" name="q" id="query" style="width:85%">
+            <input type="submit" id="submit" value="Search">
+          </form>
+        </div> <!-- lucy-top_nav_box -->
+
+        <div class="clear"></div>
+
+      </div> <!-- lucy-top -->
+
+      <div id="lucy-main_content" class="container_16 lucy-white_box_3d">
+
+        <div class="grid_4" id="lucy-left_nav_box">
+          <h6>About</h6>
+            <ul>
+              <li><a href="/lucy/">Welcome</a></li>
+              <li><a href="/lucy/faq.html">FAQ</a></li>
+              <li><a href="/lucy/people.html">People</a></li>
+            </ul>
+          <h6>Resources</h6>
+            <ul>
+              <li><a href="/lucy/download.html">Download</a></li>
+              <li><a href="/lucy/mailing_lists.html">Mailing Lists</a></li>
+              <li><a href="/lucy/docs/perl/">Documentation</a></li>
+              <li><a href="http://wiki.apache.org/lucy/">Wiki</a></li>
+              <li><a href="https://issues.apache.org/jira/browse/LUCY">Issue Tracker</a></li>
+              <li><a href="/lucy/version_control.html">Version Control</a></li>
+            </ul>
+          <h6>Related Projects</h6>
+            <ul>
+              <li><a href="http://lucene.apache.org/java/">Lucene</a></li>
+              <li><a href="http://lucene.apache.org/solr/">Solr</a></li>
+              <li><a href="http://incubator.apache.org/lucene.net/">Lucene.NET</a></li>
+              <li><a href="http://lucene.apache.org/pylucene/">PyLucene</a></li>
+              <li><a href="http://lucene.apache.org/openrelevance/">Open Relevance</a></li>
+            </ul>
+        </div> <!-- lucy-left_nav_box -->
+
+        <div id="lucy-main_content_box" class="grid_9">
+          <p>The Webadmin is a new addition to OpenEJB 1.0 and very innovative in that
+it lets you plug-in your own admin beans.  Here are some screenshots:</p>
+
+<ul>
+<li><a href="http://openejb.apache.org/images/webadmin-main.png">Main</a></li>
+<li><a href="http://openejb.apache.org/images/webadmin-ejbdetails.png">EJB Details</a></li>
+<li><a href="http://openejb.apache.org/images/webadmin-listlogs.png">List Logs</a></li>
+<li><a href="http://openejb.apache.org/images/webadmin-properties.png">System Properties</a></li>
+<li><a href="http://openejb.apache.org/images/webadmin-viewjndi.png">JNDI Viewer</a></li>
+<li><a href="http://openejb.apache.org/images/webadmin-ejbviewer.png">EJB Viewer</a></li>
+<li><a href="http://openejb.apache.org/images/webadmin-objectinvoker.png">Object and EJB Invoker</a></li>
+</ul>
+
+<p><a name="Webadmin-EnablingtheWebadminin1.0beta1"></a></p>
+
+<h2>Enabling the Webadmin in 1.0 beta 1</h2>
+
+<p>The Webadmin console is in the 1.0 beta 1 release.  To enable it, simply
+move into the openejb.home directory and <em>copy</em> the
+openejb-webadmin-main.jar from the <em>beans</em> directory into the <em>lib</em>
+directory.  Then start the server.</p>
+
+<pre><code>mingus:~/
+$ cd /usr/local/openejb-1.0-beta1
+
+mingus:/usr/local/openejb-1.0-beta1 03:37:33 
+$ cp beans/openejb-webadmin-main.jar lib/
+
+mingus:/usr/local/openejb-1.0-beta1 03:37:52 
+$ ./bin/openejb start
+OPENEJB_HOME = /usr/local/openejb-1.0-beta1
+OpenEJB 1.0-beta1    build: 20050829-2233
+http://www.openejb.org
+resources 1
+OpenEJB ready.
+[init]
+</code></pre>
+
+<p>OpenEJB Remote Server
+      <em>* Starting Services *</em>
+      NAME             IP          PORT <br />
+      admin thread         127.0.0.1       4200 <br />
+      ejbd             127.0.0.1       4201 <br />
+      telnet           127.0.0.1       4202 <br />
+      webadmin         127.0.0.1       4203 <br />
+    -------
+    Ready!</p>
+
+<p>Now you can open your browser to go to http://localhost:4203/</p>
+
+<p><a name="Webadmin-WebAdminBeans"></a></p>
+
+<h1>WebAdmin Beans</h1>
+
+<p>To create an EJB and have it included as part of the WebAdmin, simply
+subclass from WebAdminBean and include it in your ejb-jar.xml file as such:</p>
+
+<p>{code:xml|title=ejb-jar.xml} 
+  <session>
+    <description>A JNDI viewer</description>
+    <ejb-name>webadmin/ViewJndi</ejb-name>
+    <home>org.openejb.webadmin.HttpHome</home>
+    <remote>org.openejb.webadmin.HttpObject</remote>
+    <ejb-class>org.openejb.webadmin.clienttools.ViewJndiBean</ejb-class>
+    <session-type>Stateless</session-type>
+    <transaction-type>Bean</transaction-type>
+  </session></p>
+
+<pre><code>The ejb-name is used to create the menus and should follow the format of
+</code></pre>
+
+<p>'menu-section/menu-item'. WebAdminBeans are grouped together by the
+'menu-section' portion of their ejb-name. The 'menu-item' is the clickable
+link that causes the EJB code to be execute. Very simple and makes it
+possible to package administrative components with your EJB applications.</p>
+
+<pre><code>h1. WebAdmin Plugins
+
+Here is a project that already takes advantage of the new feature. [BeanGen|http://beangen.sourceforge.net]
+
+h1. Developers guide
+Below is David Blevins' email on how webadmin worked. Please have a look at
+</code></pre>
+
+<p>the text below before you start working on porting the existing WebAdmin to
+version 3.</p>
+
+<pre><code>Plain old stateless beans were used as the "servlets".  To make a bean that
+</code></pre>
+
+<p>would show up in the Webadmin Console you simply had to implement the
+HttpBean interface (i think it's now called HttpListener) and give your
+bean a deploymentId following this format "webadmin/{section}/{page}". 
+Anyone could add to the Webadmin console by doing both of these things,
+which is really cool as people developing EJB apps can also deploy beans
+for administering those apps right in the exact same jar.  This is not only
+easy for packaging but means new sections can be added/removed on the fly.</p>
+
+<pre><code>Using the described "webadmin/{section}/\{page\}" deploymentId format,
+</code></pre>
+
+<p>things end up automagically grouped in the JNDI tree.  There's a 'webadmin'
+context we grab which will contain any number of "section" contexts
+("ClientTools", "EJBGenerator", etc.).  Each of those section subcontexts
+will contain several beans which we will use to make the pages.  Making the
+menu is pretty easy as we just iterate over the webadmin section of the
+global jndi tree.</p>
+
+<pre><code>When an http request came in we just took the path part of the GET or POST
+</code></pre>
+
+<p>request, prepended "webadmin/" and then went looking for a bean with that
+deployment id and invoked it via it's HttpBean (now called HttpListener)
+interface passing in a HttpRequest and HttpResponse objects which are
+trimmed down versions of similar servlet classes.
+    There'll be some changes to this as now we support our plain ejb protocol
+over our http implementation, so the two will have to find a way to share
+the URL space.  See the openejb-http module.</p>
+
+<pre><code>To implement session state, we had a stateful session bean implementing an
+</code></pre>
+
+<p>HttpSession interface (again, similar to the servlet equivalent) and simply
+wrote the internal ID of the bean instance into a Cookie sent to the
+browser.  For some reason we would write the javax.ejb.Handle of the
+stateful bean's EJBObject to disk and
+    read it back out on subsequent requests then used it to get a reference to
+the EJBObject again.  I'm not sure why we didn't just keep a static hashmap
+and put the EJBObject right in it using an ID we could just make up like
+UUID (that would have been way simpler).</p>
+
+<pre><code>We had a standard superclass we favored for beans that implemented the
+</code></pre>
+
+<p>HttpBean (HttpListener) interface that did templating and the
+aforementioned menu  construction.  The templating was perhaps too tricky
+as we used a non-printable character to determine where to insert data. 
+Now we could just use swizzle-stream for some pretty decent templating
+ability or even velocity.  I'd be hesitant to endorse velocity as we
+already have a dep on swizzle-stream and wouldn't want to see us add
+another meg to our distro size if we can avoid it -- we have like 3 times
+as many deps as 1.0 did and we should probably start tightening the belt.</p>
+
+<pre><code>To serve static things like images, we had a "default" HttpBean which
+</code></pre>
+
+<p>searched for the items in the classpath and wrote them into the response
+setting the mime type, etc. correctly.  One thing that we never did which
+still needs to happen is that the bean didn't have the logic to set the
+modification information into the response so the "If modified since"
+header which would allow the browser to rely on it's cache instead of
+requesting the same images over and over again.</p>
+
+<pre><code>That pretty much covers the way it was put together.
+
+
+  - The Jndi Viewer, Class Viewer, Ejb Viewer, and Object Invoker
+were written by yours truly
+  - The EJB Generator was written by Jeremy Whitlock
+  - Everything else was written by Tim Urberg.  Tim was "WebAdmin guy" for
+</code></pre>
+
+<p>a good long while.  Before Tim came along the webadmin was just some
+experimental code I <br />
+        had in a branch, he did more than he realizes by putting his energy
+into it -- active people attract/ create more active people.  Maybe we can
+convince him to 
+        come back and work on it ;)</p>
+
+<pre><code>And of course I have to mention our own Paulo Lopes who wrote a really cool
+</code></pre>
+
+<p>project out in SF.net (http://beangen.sourceforge.net/) which was the first
+plugin for the OpenEJB Webadmin.  He wrote it before we even had shipped a
+release containing the Webadmin or had any docs at all on it, which in my
+mind shows just how neat the idea of using ejb's and simple conventions to
+do the console really is.</p>
+
+<pre><code>Some notes going forward is that we have a truck load of meta-data now
+</code></pre>
+
+<p>available via SystemInstance.get().get (OpenEjbConfiguration.class). 
+Certainly JSR-77 is one option, but we could do far better with plain old
+java code.  That tree is the primary source of meta-data for OpenEJB, it's
+what was used to construct every container, bean, resource adapter,
+database connector and <em>everything</em> in the system (well, sans the
+protocols).  Someone new to the project can look at it and understand it
+without having to read any abstract specs.  Something to consider.  The
+tree is read only in it's function, however it is possible to copy then
+edit and make new containers, etc. based on existing definitions.</p>
+
+<pre><code>Additionally, using this same data structure it's possible to show the
+</code></pre>
+
+<p>potential services available via the service-jar.xml files in the classpath
+that detail containers, resource adapters, database connectors, etc. which
+can be configured/created at runtime.  So we could also display a sort of
+catalogue of components (aka. services) that someone could click and deploy
+via the console.</p>
+
+        </div> <!-- lucy-main_content_box --> 
+        <div class="clear"></div>
+
+      </div> <!-- lucy-main_content -->
+
+      <div id="lucy-copyright" class="container_16">
+        <p>Copyright &#169; 2010-2011 The Apache Software Foundation, Licensed under the 
+           <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.
+           <br/>
+          
+        </p>
+      </div> <!-- lucy-copyright -->
+
+    </div> <!-- lucy-rigid_wrapper -->
+
+  </body>
+</html>

Added: websites/staging/openejb/trunk/content/webobjects.cwiki
==============================================================================
--- websites/staging/openejb/trunk/content/webobjects.cwiki (added)
+++ websites/staging/openejb/trunk/content/webobjects.cwiki Sun Jul 10 04:34:53 2011
@@ -0,0 +1,4 @@
+
+We don't officially support the WebObjects OpenEJB integration, but we are happy to offer up this page for those users to place information on usage of EJBs in WebObjects 5.1.
+
+Click the edit link above, sign up for an wiki account and edit away!

Added: websites/staging/openejb/trunk/content/webobjects.html
==============================================================================
--- websites/staging/openejb/trunk/content/webobjects.html (added)
+++ websites/staging/openejb/trunk/content/webobjects.html Sun Jul 10 04:34:53 2011
@@ -0,0 +1,92 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+    <title>WebObjects</title>
+    <link rel="stylesheet" type="text/css" media="screen" href="http://incubator.apache.org/lucy/css/lucy.css">
+  </head>
+
+  <body>
+
+    <div id="lucy-rigid_wrapper">
+
+      <div id="lucy-top" class="container_16 lucy-white_box_3d">
+
+        <div id="lucy-logo_box" class="grid_8">
+          <a href="/OpenEJB/"><img src="http://openejb.apache.org/images/logo_openejb.gif" alt="Apache OpenEJB™"></a>
+        </div> <!-- lucy-logo_box -->
+
+        <div #id="lucy-top_nav_box" class="grid_8">
+          <div id="lucy-top_nav_bar" class="container_8">
+            <ul>
+              <li><a href="http://www.apache.org/" title="Apache Software Foundation">Apache Software Foundation</a></li>
+              <li><a href="http://www.apache.org/licenses/" title="License">License</a></li>
+              <li><a href="http://www.apache.org/foundation/sponsorship.html" title="Sponsorship">Sponsorship</a></li>
+              <li><a href="http://www.apache.org/foundation/thanks.html" title="Thanks">Thanks</a></li>
+              <li><a href="http://www.apache.org/security/ " title="Security">Security</a></li>
+            </ul>
+          </div> <!-- lucy-top_nav_bar -->
+          <p><a href="http://www.apache.org/">Apache</a>&nbsp;&raquo&nbsp;<a href="/">Incubator</a></p>
+          <form name="lucy-top_search_box" id="lucy-top_search_box" action="http://www.google.com/search" method="get">
+            <input value="*.apache.org" name="sitesearch" type="hidden"/>
+            <input type="text" name="q" id="query" style="width:85%">
+            <input type="submit" id="submit" value="Search">
+          </form>
+        </div> <!-- lucy-top_nav_box -->
+
+        <div class="clear"></div>
+
+      </div> <!-- lucy-top -->
+
+      <div id="lucy-main_content" class="container_16 lucy-white_box_3d">
+
+        <div class="grid_4" id="lucy-left_nav_box">
+          <h6>About</h6>
+            <ul>
+              <li><a href="/lucy/">Welcome</a></li>
+              <li><a href="/lucy/faq.html">FAQ</a></li>
+              <li><a href="/lucy/people.html">People</a></li>
+            </ul>
+          <h6>Resources</h6>
+            <ul>
+              <li><a href="/lucy/download.html">Download</a></li>
+              <li><a href="/lucy/mailing_lists.html">Mailing Lists</a></li>
+              <li><a href="/lucy/docs/perl/">Documentation</a></li>
+              <li><a href="http://wiki.apache.org/lucy/">Wiki</a></li>
+              <li><a href="https://issues.apache.org/jira/browse/LUCY">Issue Tracker</a></li>
+              <li><a href="/lucy/version_control.html">Version Control</a></li>
+            </ul>
+          <h6>Related Projects</h6>
+            <ul>
+              <li><a href="http://lucene.apache.org/java/">Lucene</a></li>
+              <li><a href="http://lucene.apache.org/solr/">Solr</a></li>
+              <li><a href="http://incubator.apache.org/lucene.net/">Lucene.NET</a></li>
+              <li><a href="http://lucene.apache.org/pylucene/">PyLucene</a></li>
+              <li><a href="http://lucene.apache.org/openrelevance/">Open Relevance</a></li>
+            </ul>
+        </div> <!-- lucy-left_nav_box -->
+
+        <div id="lucy-main_content_box" class="grid_9">
+          <p>We don't officially support the WebObjects OpenEJB integration, but we are
+happy to offer up this page for those users to place information on usage
+of EJBs in WebObjects 5.1.</p>
+
+<p>Click the edit link above, sign up for an wiki account and edit away!</p>
+
+        </div> <!-- lucy-main_content_box --> 
+        <div class="clear"></div>
+
+      </div> <!-- lucy-main_content -->
+
+      <div id="lucy-copyright" class="container_16">
+        <p>Copyright &#169; 2010-2011 The Apache Software Foundation, Licensed under the 
+           <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.
+           <br/>
+          
+        </p>
+      </div> <!-- lucy-copyright -->
+
+    </div> <!-- lucy-rigid_wrapper -->
+
+  </body>
+</html>

Added: websites/staging/openejb/trunk/content/what-is-openejb-?.cwiki
==============================================================================
    (empty)

Added: websites/staging/openejb/trunk/content/what-is-openejb-?.html
==============================================================================
--- websites/staging/openejb/trunk/content/what-is-openejb-?.html (added)
+++ websites/staging/openejb/trunk/content/what-is-openejb-?.html Sun Jul 10 04:34:53 2011
@@ -0,0 +1,88 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+    <title>What is OpenEJB ?</title>
+    <link rel="stylesheet" type="text/css" media="screen" href="http://incubator.apache.org/lucy/css/lucy.css">
+  </head>
+
+  <body>
+
+    <div id="lucy-rigid_wrapper">
+
+      <div id="lucy-top" class="container_16 lucy-white_box_3d">
+
+        <div id="lucy-logo_box" class="grid_8">
+          <a href="/OpenEJB/"><img src="http://openejb.apache.org/images/logo_openejb.gif" alt="Apache OpenEJB™"></a>
+        </div> <!-- lucy-logo_box -->
+
+        <div #id="lucy-top_nav_box" class="grid_8">
+          <div id="lucy-top_nav_bar" class="container_8">
+            <ul>
+              <li><a href="http://www.apache.org/" title="Apache Software Foundation">Apache Software Foundation</a></li>
+              <li><a href="http://www.apache.org/licenses/" title="License">License</a></li>
+              <li><a href="http://www.apache.org/foundation/sponsorship.html" title="Sponsorship">Sponsorship</a></li>
+              <li><a href="http://www.apache.org/foundation/thanks.html" title="Thanks">Thanks</a></li>
+              <li><a href="http://www.apache.org/security/ " title="Security">Security</a></li>
+            </ul>
+          </div> <!-- lucy-top_nav_bar -->
+          <p><a href="http://www.apache.org/">Apache</a>&nbsp;&raquo&nbsp;<a href="/">Incubator</a></p>
+          <form name="lucy-top_search_box" id="lucy-top_search_box" action="http://www.google.com/search" method="get">
+            <input value="*.apache.org" name="sitesearch" type="hidden"/>
+            <input type="text" name="q" id="query" style="width:85%">
+            <input type="submit" id="submit" value="Search">
+          </form>
+        </div> <!-- lucy-top_nav_box -->
+
+        <div class="clear"></div>
+
+      </div> <!-- lucy-top -->
+
+      <div id="lucy-main_content" class="container_16 lucy-white_box_3d">
+
+        <div class="grid_4" id="lucy-left_nav_box">
+          <h6>About</h6>
+            <ul>
+              <li><a href="/lucy/">Welcome</a></li>
+              <li><a href="/lucy/faq.html">FAQ</a></li>
+              <li><a href="/lucy/people.html">People</a></li>
+            </ul>
+          <h6>Resources</h6>
+            <ul>
+              <li><a href="/lucy/download.html">Download</a></li>
+              <li><a href="/lucy/mailing_lists.html">Mailing Lists</a></li>
+              <li><a href="/lucy/docs/perl/">Documentation</a></li>
+              <li><a href="http://wiki.apache.org/lucy/">Wiki</a></li>
+              <li><a href="https://issues.apache.org/jira/browse/LUCY">Issue Tracker</a></li>
+              <li><a href="/lucy/version_control.html">Version Control</a></li>
+            </ul>
+          <h6>Related Projects</h6>
+            <ul>
+              <li><a href="http://lucene.apache.org/java/">Lucene</a></li>
+              <li><a href="http://lucene.apache.org/solr/">Solr</a></li>
+              <li><a href="http://incubator.apache.org/lucene.net/">Lucene.NET</a></li>
+              <li><a href="http://lucene.apache.org/pylucene/">PyLucene</a></li>
+              <li><a href="http://lucene.apache.org/openrelevance/">Open Relevance</a></li>
+            </ul>
+        </div> <!-- lucy-left_nav_box -->
+
+        <div id="lucy-main_content_box" class="grid_9">
+          
+
+        </div> <!-- lucy-main_content_box --> 
+        <div class="clear"></div>
+
+      </div> <!-- lucy-main_content -->
+
+      <div id="lucy-copyright" class="container_16">
+        <p>Copyright &#169; 2010-2011 The Apache Software Foundation, Licensed under the 
+           <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.
+           <br/>
+          
+        </p>
+      </div> <!-- lucy-copyright -->
+
+    </div> <!-- lucy-rigid_wrapper -->
+
+  </body>
+</html>

Added: websites/staging/openejb/trunk/content/writing-validation-tests.cwiki
==============================================================================
--- websites/staging/openejb/trunk/content/writing-validation-tests.cwiki (added)
+++ websites/staging/openejb/trunk/content/writing-validation-tests.cwiki Sun Jul 10 04:34:53 2011
@@ -0,0 +1,87 @@
+h2. Summary
+
+Validation is a critical and integral part of the project. If you are writing some code which validates some rules, you should definitely write a test for it. A little validation test framework is available to write tests specifically for Validation. This page explains the details of writing such tests using example snippets.
+
+h2. The Validation Framework
+
+# *org.apache.openejb.config.ConfigurationFactory* uses a _chain_ of *org.apache.openejb.config.DynamicDeployer* implementations. One of the implementations in the _chain_ is *org.apache.openejb.config.ValidateModules*. *ValidateModules* is conditionally added to the _chain_ if the property *openejb.validation.skip=false*. If this property is false, then *ValidateModules* is used to kick off the _Validation Framework_.
+{snippet:id=code|url=openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java|lang=java}
+# Internally ValidateModules uses the *AppValidator.validate()* method.
+{snippet:id=code|url=openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ValidateModules.java|lang=java}
+# This method then performs validation using a number of rules. _A validation rule/s is represented by a class implementing ValidationRule_. In fact, all the classes checking the validation rules , extend ValidationBase, which further implements ValidationRule.
+{gliffy:name=Class Diagram|align=left|size=L|version=2}
+The _list of rules_ being executed can actually be found in the following method of AppValidator.
+{snippet:id=code1|url=openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppValidator.java|lang=java}
+# The above rules are then executed one by one
+{snippet:id=code2|url=openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppValidator.java|lang=java}
+# Each module has an attached ValidationContext , which maintains a list of failures, warnings and errors. As the above rules are being invoked, the failure/errors/warnings for a module are being added to its ValidationContext. Every Validation failure has an associated message which can be found in *org/apache/openejb/config/rules/messages.properties*. A message has three levels as explained below:
+{code}
+Format for the different levels follows this spirit:
+
+1. Should be short and fixed such that someone could search/grep for it
+without having to know/use regular expressions.  These tend to be similar
+to the message key.
+
+2. Intended to contain the issue expressed in 1 with only the essential
+details, should not line wrap if possible.  Be terse.
+
+3. Teacher's assistant.  A much more conversational and possibly more detailed
+explanation of the issue, should tell the user what to do to fix the problem.
+I.e. don't just point out what is wrong, also point out what is right.  Use
+several lines if needed.
+{code}
+Here is an *example validation message*
+{code}
+# 0 - method name
+# 1 - full method
+# 2 - remote|home
+# 3 - interface name
+# 4 - EJB Class name
+1.no.busines.method       No such business method
+2.no.busines.method       Business method {0} not implemented.
+3.no.busines.method       Business method {1} not implemented. The method was declared in the {2} interface {3}, but not implemented in the ejb class {4}
+{code}
+# The validation framework does not stop processing on the first validation failure, but keeps going and checking for other validation errors and reports them all to the user. This allows the user to fix all errors in one go and re-attempt deploying the application.
+
+h2. The Validation Test Framework
+
+
+
+# The test framework is specifically written with the following goals in mind:
+## &nbsp; It should be easy to write the test, and the framework should do the boiler-plate work, the test author just needs to provide the relevant info
+## &nbsp; It should report the test coverage i.e. the framework should generate a report regarding which keys in messages.properties have tests written for them and what is the corresponding Test class/es which test for the validation rule associated with that key
+## &nbsp; It should ensure that if a test is being written for a specific message key, then that key should exist in the messages.properties file
+# Lets break down the framework by using an example:
+{snippet:id=code|url=openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckInjectionTargetsTest.java|lang=java}
+## &nbsp; The first thing to note is that we are running the test using our own custom runner i.e. @RunWith(ValidationRunner.class). This runner ensures that the keys we are testing, actually exist in the messages.properties file. It does a lot more, as we shall see later
+## &nbsp;The test method
+### &nbsp; Can be given any name
+### &nbsp; Must be annotated with @Keys and CANNOT be annotated with @Test. The rest of the JUnit annotations can be used
+### &nbsp; Must return one of EjbJar / EjbModule / AppModule. The returned EjbJar/EjbModule/AppModule will be specifically created to cause one or more validation errors/warnings/failures.
+## Following annotations are provided by the framework
+### @Keys : is a collection of zero or more @Key
+### @Key : represents a key for which this test is being written. A @Key can be of type FAILURE or WARNING or ERROR. Default value is FAILURE. As seen in the example above, the test() method is expecting two warnings for the key injectionTarget.nameContainsSet. If count is not equal to 2 or some other Validation Failure/Warning/Error was also thrown from the method, then the test fails.
+{note:title=Be Careful}
+The test must cause a Validation Failure otherwise the test framework does not get invoked. For example, in the above code, a Key of type WARNING is being tested, however the test is purposely being failed by putting an @AroundInvoke around the method with zero arguments
+{note}
+
+# Once you have written the test and successfully run it, you now need to generate the report. Simply invoke the following maven command
+{code}
+mvn test -Dtest=ValidationKeysAuditorTest -DconfluenceUsername=YourConfluenceUsername -DconfluencePassword=YourConfluencePassword
+{code}
+The above command will create a complete test coverage report and post it to this location [OPENEJB:Validation Keys Audit Report]
+
+{info:title=Quick facts about ValidationRunner and things to keep in mind while writing tests}
+
+This class is created specifically to write tests which test OpenEjb validation code. Specifically, it is used to check the usage of keys defined in org.apache.openejb.config.rules.Messages.properties. To use this runner, simply annotate your test case with @RunWith(ValidationRunner.class). Here are some things to keep in mind when writing tests:
+# A test method needs to be annotated with org.apache.openejb.config.rules.Keys instead of the org.junit.Test
+# Any usage of the @Test annotation will be ignored
+# If the @Keys and @Test annotation are used together on a test method, then the TestCase will error out
+# Every test method should create a EjbJar or EjbModule or AppModule and return it from the method. It should list the keys being tested in the @Keys annotation
+# The runner will invoke the test method and use the Assembler and ConfigurationFactory to create the application
+# This will kick off validation and this Runner will catch ValidationFailureException and make sure that all the keys specified in the @Keys annotation show up
+in the ValidationFailureException
+# If the keys listed in the @Keys annotation match the keys found in the ValidationFailureException, the test passes, else the test fails.
+# This Runner also validates that the keys specified in the @Keys annotation are also available in the org.apache.openejb.config.rules.Messages.properties file. If the key is not found, then the Runner throws and exception resulting in your test case not being allowed to run.
+# Sometimes you want to write a test where you do not want any ValidationFailureException to be thrown, in those scenarios, simply annotate your test with @Keys and do not specify any @Key in it
+{info}
\ No newline at end of file

Added: websites/staging/openejb/trunk/content/writing-validation-tests.html
==============================================================================
--- websites/staging/openejb/trunk/content/writing-validation-tests.html (added)
+++ websites/staging/openejb/trunk/content/writing-validation-tests.html Sun Jul 10 04:34:53 2011
@@ -0,0 +1,257 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+    <title>Writing Validation Tests</title>
+    <link rel="stylesheet" type="text/css" media="screen" href="http://incubator.apache.org/lucy/css/lucy.css">
+  </head>
+
+  <body>
+
+    <div id="lucy-rigid_wrapper">
+
+      <div id="lucy-top" class="container_16 lucy-white_box_3d">
+
+        <div id="lucy-logo_box" class="grid_8">
+          <a href="/OpenEJB/"><img src="http://openejb.apache.org/images/logo_openejb.gif" alt="Apache OpenEJB™"></a>
+        </div> <!-- lucy-logo_box -->
+
+        <div #id="lucy-top_nav_box" class="grid_8">
+          <div id="lucy-top_nav_bar" class="container_8">
+            <ul>
+              <li><a href="http://www.apache.org/" title="Apache Software Foundation">Apache Software Foundation</a></li>
+              <li><a href="http://www.apache.org/licenses/" title="License">License</a></li>
+              <li><a href="http://www.apache.org/foundation/sponsorship.html" title="Sponsorship">Sponsorship</a></li>
+              <li><a href="http://www.apache.org/foundation/thanks.html" title="Thanks">Thanks</a></li>
+              <li><a href="http://www.apache.org/security/ " title="Security">Security</a></li>
+            </ul>
+          </div> <!-- lucy-top_nav_bar -->
+          <p><a href="http://www.apache.org/">Apache</a>&nbsp;&raquo&nbsp;<a href="/">Incubator</a></p>
+          <form name="lucy-top_search_box" id="lucy-top_search_box" action="http://www.google.com/search" method="get">
+            <input value="*.apache.org" name="sitesearch" type="hidden"/>
+            <input type="text" name="q" id="query" style="width:85%">
+            <input type="submit" id="submit" value="Search">
+          </form>
+        </div> <!-- lucy-top_nav_box -->
+
+        <div class="clear"></div>
+
+      </div> <!-- lucy-top -->
+
+      <div id="lucy-main_content" class="container_16 lucy-white_box_3d">
+
+        <div class="grid_4" id="lucy-left_nav_box">
+          <h6>About</h6>
+            <ul>
+              <li><a href="/lucy/">Welcome</a></li>
+              <li><a href="/lucy/faq.html">FAQ</a></li>
+              <li><a href="/lucy/people.html">People</a></li>
+            </ul>
+          <h6>Resources</h6>
+            <ul>
+              <li><a href="/lucy/download.html">Download</a></li>
+              <li><a href="/lucy/mailing_lists.html">Mailing Lists</a></li>
+              <li><a href="/lucy/docs/perl/">Documentation</a></li>
+              <li><a href="http://wiki.apache.org/lucy/">Wiki</a></li>
+              <li><a href="https://issues.apache.org/jira/browse/LUCY">Issue Tracker</a></li>
+              <li><a href="/lucy/version_control.html">Version Control</a></li>
+            </ul>
+          <h6>Related Projects</h6>
+            <ul>
+              <li><a href="http://lucene.apache.org/java/">Lucene</a></li>
+              <li><a href="http://lucene.apache.org/solr/">Solr</a></li>
+              <li><a href="http://incubator.apache.org/lucene.net/">Lucene.NET</a></li>
+              <li><a href="http://lucene.apache.org/pylucene/">PyLucene</a></li>
+              <li><a href="http://lucene.apache.org/openrelevance/">Open Relevance</a></li>
+            </ul>
+        </div> <!-- lucy-left_nav_box -->
+
+        <div id="lucy-main_content_box" class="grid_9">
+          <p><a name="WritingValidationTests-Summary"></a></p>
+
+<h2>Summary</h2>
+
+<p>Validation is a critical and integral part of the project. If you are
+writing some code which validates some rules, you should definitely write a
+test for it. A little validation test framework is available to write tests
+specifically for Validation. This page explains the details of writing such
+tests using example snippets.</p>
+
+<p><a name="WritingValidationTests-TheValidationFramework"></a></p>
+
+<h2>The Validation Framework</h2>
+
+<ol>
+<li><em>org.apache.openejb.config.ConfigurationFactory</em> uses a <em>chain</em> of
+<em>org.apache.openejb.config.DynamicDeployer</em> implementations. One of the
+implementations in the <em>chain</em> is
+<em>org.apache.openejb.config.ValidateModules</em>. <em>ValidateModules</em> is
+conditionally added to the <em>chain</em> if the property
+<em>openejb.validation.skip=false</em>. If this property is false, then
+<em>ValidateModules</em> is used to kick off the <em>Validation Framework</em>.
+{snippet:id=code|url=openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java|lang=java}</li>
+<li>Internally ValidateModules uses the <em>AppValidator.validate()</em> method.
+{snippet:id=code|url=openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ValidateModules.java|lang=java}</li>
+<li>This method then performs validation using a number of rules. <em>A
+validation rule/s is represented by a class implementing ValidationRule</em>.
+In fact, all the classes checking the validation rules , extend
+ValidationBase, which further implements ValidationRule.
+{gliffy:name=Class Diagram|align=left|size=L|version=2}
+The <em>list of rules</em> being executed can actually be found in the following
+method of AppValidator.
+{snippet:id=code1|url=openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppValidator.java|lang=java}</li>
+<li>The above rules are then executed one by one
+{snippet:id=code2|url=openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppValidator.java|lang=java}</li>
+<li><p>Each module has an attached ValidationContext , which maintains a list of
+failures, warnings and errors. As the above rules are being invoked, the
+failure/errors/warnings for a module are being added to its
+ValidationContext. Every Validation failure has an associated message which
+can be found in <em>org/apache/openejb/config/rules/messages.properties</em>. A
+message has three levels as explained below:</p>
+
+<p>Format for the different levels follows this spirit:</p>
+
+<ol>
+<li><p>Should be short and fixed such that someone could search/grep for it
+without having to know/use regular expressions.  These tend to be similar
+to the message key.</p></li>
+<li><p>Intended to contain the issue expressed in 1 with only the essential
+details, should not line wrap if possible.  Be terse.</p></li>
+<li><p>Teacher's assistant.  A much more conversational and possibly more
+detailed
+explanation of the issue, should tell the user what to do to fix the
+problem.
+I.e. don't just point out what is wrong, also point out what is right.  Use
+several lines if needed.</p></li>
+</ol></li>
+</ol>
+
+<p>Here is an <em>example validation message</em></p>
+
+<pre><code># 0 - method name
+# 1 - full method
+# 2 - remote|home
+# 3 - interface name
+# 4 - EJB Class name
+1.no.busines.method   No such business method
+2.no.busines.method   Business method {0} not implemented.
+3.no.busines.method   Business method {1} not implemented. The method
+</code></pre>
+
+<p>was declared in the {2} interface {3}, but not implemented in the ejb class
+{4}</p>
+
+<ol>
+<li>The validation framework does not stop processing on the first validation
+failure, but keeps going and checking for other validation errors and
+reports them all to the user. This allows the user to fix all errors in one
+go and re-attempt deploying the application.</li>
+</ol>
+
+<p><a name="WritingValidationTests-TheValidationTestFramework"></a></p>
+
+<h2>The Validation Test Framework</h2>
+
+<ol>
+<li>The test framework is specifically written with the following goals in
+mind:</li>
+<li># &nbsp; It should be easy to write the test, and the framework should do
+the boiler-plate work, the test author just needs to provide the relevant
+info</li>
+<li># &nbsp; It should report the test coverage i.e. the framework should
+generate a report regarding which keys in messages.properties have tests
+written for them and what is the corresponding Test class/es which test for
+the validation rule associated with that key</li>
+<li># &nbsp; It should ensure that if a test is being written for a specific
+message key, then that key should exist in the messages.properties file</li>
+<li>Lets break down the framework by using an example:
+{snippet:id=code|url=openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/rules/CheckInjectionTargetsTest.java|lang=java}</li>
+<li># &nbsp; The first thing to note is that we are running the test using our
+own custom runner i.e. @RunWith(ValidationRunner.class). This runner
+ensures that the keys we are testing, actually exist in the
+messages.properties file. It does a lot more, as we shall see later</li>
+<li># &nbsp;The test method</li>
+<li>## &nbsp; Can be given any name</li>
+<li>## &nbsp; Must be annotated with @Keys and CANNOT be annotated with @Test.
+The rest of the JUnit annotations can be used</li>
+<li>## &nbsp; Must return one of EjbJar / EjbModule / AppModule. The returned
+EjbJar/EjbModule/AppModule will be specifically created to cause one or
+more validation errors/warnings/failures.</li>
+<li># Following annotations are provided by the framework</li>
+<li>## @Keys : is a collection of zero or more @Key</li>
+<li><h2>@Key : represents a key for which this test is being written. A @Key</h2>
+
+<p>can be of type FAILURE or WARNING or ERROR. Default value is FAILURE. As
+seen in the example above, the test() method is expecting two warnings for
+the key injectionTarget.nameContainsSet. If count is not equal to 2 or some
+other Validation Failure/Warning/Error was also thrown from the method,
+then the test fails.
+{note:title=Be Careful}
+The test must cause a Validation Failure otherwise the test framework does
+not get invoked. For example, in the above code, a Key of type WARNING is
+being tested, however the test is purposely being failed by putting an
+@AroundInvoke around the method with zero arguments
+{note}</p></li>
+<li><p>Once you have written the test and successfully run it, you now need to
+generate the report. Simply invoke the following maven command</p>
+
+<p>mvn test -Dtest=ValidationKeysAuditorTest
+-DconfluenceUsername=YourConfluenceUsername
+-DconfluencePassword=YourConfluencePassword</p></li>
+</ol>
+
+<p>The above command will create a complete test coverage report and post it
+to this location <a href="openejb:validation-keys-audit-report.html">OPENEJB:Validation Keys Audit Report</a></p>
+
+<p>{info:title=Quick facts about ValidationRunner and things to keep in mind
+while writing tests}</p>
+
+<p>This class is created specifically to write tests which test OpenEjb
+validation code. Specifically, it is used to check the usage of keys
+defined in org.apache.openejb.config.rules.Messages.properties. To use this
+runner, simply annotate your test case with
+@RunWith(ValidationRunner.class). Here are some things to keep in mind when
+writing tests:
+1. A test method needs to be annotated with
+org.apache.openejb.config.rules.Keys instead of the org.junit.Test
+1. Any usage of the @Test annotation will be ignored
+1. If the @Keys and @Test annotation are used together on a test method,
+then the TestCase will error out
+1. Every test method should create a EjbJar or EjbModule or AppModule and
+return it from the method. It should list the keys being tested in the
+@Keys annotation
+1. The runner will invoke the test method and use the Assembler and
+ConfigurationFactory to create the application
+1. This will kick off validation and this Runner will catch
+ValidationFailureException and make sure that all the keys specified in the
+@Keys annotation show up
+in the ValidationFailureException
+1. If the keys listed in the @Keys annotation match the keys found in the
+ValidationFailureException, the test passes, else the test fails.
+1. This Runner also validates that the keys specified in the @Keys
+annotation are also available in the
+org.apache.openejb.config.rules.Messages.properties file. If the key is not
+found, then the Runner throws and exception resulting in your test case not
+being allowed to run.
+1. Sometimes you want to write a test where you do not want any
+ValidationFailureException to be thrown, in those scenarios, simply
+annotate your test with @Keys and do not specify any @Key in it
+{info}</p>
+
+        </div> <!-- lucy-main_content_box --> 
+        <div class="clear"></div>
+
+      </div> <!-- lucy-main_content -->
+
+      <div id="lucy-copyright" class="container_16">
+        <p>Copyright &#169; 2010-2011 The Apache Software Foundation, Licensed under the 
+           <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.
+           <br/>
+          
+        </p>
+      </div> <!-- lucy-copyright -->
+
+    </div> <!-- lucy-rigid_wrapper -->
+
+  </body>
+</html>

Added: websites/staging/openejb/trunk/content/xbean-usage-in-openejb.cwiki
==============================================================================
--- websites/staging/openejb/trunk/content/xbean-usage-in-openejb.cwiki (added)
+++ websites/staging/openejb/trunk/content/xbean-usage-in-openejb.cwiki Sun Jul 10 04:34:53 2011
@@ -0,0 +1,98 @@
+h1. How XBean is used in OpenEJB
+
+Below is an explanation by David Blevins on the usage of xbean in OpenEJB. This text was taken from an email conversation. To view the full conversation, click&nbsp;[here|http://www.nabble.com/How-is-XBean-used-in-OpenEJB-3--tf2148639.html#a5959172]
+
+
+h2. xbean-reflect
+
+ xbean-reflect is a beefed up reflection library.
+
+Earlier all pluggable components had an "init(Properties props)" method? &nbsp;Same concept except now we throw the component class and the properties into an "ObjectRecipe" and call create(). &nbsp;The recipe will take the props out, convert them to the right data types,  and construct the object using the right constructor and setters.
+
+So our Containers and stuff now use constructors and setters. &nbsp;Same with anything in a &nbsp;[service-jar.xml|http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml?view=markup] file.
+
+h4. Some code refs:
+
+# [Assembler.java|http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?revision=546308&view=markup]
+We also use it to construct Stateful and Stateless session bean instances.
+
+# [StatefulInstanceManager.java|http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulInstanceManager.java?revision=546308&view=markup]
+# [StatelessInstanceManager.java|http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java?revision=546308&view=markup]
+
+h2. xbean-finder
+
+xbean-finder is the second coolest library ever. &nbsp;It's a beefed up&nbsp; service finder for grabbing stuff in your classpath. &nbsp;We use it at a couple of places.
+
+h3. COMMAND LINE TOOL:
+
+The available commands are in properties files in "META-INF/org.openejb.cli/\{name\}", where \{name\} is the name of the command. &nbsp;See:
+# [openejb cli|http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.cli/]
+# [openejb cli for itests|http://svn.apache.org/viewvc/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/resources/META-INF/org.openejb.cli/]
+
+Earlier we had the "test"&nbsp; command hardcoded in a script, but the person may have uninstalled&nbsp; the itests? &nbsp;Well now, if you have the itests jar, the "test" command&nbsp; will be available. &nbsp;If you don't have the itests jar, the "test" &nbsp;
+command won't be available. &nbsp;The "test" command itself is in the&nbsp; itests jar. &nbsp;You can put any command in any jar and it will&nbsp; automatically become available on the command line. &nbsp;Remove the jar&nbsp; and the command is gone.
+
+When someone types "java \-jar openejb.jar start" this guy will look&nbsp; for "META-INF/org.openejb.cli/start". &nbsp;If he finds it, he'll create&nbsp; it and execute it. &nbsp;If he doesn't find it, he'll list the available&nbsp; commands by enumerating over all the files he see's in the classpath&nbsp; under the "META-INF/org.openejb.cli/" directory. See [MainImpl.java|http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/cli/MainImpl.java?revision=546308&view=markup]
+
+An extra cool thing is that each command has in it's properties a&nbsp; "description" property. &nbsp;This is localized, so if the VM locale is&nbsp; "pl" it will look for a "description.pl" property and use its value&nbsp; when printing command line help.
+I'd like to give Jeremy Whitlock a big shout-out for doing such a&nbsp; bang up job on this. &nbsp;He and I worked out the idea and white-boarded&nbsp; it in the wiki, then Jeremy went off and coded up the whole thing\!&nbsp; It was fantastic.
+
+h3. SERVER SERVICES:
+
+We also use the xbean-finder to create our Server Services (aka.&nbsp; protocols). &nbsp;Our ServerService implementations are in properties&nbsp; files under "META-INF/org.openejb.server.ServerService/\{protocolName\}. See:
+# [OpenEJB Server - ServerService|http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-server/src/main/resources/META-INF/org.apache.openejb.server.ServerService/]
+# [OpenEJB ejbd - ServerService|http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-ejbd/src/main/resources/META-INF/org.apache.openejb.server.ServerService/]
+# [OpenEJB Telnet - ServerService|http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-telnet/src/main/resources/META-INF/org.apache.openejb.server.ServerService/]
+# [OpenEJB HTTP - ServerService|http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-http/src/main/resources/META-INF/org.apache.openejb.server.ServerService/]
+
+The very first time a ServerService is constructed, we squirt the&nbsp; properties file into the openejb/conf/ directory so the user can edit&nbsp; it. &nbsp;The properties files for ServerServices are very xinet.d like.&nbsp; For example, here is the definition of the "admin" server service:
+
+&nbsp; &nbsp; &nbsp;server &nbsp; &nbsp; &nbsp;= org.openejb.server.admin.AdminDaemon
+&nbsp; &nbsp; &nbsp;bind &nbsp; &nbsp; &nbsp; &nbsp;= 127.0.0.1
+&nbsp; &nbsp; &nbsp;port &nbsp; &nbsp; &nbsp; &nbsp;= 4200
+&nbsp; &nbsp; &nbsp;disabled &nbsp; &nbsp;= false
+&nbsp; &nbsp; &nbsp;threads &nbsp; &nbsp; = 1
+&nbsp; &nbsp; &nbsp;only_from &nbsp; = localhost
+
+You can reconfigure the "admin" server service, for example, via the&nbsp; properties file in openejb/conf/admin.properties. &nbsp;Or you can do it&nbsp; on the command line as such:
+
+<in-a-shell>
+$ ./bin/openejb start \-Dadmin.bind=192.168.42.13
+OPENEJB_HOME=/Users/dblevins/work/openejb1/target/openejb-1.1-SNAPSHOT
+OpenEJB 1.1-SNAPSHOT &nbsp; &nbsp;build: 20060420-2356
+[http://www.openejb.org]
+resources 1
+OpenEJB ready.
+\[init\] OpenEJB Remote Server
+&nbsp; &nbsp;*\* Starting Services \*\*
+&nbsp; &nbsp;NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; IP &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;PORT
+&nbsp; &nbsp;webadmin &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 127.0.0.1 &nbsp; &nbsp; &nbsp; 4203
+&nbsp; &nbsp;httpejbd &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 127.0.0.1 &nbsp; &nbsp; &nbsp; 4204
+&nbsp; &nbsp;telnet &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 127.0.0.1 &nbsp; &nbsp; &nbsp; 4202
+&nbsp; &nbsp;ejbd &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 127.0.0.1 &nbsp; &nbsp; &nbsp; 4201
+&nbsp; &nbsp;admin &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;192.168.42.13 &nbsp; 4200
+\------\-
+Ready\!
+</in-a-shell>
+
+You can override any server service property in the same way. &nbsp;Here&nbsp; are a bunch more examples:
+
+&nbsp; Option: \-D<service>.bind=<address>
+&nbsp; &nbsp; openejb start \-Dejbd.bind=10.45.67.8
+&nbsp; &nbsp; openejb start \-Dejbd.bind=myhost.foo.com
+&nbsp; &nbsp; openejb start \-Dtelnet.bind=myhost.foo.com
+
+&nbsp; Option: \-D<service>.port=<port>
+&nbsp; &nbsp; openejb start \-Dejbd.port=8765
+&nbsp; &nbsp; &nbsp;openejb start \-Dhttpejbd.port=8888
+
+&nbsp; Option: \-D<service>.only_from=<addresses>
+&nbsp; &nbsp; &nbsp;openejb start \-Dadmin.only_from=192.168.1.12
+&nbsp; &nbsp; &nbsp;openejb start \-Dadmin.only_from=192.168.1.12,joe.foo.com,robert
+
+&nbsp; Option: \-D<service>.threads=<max>
+&nbsp; &nbsp; &nbsp;openejb start \-Dejbd.threads=200
+
+&nbsp; Option: \-D<service>.disabled=<true/false>
+&nbsp; &nbsp; &nbsp;openejb start \-Dtelnet.disabled=true
+

Added: websites/staging/openejb/trunk/content/xbean-usage-in-openejb.html
==============================================================================
--- websites/staging/openejb/trunk/content/xbean-usage-in-openejb.html (added)
+++ websites/staging/openejb/trunk/content/xbean-usage-in-openejb.html Sun Jul 10 04:34:53 2011
@@ -0,0 +1,240 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="en">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+    <title>Xbean usage in OpenEJB</title>
+    <link rel="stylesheet" type="text/css" media="screen" href="http://incubator.apache.org/lucy/css/lucy.css">
+  </head>
+
+  <body>
+
+    <div id="lucy-rigid_wrapper">
+
+      <div id="lucy-top" class="container_16 lucy-white_box_3d">
+
+        <div id="lucy-logo_box" class="grid_8">
+          <a href="/OpenEJB/"><img src="http://openejb.apache.org/images/logo_openejb.gif" alt="Apache OpenEJB™"></a>
+        </div> <!-- lucy-logo_box -->
+
+        <div #id="lucy-top_nav_box" class="grid_8">
+          <div id="lucy-top_nav_bar" class="container_8">
+            <ul>
+              <li><a href="http://www.apache.org/" title="Apache Software Foundation">Apache Software Foundation</a></li>
+              <li><a href="http://www.apache.org/licenses/" title="License">License</a></li>
+              <li><a href="http://www.apache.org/foundation/sponsorship.html" title="Sponsorship">Sponsorship</a></li>
+              <li><a href="http://www.apache.org/foundation/thanks.html" title="Thanks">Thanks</a></li>
+              <li><a href="http://www.apache.org/security/ " title="Security">Security</a></li>
+            </ul>
+          </div> <!-- lucy-top_nav_bar -->
+          <p><a href="http://www.apache.org/">Apache</a>&nbsp;&raquo&nbsp;<a href="/">Incubator</a></p>
+          <form name="lucy-top_search_box" id="lucy-top_search_box" action="http://www.google.com/search" method="get">
+            <input value="*.apache.org" name="sitesearch" type="hidden"/>
+            <input type="text" name="q" id="query" style="width:85%">
+            <input type="submit" id="submit" value="Search">
+          </form>
+        </div> <!-- lucy-top_nav_box -->
+
+        <div class="clear"></div>
+
+      </div> <!-- lucy-top -->
+
+      <div id="lucy-main_content" class="container_16 lucy-white_box_3d">
+
+        <div class="grid_4" id="lucy-left_nav_box">
+          <h6>About</h6>
+            <ul>
+              <li><a href="/lucy/">Welcome</a></li>
+              <li><a href="/lucy/faq.html">FAQ</a></li>
+              <li><a href="/lucy/people.html">People</a></li>
+            </ul>
+          <h6>Resources</h6>
+            <ul>
+              <li><a href="/lucy/download.html">Download</a></li>
+              <li><a href="/lucy/mailing_lists.html">Mailing Lists</a></li>
+              <li><a href="/lucy/docs/perl/">Documentation</a></li>
+              <li><a href="http://wiki.apache.org/lucy/">Wiki</a></li>
+              <li><a href="https://issues.apache.org/jira/browse/LUCY">Issue Tracker</a></li>
+              <li><a href="/lucy/version_control.html">Version Control</a></li>
+            </ul>
+          <h6>Related Projects</h6>
+            <ul>
+              <li><a href="http://lucene.apache.org/java/">Lucene</a></li>
+              <li><a href="http://lucene.apache.org/solr/">Solr</a></li>
+              <li><a href="http://incubator.apache.org/lucene.net/">Lucene.NET</a></li>
+              <li><a href="http://lucene.apache.org/pylucene/">PyLucene</a></li>
+              <li><a href="http://lucene.apache.org/openrelevance/">Open Relevance</a></li>
+            </ul>
+        </div> <!-- lucy-left_nav_box -->
+
+        <div id="lucy-main_content_box" class="grid_9">
+          <p><a name="XbeanusageinOpenEJB-HowXBeanisusedinOpenEJB"></a></p>
+
+<h1>How XBean is used in OpenEJB</h1>
+
+<p>Below is an explanation by David Blevins on the usage of xbean in OpenEJB. This text was taken from an email conversation. To view the full conversation, click&nbsp;<a href="http://www.nabble.com/How-is-XBean-used-in-OpenEJB-3--tf2148639.html#a5959172">here</a></p>
+
+<p><a name="XbeanusageinOpenEJB-xbean-reflect"></a></p>
+
+<h2>xbean-reflect</h2>
+
+<p>xbean-reflect is a beefed up reflection library.</p>
+
+<p>Earlier all pluggable components had an "init(Properties props)" method?
+&nbsp;Same concept except now we throw the component class and the
+properties into an "ObjectRecipe" and call create(). &nbsp;The recipe will
+take the props out, convert them to the right data types,  and construct
+the object using the right constructor and setters.</p>
+
+<p>So our Containers and stuff now use constructors and setters. &nbsp;Same with anything in a &nbsp;<a href="http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml?view=markup">service-jar.xml</a>
+ file.</p>
+
+<p><a name="XbeanusageinOpenEJB-Somecoderefs:"></a></p>
+
+<h4>Some code refs:</h4>
+
+<ol>
+<li><p><a href="http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?revision=546308&amp;view=markup">Assembler.java</a>
+We also use it to construct Stateful and Stateless session bean instances.</p></li>
+<li><p><a href="http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulInstanceManager.java?revision=546308&amp;view=markup">StatefulInstanceManager.java</a></p></li>
+<li><a href="http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java?revision=546308&amp;view=markup">StatelessInstanceManager.java</a></li>
+</ol>
+
+<p><a name="XbeanusageinOpenEJB-xbean-finder"></a></p>
+
+<h2>xbean-finder</h2>
+
+<p>xbean-finder is the second coolest library ever. &nbsp;It's a beefed
+up&nbsp; service finder for grabbing stuff in your classpath. &nbsp;We use
+it at a couple of places.</p>
+
+<p><a name="XbeanusageinOpenEJB-COMMANDLINETOOL:"></a></p>
+
+<h3>COMMAND LINE TOOL:</h3>
+
+<p>The available commands are in properties files in
+"META-INF/org.openejb.cli/{name}", where {name} is the name of the
+command. &nbsp;See:
+1. <a href="http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.cli/">openejb cli</a>
+1. <a href="http://svn.apache.org/viewvc/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/resources/META-INF/org.openejb.cli/">openejb cli for itests</a></p>
+
+<p>Earlier we had the "test"&nbsp; command hardcoded in a script, but the
+person may have uninstalled&nbsp; the itests? &nbsp;Well now, if you have
+the itests jar, the "test" command&nbsp; will be available. &nbsp;If you
+don't have the itests jar, the "test" &nbsp;
+command won't be available. &nbsp;The "test" command itself is in the&nbsp;
+itests jar. &nbsp;You can put any command in any jar and it will&nbsp;
+automatically become available on the command line. &nbsp;Remove the
+jar&nbsp; and the command is gone.</p>
+
+<p>When someone types "java -jar openejb.jar start" this guy will look&nbsp;
+for "META-INF/org.openejb.cli/start". &nbsp;If he finds it, he'll
+create&nbsp; it and execute it. &nbsp;If he doesn't find it, he'll list the
+available&nbsp; commands by enumerating over all the files he see's in the
+classpath&nbsp; under the "META-INF/org.openejb.cli/" directory. See <a href="http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/cli/MainImpl.java?revision=546308&amp;view=markup">MainImpl.java</a></p>
+
+<p>An extra cool thing is that each command has in it's properties a&nbsp;
+"description" property. &nbsp;This is localized, so if the VM locale
+is&nbsp; "pl" it will look for a "description.pl" property and use its
+value&nbsp; when printing command line help.
+I'd like to give Jeremy Whitlock a big shout-out for doing such a&nbsp;
+bang up job on this. &nbsp;He and I worked out the idea and
+white-boarded&nbsp; it in the wiki, then Jeremy went off and coded up the
+whole thing!&nbsp; It was fantastic.</p>
+
+<p><a name="XbeanusageinOpenEJB-SERVERSERVICES:"></a></p>
+
+<h3>SERVER SERVICES:</h3>
+
+<p>We also use the xbean-finder to create our Server Services (aka.&nbsp;
+protocols). &nbsp;Our ServerService implementations are in properties&nbsp;
+files under "META-INF/org.openejb.server.ServerService/{protocolName}.
+See:
+1. <a href="http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-server/src/main/resources/META-INF/org.apache.openejb.server.ServerService/">OpenEJB Server - ServerService</a>
+1. <a href="http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-ejbd/src/main/resources/META-INF/org.apache.openejb.server.ServerService/">OpenEJB ejbd - ServerService</a>
+1. <a href="http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-telnet/src/main/resources/META-INF/org.apache.openejb.server.ServerService/">OpenEJB Telnet - ServerService</a>
+1. <a href="http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-http/src/main/resources/META-INF/org.apache.openejb.server.ServerService/">OpenEJB HTTP - ServerService</a></p>
+
+<p>The very first time a ServerService is constructed, we squirt the&nbsp;
+properties file into the openejb/conf/ directory so the user can edit&nbsp;
+it. &nbsp;The properties files for ServerServices are very xinet.d
+like.&nbsp; For example, here is the definition of the "admin" server
+service:</p>
+
+<p>&nbsp; &nbsp; &nbsp;server &nbsp; &nbsp; &nbsp;=
+org.openejb.server.admin.AdminDaemon
+&nbsp; &nbsp; &nbsp;bind &nbsp; &nbsp; &nbsp; &nbsp;= 127.0.0.1
+&nbsp; &nbsp; &nbsp;port &nbsp; &nbsp; &nbsp; &nbsp;= 4200
+&nbsp; &nbsp; &nbsp;disabled &nbsp; &nbsp;= false
+&nbsp; &nbsp; &nbsp;threads &nbsp; &nbsp; = 1
+&nbsp; &nbsp; &nbsp;only_from &nbsp; = localhost</p>
+
+<p>You can reconfigure the "admin" server service, for example, via the&nbsp;
+properties file in openejb/conf/admin.properties. &nbsp;Or you can do
+it&nbsp; on the command line as such:</p>
+
+<p><in-a-shell>
+$ ./bin/openejb start -Dadmin.bind=192.168.42.13
+OPENEJB_HOME=/Users/dblevins/work/openejb1/target/openejb-1.1-SNAPSHOT
+OpenEJB 1.1-SNAPSHOT &nbsp; &nbsp;build: 20060420-2356
+<a href="http://www.openejb.org">http://www.openejb.org</a>
+resources 1
+OpenEJB ready.
+[init](init.html)
+ OpenEJB Remote Server
+&nbsp; &nbsp;** Starting Services **
+&nbsp; &nbsp;NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
+IP &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;PORT
+&nbsp; &nbsp;webadmin &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 127.0.0.1
+&nbsp; &nbsp; &nbsp; 4203
+&nbsp; &nbsp;httpejbd &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 127.0.0.1
+&nbsp; &nbsp; &nbsp; 4204
+&nbsp; &nbsp;telnet &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
+127.0.0.1 &nbsp; &nbsp; &nbsp; 4202
+&nbsp; &nbsp;ejbd &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
+127.0.0.1 &nbsp; &nbsp; &nbsp; 4201
+&nbsp; &nbsp;admin &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
+&nbsp;192.168.42.13 &nbsp; 4200
+-------
+Ready!
+</in-a-shell></p>
+
+<p>You can override any server service property in the same way.
+&nbsp;Here&nbsp; are a bunch more examples:</p>
+
+<p>&nbsp; Option: -D<service>.bind=<address>
+&nbsp; &nbsp; openejb start -Dejbd.bind=10.45.67.8
+&nbsp; &nbsp; openejb start -Dejbd.bind=myhost.foo.com
+&nbsp; &nbsp; openejb start -Dtelnet.bind=myhost.foo.com</p>
+
+<p>&nbsp; Option: -D<service>.port=<port>
+&nbsp; &nbsp; openejb start -Dejbd.port=8765
+&nbsp; &nbsp; &nbsp;openejb start -Dhttpejbd.port=8888</p>
+
+<p>&nbsp; Option: -D<service>.only_from=<addresses>
+&nbsp; &nbsp; &nbsp;openejb start -Dadmin.only_from=192.168.1.12
+&nbsp; &nbsp; &nbsp;openejb start
+-Dadmin.only_from=192.168.1.12,joe.foo.com,robert</p>
+
+<p>&nbsp; Option: -D<service>.threads=<max>
+&nbsp; &nbsp; &nbsp;openejb start -Dejbd.threads=200</p>
+
+<p>&nbsp; Option: -D<service>.disabled=<true/false>
+&nbsp; &nbsp; &nbsp;openejb start -Dtelnet.disabled=true</p>
+
+        </div> <!-- lucy-main_content_box --> 
+        <div class="clear"></div>
+
+      </div> <!-- lucy-main_content -->
+
+      <div id="lucy-copyright" class="container_16">
+        <p>Copyright &#169; 2010-2011 The Apache Software Foundation, Licensed under the 
+           <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.
+           <br/>
+          
+        </p>
+      </div> <!-- lucy-copyright -->
+
+    </div> <!-- lucy-rigid_wrapper -->
+
+  </body>
+</html>

Added: websites/staging/openejb/trunk/content/xdoclet-plugin.cwiki
==============================================================================
--- websites/staging/openejb/trunk/content/xdoclet-plugin.cwiki (added)
+++ websites/staging/openejb/trunk/content/xdoclet-plugin.cwiki Sun Jul 10 04:34:53 2011
@@ -0,0 +1,8 @@
+
+h3. XDoclet plugin
+
+XDoclet 1's [OpenEJB Support|http://opensource.atlassian.com/projects/xdoclet/browse/XDT-669]
+
+[openejb module|http://xdoclet.sourceforge.net/xdoclet/ant/xdoclet/modules/openejb/ejb/OpenEJBSubTask.html]
+
+[http://issues.apache.org/jira/browse/GERONIMO-778]
\ No newline at end of file