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 [4/23] - /websites/staging/openejb/trunk/content/

Added: websites/staging/openejb/trunk/content/configuration.html
==============================================================================
--- websites/staging/openejb/trunk/content/configuration.html (added)
+++ websites/staging/openejb/trunk/content/configuration.html Sun Jul 10 04:34:53 2011
@@ -0,0 +1,265 @@
+<!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>Configuration</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="Configuration-ShortOverview"></a></p>
+
+<h1>Short Overview</h1>
+
+<p><a name="Configuration-ConfigurationProperties"></a></p>
+
+<h2>Configuration Properties</h2>
+
+<ul>
+<li><em>openejb.home</em> - OpenEJB home (installation) directory path. All
+relative paths are resolved against the property unless openejb.base is
+set. Unless set, the value is assigned to the <em>user.dir</em> Java property.</li>
+<li><em>openejb.base</em> - OpenEJB base directory path. If set, the directory
+pointed by the property is searched for resources before openejb.home.</li>
+<li><em>openejb.configuration</em> - OpenEJB configuration file path.</li>
+<li><em>openejb.loader</em> - OpenEJB loader that's responsible for loading EJBs.
+There are 3 different loader types: <br />
+<em>*  <em>tomcat-webapp</em> - set it when inside of Tomcat scoped at just the
+webapp, aka. <a href="collapsed-ear.html">Collapsed EAR</a>
+<em></em>  <em>tomcat</em> - set it when inside of Tomcat scoped for all webapps to share
+<em></em>  <em>system</em> (also: bootstrap)
+<em></em>  *embedded</em> (also: noload)</li>
+<li><em>openejb.configurator</em> (default:
+<em>org.openejb.alt.config.ConfigurationFactory</em> ) - a class that builds
+org.openejb.alt.assembler.classic.OpenEjbConfiguration object; implements
+the org.openejb.alt.assembler.classic.OpenEjbConfigurationFactory interface</li>
+<li><em>openejb.descriptors.output</em> - possible values: true|false - When set
+OpenEJB saves deployment descriptors - ejb-jar.xml and openejb-jar.xml</li>
+</ul>
+
+<p><a name="Configuration-ConfigurationFile"></a></p>
+
+<h2>Configuration File</h2>
+
+<p>Show a config file with the elements hyperlinked.</p>
+
+<p>{code:xml|title=openejb.conf}
+<?xml version="1.0"?>
+<openejb>
+  <Container id="Default CMP Container" ctype="CMP_ENTITY">
+    Global_TX_Database  c:/my/app/conf/postgresql.cmp_global_database.xml
+    Local_TX_Database   c:/my/app/conf/postgresql.cmp_local_database.xml
+  </Container>
+  <Connector id="Default JDBC Database">
+    JdbcDriver org.postgresql.Driver
+    JdbcUrl jdbc:postgresql://localhost/mydb
+    UserName username
+    Password password
+  </Connector>
+  <SecurityService id="Default Security Service"/>
+  <TransactionService id="Default Transaction Manager"/>
+  <Deployments jar="c:/my/app/employee.jar"/>
+  <Deployments dir="beans/" />
+</openejb></p>
+
+<pre><code>h1.  Basic Layout
+
+Basically, openejb.base is the source for 100% of all configuration
+</code></pre>
+
+<p>information and third party config files (log4j, castor, instantdb,
+whatever).  This includes finding where the, possibly many, <Deployment>
+entries in the openejb.conf point.  The openejb.home is where the code
+loading OpenEJB will look for all the OpenEJB libraries.  Usually
+openejb.base is not explicitly set and defaults to the value of
+openejb.home, so many people are used to only dealing with openejb.home.</p>
+
+<pre><code>The point of having and openejb.base and openejb.home was basically to
+</code></pre>
+
+<p>allow several independently configured instances of OpenEJB running on a
+system (perhaps embedded in Swing apps, in Tomcat, running as a standalone
+Server, or even in Groovy as Mr. Strachan did!) but without the need to
+copy all the OpenEJB system libraries everywhere.</p>
+
+<pre><code>*openejb.home* 
+  * can be set explicitly via a system property.  
+  * if not set it default's to user.dir, which is the current working
+</code></pre>
+
+<p>directory.</p>
+
+<pre><code>*openejb.base*
+  * can be set explicitly via a system property.  
+  * If not set it default's to openejb.home.
+
+*openejb.configuration*
+  * can be set to explicitly point to the file containing your
+</code></pre>
+
+<p>configuration. <br />
+      * If set to a relative path, we first look in user.dir/your-conf-file,
+then in openejb.base/your-conf-file
+      * If not set we check in openejb.base/conf/openejb.conf
+      * If no conf file is found, we create one in
+openejb.base/conf/openejb.conf</p>
+
+<pre><code>*relative paths in openejb.conf*
+  * Deployment entries are resolved relative to openejb.base.
+  * Containers use openejb.base to resolve their own config files.  For
+</code></pre>
+
+<p>example, Castor JDO to loads the database.xml and all other files from the
+openejb.base directory.
+      * Resource adapters that are embedded usually have config files of their
+own and are also loaded from the openeb.base.</p>
+
+<pre><code>*log files*
+  * The log4.configuration file is resolved relative to openejb.base.
+  * The properties in the config file that point to files are also resolved
+</code></pre>
+
+<p>relative to openejb.base.</p>
+
+<pre><code>*OpenEJB libraries*
+  * The jars in the lib and dist directories under openejb.home are added
+</code></pre>
+
+<p>to the classpath.</p>
+
+<pre><code>h2. Summary
+
+A summary of the above in a different notation:
+
+{noformat}
+openejb.home = user.dir (can be set explicitly)
+openejb.base = openejb.home (can be set explicitly)
+openejb.conf = openejb.base/conf/openejb.conf (can be set explicitly)
+logging.conf = openejb.base/conf/logging.conf (can be set explicitly)
+deployments  = paths listed in openejb.conf (relative paths resolved from
+</code></pre>
+
+<p>openejb.base)
+    Classpath includes openejb.home/lib and openejb.home/dist
+    {noformat}</p>
+
+<pre><code>h2. Example layout
+
+In this one the openejb.home and openejb.base are set, everything else is
+</code></pre>
+
+<p>defaulted.  The openejb.conf file as been updated to point to the ejb jars
+by name (abc-ejbs.jar and xyz-ejbs.jar).</p>
+
+<pre><code>An example layout:
+{noformat}
+/usr/local/openejb  (openejb.home)
+/usr/local/openejb/lib  (in classpath)
+/usr/local/openejb/dist (in classpath)
+/home/jsmith/foo_app  (openejb.base)
+/home/jsmith/foo_app/conf/openejb.conf
+/home/jsmith/foo_app/conf/logging.conf
+/home/jsmith/foo_app/abc-ejbs.jar (Deployment entry in openejb.conf)
+/home/jsmith/foo_app/xyz-ejbs.jar (Deployment entry in openejb.conf)
+/home/jsmith/foo_app/logs/  
+{noformat}
+
+
+h2. Another Example layout
+
+In this example openejb.home and openejb.base are setup as well as the
+</code></pre>
+
+<p>explicit paths for the openejb and log4j configuration files.</p>
+
+<pre><code>An example layout:
+{noformat}
+/usr/local/openejb  (openejb.home)
+/usr/local/openejb/lib  (in classpath)
+/usr/local/openejb/dist (in classpath)
+/home/jsmith/foo_app  (openejb.base)
+/home/jsmith/foo_app/openejb.xml  (openejb.configuration)
+/home/jsmith/foo_app/abc-ejbs.jar (Deployment entry in openejb.xml)
+/home/jsmith/foo_app/xyz-ejbs.jar (Deployment entry in openejb.xml)
+/home/jsmith/foo_app/log4j.conf  (log4j.configuration)
+/home/jsmith/foo_app/mylogs/  (logging dir as defined in log4j.conf)
+{noformat}
+</code></pre>
+
+        </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/containers.cwiki
==============================================================================
--- websites/staging/openejb/trunk/content/containers.cwiki (added)
+++ websites/staging/openejb/trunk/content/containers.cwiki Sun Jul 10 04:34:53 2011
@@ -0,0 +1,247 @@
+
+h1. Declaring your Container
+
+CMP Entity containers are defined with the <Container> element, under the <openejb> element. This is actually the declaration used for all containers defined in the container system. The part that actually makes it a cmp container is the ctype attribute, specifially, a ctype attribute set to CMP_ENTITY as such...
+
+{code:xml|title=example_01.conf}
+<?xml version="1.0"?>
+<openejb>
+
+<Container id="Default CMP Container" ctype="CMP_ENTITY"/>
+
+</openejb>
+{code}
+
+The really fun part is that the above configuration file is completely legal! If you started the server and pointed to this file...
+
+bq. ./openejb.sh start -conf example_01.conf
+
+...you would end up with a running server that contained only one container, called "Default CMP Container". You could then deploy beans into it and everything. There would be no other containers running in the server at all. If you telnet'd into the server and typed the 'system' command, you could see for yourself that there is nothing else in the system.
+
+{quote}
+dblevins@Miles /dev/OpenEJB
+$ telnet localhost 4200
+Trying 127.0.0.1...
+Connected to Miles
+Escape character is '^]'.
+OpenEJB Remote Server Console
+type 'help' for a list of commands
+[openejb]$ system
+Containers:
+ Default CMP Container
+
+Deployments:
+[openejb]$
+{quote}
+
+You see that. No beans, no JDBC resources, nothing but one CMP container called "Default CMP Container".
+
+h1. Naming your Container
+
+You can call the container anything you want, just change the value of the id attribute. Here is a container called "My PostgreSQL Contianer"
+
+{code:xml|title=example_02.conf}
+<?xml version="1.0"?>
+<openejb>
+
+<Container id="My PostgreSQL Container" ctype="CMP_ENTITY"/>
+
+</openejb>
+{code}
+
+If you were to deploy a CMP bean into this configuration, you would see "My PostgreSQL Container" in the list of usable containers, in fact, it would be the only container in the list.
+
+{quote}
+dblevins@Miles /dev/OpenEJB/openejb
+$ ./openejb.sh deploy -conf example_02.conf myCMPBean.jar
+...(skipping to step two)...
+
+==--- Step 2 ---==
+
+Please specify which container the bean will run in.
+Available containers are:
+
+Num     Type            ID
+
+1       CMP_ENTITY      My PostgreSQL Container
+
+Type the number of the container
+-options to view the list again
+or -help for more information.
+
+Container:
+{quote}
+
+After deployment, you would end up with a configuration like this one
+
+{code:xml|title=example_02.conf}
+<?xml version="1.0"?>
+<openejb>
+
+<Container id="My PostgreSQL Container" ctype="CMP_ENTITY"/>
+
+<Deployments jar="myCMPBean.jar" />
+
+</openejb>
+{code}
+
+Most important, that bean will now be mapped directly to the container id "My PostgreSQL Container". So if you change the name of the container and do not redeploy the myCMPBean.jar to point to the new container id, you will have big problems!
+
+h1. Container types
+
+You can declare as many containers as you want. The available container types are:
+	* CMP_ENTITY
+	* BMP_ENTITY
+	* STATELESS
+	* STATEFUL
+
+The containers can all be of the same type, or a mix of the types.
+
+{code:xml|title=example_03.conf}
+<?xml version="1.0"?>
+<openejb>
+
+<Container id="My PostgreSQL Container" ctype="CMP_ENTITY"/>
+<Container id="My MySQL Container" ctype="CMP_ENTITY"/>
+<Container id="My InstantDB Container" ctype="CMP_ENTITY"/>
+<Container id="My Stateful Session Container" ctype="STATEFUL"/>
+<Container id="My Stateless Session Container" ctype="STATELESS"/>
+
+</openejb>
+{code}
+
+h1. Configuring your Container
+
+Of course, if you did have a configuration like the one above, it would be a bit pointless as all three of your CMP containers would be using the default CMP container configuration. To acually configure a container differently, you simply need to specifiy new values for the properties that the container has. These will override the defaults for that particular container declaration. So it's possible to declare multiple containers of the same type, but configure each one differently. Let's use our CMP_ENTITY containers above as an example.
+
+{code:xml|title=example_03.conf}
+<?xml version="1.0"?>
+<openejb>
+
+<Container id="My PostgreSQL Container" ctype="CMP_ENTITY">
+    Global_TX_Database    conf/postgresql.cmp.global-database.xml
+    Local_TX_Database     conf/postgresql.cmp.local-database.xml
+</Container>
+
+<Container id="My MySQL Container" ctype="CMP_ENTITY">
+    Global_TX_Database  conf/mysql.cmp.global-database.xml
+    Local_TX_Database   conf/mysql.cmp.local-database.xml
+</Container>
+
+<Container id="My InstantDB Container" ctype="CMP_ENTITY">
+    Global_TX_Database  conf/instantdb.cmp.global-database.xml
+    Local_TX_Database   conf/instantdb.cmp.local-database.xml
+</Container>
+
+<Container id="My Stateful Session Container" ctype="STATEFUL"/>
+<Container id="My Stateless Session Container" ctype="STATELESS"/>
+
+</openejb>
+{code}
+
+The format of the configuration parameters is actually just regular old java.util.Properties file format. It keeps things simple and doesn't require you to type endless amounts of tags that are just name/value pairs anyway. The java.util.Properties file format allows for spaces, tabs, colons, or equals signs to separate the name value pairs, so this would also be acceptable..
+
+{code:xml|title=example_03.conf}
+<?xml version="1.0"?>
+<openejb>
+
+<Container id="My PostgreSQL Container" ctype="CMP_ENTITY">
+! This is a comment   
+    Global_TX_Database = conf/postgresql.cmp.global-database.xml
+    Local_TX_Database=conf/postgresql.cmp.local-database.xml
+</Container>
+
+<Container id="My MySQL Container" ctype="CMP_ENTITY">
+# This is also a comment
+    Global_TX_Database:conf/mysql.cmp.global-database.xml
+    Local_TX_Database : conf/mysql.cmp.local-database.xml
+</Container>
+
+
+<Container id="My InstantDB Container" ctype="CMP_ENTITY">
+    Global_TX_Database  conf/instantdb.cmp.global-database.xml
+    Local_TX_Database           conf/instantdb.cmp.local-database.xml
+</Container>
+
+</openejb>
+{code}
+
+
+h1. Configuration properties
+
+The actual properties that each container type accepts are different for each type. Here is a reference for each container type.
+
+h2. CMP_ENTITY properties
+
+h3. PoolSize
+
+
+The default size of the method ready bean pools. Every bean class gets its own pool of this size. The value should be any integer.
+
+Default:
+bq. PoolSize 100
+
+h3. Global_TX_Database
+
+The name of the database.xml file that is used for global or container managed transactions. This will be used when the TransactionManager is managing the transaction, such as when the tx attribute is Supports(and there is a client tx), RequiresNew, Required or Manditory.
+
+Specifies the configuration for obtaining database connections and the mapping.xml schema which describes how beans map to the database.
+
+Default:
+bq. Global_TX_Database  conf/default.cmp_global_tx_database.xml
+
+h3. Local_TX_Database
+
+The name of the database.xml file that is used for local or unspecified transaction contexts. This will be used when the TransactionManager is not managing the transaction, such as when the tx attribute is Supports (and there is no client tx), NotSupported, or Never.
+
+Specifies the configuration for obtaining database connections and the mapping.xml schema which describes how beans map to the database.
+
+Default:
+bq. Local_TX_Database   conf/default.cmp_local_tx_database.xml
+
+h2. BMP_ENTITY properties
+
+The BMP Container has no customizable properties to override.
+
+h2. STATEFUL properties
+
+h3. Passivator
+
+The passivator is responsible for writing beans to disk at passivation time. Different passivators can be used by setting this property to the fully qualified class name of the PassivationStrategy implementation. The passivator is not responsible for invoking any callbacks or other processing, its only responsibly is to write the bean state to disk.
+
+
+Known implementations:
+	org.openejb.core.stateful.RAFPassivater
+	org.openejb.core.stateful.SimplePassivater
+Default:
+bq. Passivator   org.openejb.core.stateful.SimplePassivater
+
+h3. TimeOut
+
+Specifies the time to wait between invocations. This value is measured in minutes. A value of 5 would result in a time-out of 5 minutes between invocations.
+
+Default:
+bq. TimeOut  20
+
+h3. PoolSize
+
+Specifies the size of the bean pools for this stateful SessionBean container.
+
+Default:
+bq. PoolSize  100
+
+h3. BulkPassivate
+
+Property name that specifies the number of instances to passivate at one time when doing bulk passivation. Must be less than the PoolSize.
+
+Default:
+bq. BulkPassivate  50
+
+h2. STATELESS properties
+
+h3. StrictPooling
+
+Specifies the whether or not to this stateless SessionBean container should use a strict pooling algorithm. true or false
+
+Default:
+bq. StrictPooling  true
\ No newline at end of file

Added: websites/staging/openejb/trunk/content/containers.html
==============================================================================
--- websites/staging/openejb/trunk/content/containers.html (added)
+++ websites/staging/openejb/trunk/content/containers.html Sun Jul 10 04:34:53 2011
@@ -0,0 +1,426 @@
+<!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>Containers</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="Containers-DeclaringyourContainer"></a></p>
+
+<h1>Declaring your Container</h1>
+
+<p>CMP Entity containers are defined with the <Container> element, under the
+<openejb> element. This is actually the declaration used for all containers
+defined in the container system. The part that actually makes it a cmp
+container is the ctype attribute, specifially, a ctype attribute set to
+CMP_ENTITY as such...</p>
+
+<p>{code:xml|title=example_01.conf}
+<?xml version="1.0"?>
+<openejb></p>
+
+<p><Container id="Default CMP Container" ctype="CMP_ENTITY"/></p>
+
+<p></openejb></p>
+
+<pre><code>The really fun part is that the above configuration file is completely
+</code></pre>
+
+<p>legal! If you started the server and pointed to this file...</p>
+
+<pre><code>bq. ./openejb.sh start -conf example_01.conf
+
+...you would end up with a running server that contained only one
+</code></pre>
+
+<p>container, called "Default CMP Container". You could then deploy beans into
+it and everything. There would be no other containers running in the server
+at all. If you telnet'd into the server and typed the 'system' command, you
+could see for yourself that there is nothing else in the system.</p>
+
+<pre><code>{quote}
+dblevins@Miles /dev/OpenEJB
+$ telnet localhost 4200
+Trying 127.0.0.1...
+Connected to Miles
+Escape character is '^]
+</code></pre>
+
+<p>'.
+    OpenEJB Remote Server Console
+    type 'help' for a list of commands
+    [openejb]
+$ system
+    Containers:
+     Default CMP Container</p>
+
+<pre><code>Deployments:
+[openejb]
+</code></pre>
+
+<p>$
+    {quote}</p>
+
+<pre><code>You see that. No beans, no JDBC resources, nothing but one CMP container
+</code></pre>
+
+<p>called "Default CMP Container".</p>
+
+<pre><code>h1. Naming your Container
+
+You can call the container anything you want, just change the value of the
+</code></pre>
+
+<p>id attribute. Here is a container called "My PostgreSQL Contianer"</p>
+
+<pre><code>{code:xml|title=example_02.conf}
+&lt;?xml version="1.0"?&gt;
+&lt;openejb&gt;
+
+&lt;Container id="My PostgreSQL Container" ctype="CMP_ENTITY"/&gt;
+
+&lt;/openejb&gt;
+</code></pre>
+
+<p>If you were to deploy a CMP bean into this configuration, you would see "My
+PostgreSQL Container" in the list of usable containers, in fact, it would
+be the only container in the list.</p>
+
+<p>{quote}
+dblevins@Miles /dev/OpenEJB/openejb
+$ ./openejb.sh deploy -conf example_02.conf myCMPBean.jar
+...(skipping to step two)...</p>
+
+<p>==--- Step 2 ---==</p>
+
+<p>Please specify which container the bean will run in.
+Available containers are:</p>
+
+<p>Num Type        ID</p>
+
+<p>1   CMP_ENTITY  My PostgreSQL Container</p>
+
+<p>Type the number of the container
+-options to view the list again
+or -help for more information.</p>
+
+<p>Container:
+{quote}</p>
+
+<p>After deployment, you would end up with a configuration like this one</p>
+
+<p>{code:xml|title=example_02.conf}
+<?xml version="1.0"?>
+<openejb></p>
+
+<p><Container id="My PostgreSQL Container" ctype="CMP_ENTITY"/></p>
+
+<p><Deployments jar="myCMPBean.jar" /></p>
+
+<p></openejb></p>
+
+<pre><code>Most important, that bean will now be mapped directly to the container id
+</code></pre>
+
+<p>"My PostgreSQL Container". So if you change the name of the container and
+do not redeploy the myCMPBean.jar to point to the new container id, you
+will have big problems!</p>
+
+<pre><code>h1. Container types
+
+You can declare as many containers as you want. The available container
+</code></pre>
+
+<p>types are:
+        * CMP_ENTITY
+        * BMP_ENTITY
+        * STATELESS
+        * STATEFUL</p>
+
+<pre><code>The containers can all be of the same type, or a mix of the types.
+
+{code:xml|title=example_03.conf}
+&lt;?xml version="1.0"?&gt;
+&lt;openejb&gt;
+
+&lt;Container id="My PostgreSQL Container" ctype="CMP_ENTITY"/&gt;
+&lt;Container id="My MySQL Container" ctype="CMP_ENTITY"/&gt;
+&lt;Container id="My InstantDB Container" ctype="CMP_ENTITY"/&gt;
+&lt;Container id="My Stateful Session Container" ctype="STATEFUL"/&gt;
+&lt;Container id="My Stateless Session Container" ctype="STATELESS"/&gt;
+
+&lt;/openejb&gt;
+</code></pre>
+
+<p><a name="Containers-ConfiguringyourContainer"></a></p>
+
+<h1>Configuring your Container</h1>
+
+<p>Of course, if you did have a configuration like the one above, it would be
+a bit pointless as all three of your CMP containers would be using the
+default CMP container configuration. To acually configure a container
+differently, you simply need to specifiy new values for the properties that
+the container has. These will override the defaults for that particular
+container declaration. So it's possible to declare multiple containers of
+the same type, but configure each one differently. Let's use our CMP_ENTITY
+containers above as an example.</p>
+
+<p>{code:xml|title=example_03.conf}
+<?xml version="1.0"?>
+<openejb></p>
+
+<p><Container id="My PostgreSQL Container" ctype="CMP_ENTITY">
+    Global_TX_Database    conf/postgresql.cmp.global-database.xml
+    Local_TX_Database     conf/postgresql.cmp.local-database.xml
+</Container></p>
+
+<p><Container id="My MySQL Container" ctype="CMP_ENTITY">
+    Global_TX_Database  conf/mysql.cmp.global-database.xml
+    Local_TX_Database   conf/mysql.cmp.local-database.xml
+</Container></p>
+
+<p><Container id="My InstantDB Container" ctype="CMP_ENTITY">
+    Global_TX_Database  conf/instantdb.cmp.global-database.xml
+    Local_TX_Database   conf/instantdb.cmp.local-database.xml
+</Container></p>
+
+<p><Container id="My Stateful Session Container" ctype="STATEFUL"/>
+<Container id="My Stateless Session Container" ctype="STATELESS"/></p>
+
+<p></openejb></p>
+
+<pre><code>The format of the configuration parameters is actually just regular old
+</code></pre>
+
+<p>java.util.Properties file format. It keeps things simple and doesn't
+require you to type endless amounts of tags that are just name/value pairs
+anyway. The java.util.Properties file format allows for spaces, tabs,
+colons, or equals signs to separate the name value pairs, so this would
+also be acceptable..</p>
+
+<pre><code>{code:xml|title=example_03.conf}
+&lt;?xml version="1.0"?&gt;
+&lt;openejb&gt;
+
+&lt;Container id="My PostgreSQL Container" ctype="CMP_ENTITY"&gt;
+! This is a comment   
+    Global_TX_Database = conf/postgresql.cmp.global-database.xml
+    Local_TX_Database=conf/postgresql.cmp.local-database.xml
+&lt;/Container&gt;
+
+&lt;Container id="My MySQL Container" ctype="CMP_ENTITY"&gt;
+# This is also a comment
+    Global_TX_Database:conf/mysql.cmp.global-database.xml
+    Local_TX_Database : conf/mysql.cmp.local-database.xml
+&lt;/Container&gt;
+
+
+&lt;Container id="My InstantDB Container" ctype="CMP_ENTITY"&gt;
+    Global_TX_Database  conf/instantdb.cmp.global-database.xml
+    Local_TX_Database       conf/instantdb.cmp.local-database.xml
+&lt;/Container&gt;
+
+&lt;/openejb&gt;
+</code></pre>
+
+<p><a name="Containers-Configurationproperties"></a></p>
+
+<h1>Configuration properties</h1>
+
+<p>The actual properties that each container type accepts are different for
+each type. Here is a reference for each container type.</p>
+
+<p><a name="Containers-CMP_ENTITYproperties"></a></p>
+
+<h2>CMP_ENTITY properties</h2>
+
+<p><a name="Containers-PoolSize"></a></p>
+
+<h3>PoolSize</h3>
+
+<p>The default size of the method ready bean pools. Every bean class gets its
+own pool of this size. The value should be any integer.</p>
+
+<p>Default:
+bq. PoolSize 100</p>
+
+<p><a name="Containers-Global_TX_Database"></a></p>
+
+<h3>Global_TX_Database</h3>
+
+<p>The name of the database.xml file that is used for global or container
+managed transactions. This will be used when the TransactionManager is
+managing the transaction, such as when the tx attribute is Supports(and
+there is a client tx), RequiresNew, Required or Manditory.</p>
+
+<p>Specifies the configuration for obtaining database connections and the
+mapping.xml schema which describes how beans map to the database.</p>
+
+<p>Default:
+bq. Global_TX_Database  conf/default.cmp_global_tx_database.xml</p>
+
+<p><a name="Containers-Local_TX_Database"></a></p>
+
+<h3>Local_TX_Database</h3>
+
+<p>The name of the database.xml file that is used for local or unspecified
+transaction contexts. This will be used when the TransactionManager is not
+managing the transaction, such as when the tx attribute is Supports (and
+there is no client tx), NotSupported, or Never.</p>
+
+<p>Specifies the configuration for obtaining database connections and the
+mapping.xml schema which describes how beans map to the database.</p>
+
+<p>Default:
+bq. Local_TX_Database   conf/default.cmp_local_tx_database.xml</p>
+
+<p><a name="Containers-BMP_ENTITYproperties"></a></p>
+
+<h2>BMP_ENTITY properties</h2>
+
+<p>The BMP Container has no customizable properties to override.</p>
+
+<p><a name="Containers-STATEFULproperties"></a></p>
+
+<h2>STATEFUL properties</h2>
+
+<p><a name="Containers-Passivator"></a></p>
+
+<h3>Passivator</h3>
+
+<p>The passivator is responsible for writing beans to disk at passivation
+time. Different passivators can be used by setting this property to the
+fully qualified class name of the PassivationStrategy implementation. The
+passivator is not responsible for invoking any callbacks or other
+processing, its only responsibly is to write the bean state to disk.</p>
+
+<p>Known implementations:
+    org.openejb.core.stateful.RAFPassivater
+    org.openejb.core.stateful.SimplePassivater
+Default:
+bq. Passivator   org.openejb.core.stateful.SimplePassivater</p>
+
+<p><a name="Containers-TimeOut"></a></p>
+
+<h3>TimeOut</h3>
+
+<p>Specifies the time to wait between invocations. This value is measured in
+minutes. A value of 5 would result in a time-out of 5 minutes between
+invocations.</p>
+
+<p>Default:
+bq. TimeOut  20</p>
+
+<p><a name="Containers-PoolSize"></a></p>
+
+<h3>PoolSize</h3>
+
+<p>Specifies the size of the bean pools for this stateful SessionBean
+container.</p>
+
+<p>Default:
+bq. PoolSize  100</p>
+
+<p><a name="Containers-BulkPassivate"></a></p>
+
+<h3>BulkPassivate</h3>
+
+<p>Property name that specifies the number of instances to passivate at one
+time when doing bulk passivation. Must be less than the PoolSize.</p>
+
+<p>Default:
+bq. BulkPassivate  50</p>
+
+<p><a name="Containers-STATELESSproperties"></a></p>
+
+<h2>STATELESS properties</h2>
+
+<p><a name="Containers-StrictPooling"></a></p>
+
+<h3>StrictPooling</h3>
+
+<p>Specifies the whether or not to this stateless SessionBean container should
+use a strict pooling algorithm. true or false</p>
+
+<p>Default:
+bq. StrictPooling  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/contribution-tips.cwiki
==============================================================================
--- websites/staging/openejb/trunk/content/contribution-tips.cwiki (added)
+++ websites/staging/openejb/trunk/content/contribution-tips.cwiki Sun Jul 10 04:34:53 2011
@@ -0,0 +1,134 @@
+h1. First steps
+
+# Subscribe to the [dev list|mailto:dev-subscribe@openejb.apche.org] and say Hi
+# Get the source code with svn or git
+** svn co https://svn.apache.org/repos/asf/openejb/trunk/openejb3
+# Build the code (maven 2.2.1 or higher recommended)
+** mvn clean install
+
+Play around with the examples under the examples/ directory.  Some of the neater ones are (ordered simple to complex):
+
+ -  simple-stateless ([see video| http://vimeo.com/6149008])
+ -  simple-stateful
+ -  simple-singleton
+ -  simple-mdb
+ -  async-methods
+ -  schedule-methods
+ -  injection-of-env-entry
+ -  injection-of-ejbs
+ -  injection-of-datasource
+ -  injection-of-entitymanager
+ -  testcase-injection
+ -  testing-transactions
+ -  transaction-rollback
+ -  testing-security
+ -  testing-security-2
+ -  simple-webservice
+
+
+h1. What is the process?
+
+{code:title=Contributor.java}
+public void contributeToOpenSource() {
+
+    boolean stillInterestedAndHavingFun = true;
+    int taskSize = 1; // start small!
+    
+    contributing:
+    while (stillInterestedAndHavingFun) {
+    
+        Task task = findSomethingInteresting(taskSize++);
+    
+        if (!task.hasJira()) {
+            createJira(task);
+        } else {
+            requestToBeAssignedToJira(task.jiraId());
+        }
+    
+        while (task.inProgress()) {
+    
+            chatOnListALittleGetCleverIdeas(task, new Ideas(task));
+            hackALittle(task);
+    
+            if (task.tooHard() || task.notFun()) {
+                // no big deal, try again with something else
+                taskSize--;
+                continue contributing;
+            }
+        }
+    
+        File patchFile = createSvnOrGitPatch(task);
+        attachToJira(task.jiraId(), patchFile);
+        askForReviewOnList(task.jiraId());
+    
+        while (!committed(patchFile)) {
+    
+            try {
+                pokeAtSometingElse();
+                helpOnUserList();
+                dayDream();
+            } catch (MoreThanAWeekException e) {
+                // Assume it fell off the radar -- happens.
+                // Evidence we need more committers.
+                bumpThreadOnList(task);
+            }
+        }
+    }
+
+}
+{code}
+
+After a while when people feel comfortable with you as contributor, they vote you in as a committer and ... big surprise ... there's almost no change in the daily routine.  You get access to svn and pretty much everything else stays the same.  Instead of submitting patches, now you have to help review them and commit them.  Instead of learning how to contribute to an open source project, now you have to learn how to help others get involved.  And of course it doesn't happen all at once, you never stop learning these things and you never stop wishing you had more time.
+
+No one cares how much code you can write or how fast you can write it.  We all just contribute what we can when we can and there are no expectations on how much, how often, or where.
+
+It's very much about the journey and there is no real end as long as you're having fun and learning.
+
+Probably finding something to do when you do have time is the hardest part ... that never changes.
+
+h1. Be Brave
+
+Don't assume everything has already been discussed a million times and you're the only one who doesn't know and so you shouldn't bother anyone and should just figure it out on your own.  That thinking is your enemy.  Don't do that or you will get nowhere ... very slowly.  So slowly that now you feel you really can't ask about it because surely everyone assumes you know it or have done it by now.  That thinking is a terrible trap.  Ask questions.  Post your thoughts.
+
+Don't worry about asking "stupid" questions on the list -- even simple questions have great value.  They often lead to surprisingly good discussions.  They also have a profound impact on the people around you, the ones you don't see.
+
+There are always a handful of people silently reading the list and wishing they could participate, but are less brave.  Whenever someone like you finally does show up and asks basic questions and shows it's ok, we usually get another 1 or 2 new faces who suddenly find the courage to speak up.
+
+Maybe it's like Karaoke; if the people singing sound like you when you sing, there are better odds you might get up and sign too. Seeing people like yourself do the things you want to do is inspiring.
+
+h1. Start Small
+
+You may suddenly get a creative surge and see many many things that could be done.  One thing you learn about open source is that you never know when life is going to intervene and you have to stop.  So it's always really good to get a little tiny thing working, checked in, and just grow it iteratively as time permits.  It is a practice that is key for people of any skill level.  And it goes wonderfully with Open Source as it adds plenty of space for new ideas.  Stone soup starts with the stone, not the soup!
+
+So no matter how big the idea or task, ask yourself "do I really need all of this to get started?".  Start with the tiniest possible version.  And then cut it down again :)
+
+Code is easier to grow than change.  And with today's refactoring tools even change is pretty easy.  What's hard is taking a big piece of code and jamming it into another big piece of code.  Don't work too long in isolation.
+
+Start small, get it checked in (or patch submitted) and work iteratively.
+
+h1. Things that always need doing
+
+ - Final variables & fields are preferred where possible, but a lot of the code is old.  Feel free to add them and hand the code back.
+ - If you have any skills with code coverage tools, then you'll probably find way too much to do!  Tests are always welcome.
+ - There are over a 1,000 TODO comments in the code.  Maybe some should be deleted.  Maybe some could be completed.  They probably all should have a JIRA id on them.
+ - Pick a random class, see if you can figure out what it is doing and javadoc it.
+ - Add @Override where applicable
+ - Intellij has an 'Inspect Code' feature.  Yikes does it produce a lot of output.
+ - No doubt there is some exception handling that can be greatly improved.
+
+Obviously, one could get quite bored doing just the above.  But sometimes the above tasks can lead to more fun and exciting things.  Anything that gets you in and looking at code and actually touching and changing it usually results in questions, discussions and ideas... then little passions and late nights and lack of sleep and caffeine abuse.
+
+
+h1. Things to avoid
+
+h4. Huge patches
+
+Huge patches are hard to digest.  Try to avoid them whenever possible.  Any step forward is a good one.  Small steps allow people to see where you're headed and give input.  That's true regardless if you are a committer or contributor.
+
+h4. Be careful with reformatting
+
+Try to never mix logic changes with code reformatting.  It makes it nearly impossible for others to see what the actual change was.
+
+ - If you are a committer and want to reformat something, do the reformat as a separate commit before or after the real change.  As long as they are separate and clearly marked it should be easy for people to see what is going on.
+ - If you are a contributor and want to reformat something, maybe suggest it on the list, but avoid submitting patches that are just reformatting.
+

Added: websites/staging/openejb/trunk/content/contribution-tips.html
==============================================================================
--- websites/staging/openejb/trunk/content/contribution-tips.html (added)
+++ websites/staging/openejb/trunk/content/contribution-tips.html Sun Jul 10 04:34:53 2011
@@ -0,0 +1,301 @@
+<!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>Contribution Tips</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="ContributionTips-Firststeps"></a></p>
+
+<h1>First steps</h1>
+
+<ol>
+<li>Subscribe to the <a href="mailto:dev-subscribe@openejb.apche.org.html">dev list</a>
+and say Hi</li>
+<li>Get the source code with svn or git
+** svn co https://svn.apache.org/repos/asf/openejb/trunk/openejb3</li>
+<li>Build the code (maven 2.2.1 or higher recommended)
+** mvn clean install</li>
+</ol>
+
+<p>Play around with the examples under the examples/ directory.  Some of the
+neater ones are (ordered simple to complex):</p>
+
+<ul>
+<li>simple-stateless (<a href="-http://vimeo.com/6149008.html">see video</a>
+)</li>
+<li>simple-stateful</li>
+<li>simple-singleton</li>
+<li>simple-mdb</li>
+<li>async-methods</li>
+<li>schedule-methods</li>
+<li>injection-of-env-entry</li>
+<li>injection-of-ejbs</li>
+<li>injection-of-datasource</li>
+<li>injection-of-entitymanager</li>
+<li>testcase-injection</li>
+<li>testing-transactions</li>
+<li>transaction-rollback</li>
+<li>testing-security</li>
+<li>testing-security-2</li>
+<li>simple-webservice</li>
+</ul>
+
+<p><a name="ContributionTips-Whatistheprocess?"></a></p>
+
+<h1>What is the process?</h1>
+
+<p><DIV class="code panel" style="border-style: solid;border-width: 1px;"><DIV class="codeHeader panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;"><B>Contributor.java</B></DIV><DIV class="codeContent panelContent">
+    public void contributeToOpenSource() {</p>
+
+<pre><code>    boolean stillInterestedAndHavingFun = true;
+    int taskSize = 1; // start small!
+
+    contributing:
+    while (stillInterestedAndHavingFun) {
+
+    Task task = findSomethingInteresting(taskSize++);
+
+    if (!task.hasJira()) {
+        createJira(task);
+    } else {
+        requestToBeAssignedToJira(task.jiraId());
+    }
+
+    while (task.inProgress()) {
+
+        chatOnListALittleGetCleverIdeas(task, new Ideas(task));
+        hackALittle(task);
+
+        if (task.tooHard() || task.notFun()) {
+        // no big deal, try again with something else
+        taskSize--;
+        continue contributing;
+        }
+    }
+
+    File patchFile = createSvnOrGitPatch(task);
+    attachToJira(task.jiraId(), patchFile);
+    askForReviewOnList(task.jiraId());
+
+    while (!committed(patchFile)) {
+
+        try {
+        pokeAtSometingElse();
+        helpOnUserList();
+        dayDream();
+        } catch (MoreThanAWeekException e) {
+        // Assume it fell off the radar -- happens.
+        // Evidence we need more committers.
+        bumpThreadOnList(task);
+        }
+    }
+    }
+
+}
+</code></pre>
+
+<p>After a while when people feel comfortable with you as contributor, they
+vote you in as a committer and ... big surprise ... there's almost no
+change in the daily routine.  You get access to svn and pretty much
+everything else stays the same.  Instead of submitting patches, now you
+have to help review them and commit them.  Instead of learning how to
+contribute to an open source project, now you have to learn how to help
+others get involved.  And of course it doesn't happen all at once, you
+never stop learning these things and you never stop wishing you had more
+time.</p>
+
+<p>No one cares how much code you can write or how fast you can write it.  We
+all just contribute what we can when we can and there are no expectations
+on how much, how often, or where.</p>
+
+<p>It's very much about the journey and there is no real end as long as you're
+having fun and learning.</p>
+
+<p>Probably finding something to do when you do have time is the hardest part
+... that never changes.</p>
+
+<p><a name="ContributionTips-BeBrave"></a></p>
+
+<h1>Be Brave</h1>
+
+<p>Don't assume everything has already been discussed a million times and
+you're the only one who doesn't know and so you shouldn't bother anyone and
+should just figure it out on your own.  That thinking is your enemy.  Don't
+do that or you will get nowhere ... very slowly.  So slowly that now you
+feel you really can't ask about it because surely everyone assumes you know
+it or have done it by now.  That thinking is a terrible trap.  Ask
+questions.  Post your thoughts.</p>
+
+<p>Don't worry about asking "stupid" questions on the list -- even simple
+questions have great value.  They often lead to surprisingly good
+discussions.  They also have a profound impact on the people around you,
+the ones you don't see.</p>
+
+<p>There are always a handful of people silently reading the list and wishing
+they could participate, but are less brave.  Whenever someone like you
+finally does show up and asks basic questions and shows it's ok, we usually
+get another 1 or 2 new faces who suddenly find the courage to speak up.</p>
+
+<p>Maybe it's like Karaoke; if the people singing sound like you when you
+sing, there are better odds you might get up and sign too. Seeing people
+like yourself do the things you want to do is inspiring.</p>
+
+<p><a name="ContributionTips-StartSmall"></a></p>
+
+<h1>Start Small</h1>
+
+<p>You may suddenly get a creative surge and see many many things that could
+be done.  One thing you learn about open source is that you never know when
+life is going to intervene and you have to stop.  So it's always really
+good to get a little tiny thing working, checked in, and just grow it
+iteratively as time permits.  It is a practice that is key for people of
+any skill level.  And it goes wonderfully with Open Source as it adds
+plenty of space for new ideas.  Stone soup starts with the stone, not the
+soup!</p>
+
+<p>So no matter how big the idea or task, ask yourself "do I really need all
+of this to get started?".  Start with the tiniest possible version.  And
+then cut it down again :)</p>
+
+<p>Code is easier to grow than change.  And with today's refactoring tools
+even change is pretty easy.  What's hard is taking a big piece of code and
+jamming it into another big piece of code.  Don't work too long in
+isolation.</p>
+
+<p>Start small, get it checked in (or patch submitted) and work iteratively.</p>
+
+<p><a name="ContributionTips-Thingsthatalwaysneeddoing"></a></p>
+
+<h1>Things that always need doing</h1>
+
+<ul>
+<li>Final variables &amp; fields are preferred where possible, but a lot of the
+code is old.  Feel free to add them and hand the code back.</li>
+<li>If you have any skills with code coverage tools, then you'll probably
+find way too much to do!  Tests are always welcome.</li>
+<li>There are over a 1,000 TODO comments in the code.  Maybe some should be
+deleted.  Maybe some could be completed.  They probably all should have a
+JIRA id on them.</li>
+<li>Pick a random class, see if you can figure out what it is doing and
+javadoc it.</li>
+<li>Add @Override where applicable</li>
+<li>Intellij has an 'Inspect Code' feature.  Yikes does it produce a lot of
+output.</li>
+<li>No doubt there is some exception handling that can be greatly improved.</li>
+</ul>
+
+<p>Obviously, one could get quite bored doing just the above.  But sometimes
+the above tasks can lead to more fun and exciting things.  Anything that
+gets you in and looking at code and actually touching and changing it
+usually results in questions, discussions and ideas... then little passions
+and late nights and lack of sleep and caffeine abuse.</p>
+
+<p><a name="ContributionTips-Thingstoavoid"></a></p>
+
+<h1>Things to avoid</h1>
+
+<p><a name="ContributionTips-Hugepatches"></a></p>
+
+<h4>Huge patches</h4>
+
+<p>Huge patches are hard to digest.  Try to avoid them whenever possible.  Any
+step forward is a good one.  Small steps allow people to see where you're
+headed and give input.  That's true regardless if you are a committer or
+contributor.</p>
+
+<p><a name="ContributionTips-Becarefulwithreformatting"></a></p>
+
+<h4>Be careful with reformatting</h4>
+
+<p>Try to never mix logic changes with code reformatting.  It makes it nearly
+impossible for others to see what the actual change was.</p>
+
+<ul>
+<li>If you are a committer and want to reformat something, do the reformat
+as a separate commit before or after the real change.  As long as they are
+separate and clearly marked it should be easy for people to see what is
+going on.</li>
+<li>If you are a contributor and want to reformat something, maybe suggest
+it on the list, but avoid submitting patches that are just reformatting.</li>
+</ul>
+
+        </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/created-on-thu-apr-22-16.59.59-edt-2010.cwiki
==============================================================================
--- websites/staging/openejb/trunk/content/created-on-thu-apr-22-16.59.59-edt-2010.cwiki (added)
+++ websites/staging/openejb/trunk/content/created-on-thu-apr-22-16.59.59-edt-2010.cwiki Sun Jul 10 04:34:53 2011
@@ -0,0 +1 @@
+blah

Added: websites/staging/openejb/trunk/content/created-on-thu-apr-22-16.59.59-edt-2010.html
==============================================================================
--- websites/staging/openejb/trunk/content/created-on-thu-apr-22-16.59.59-edt-2010.html (added)
+++ websites/staging/openejb/trunk/content/created-on-thu-apr-22-16.59.59-edt-2010.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>created on Thu Apr 22 16.59.59 EDT 2010</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>blah</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/creating-itests.cwiki
==============================================================================
--- websites/staging/openejb/trunk/content/creating-itests.cwiki (added)
+++ websites/staging/openejb/trunk/content/creating-itests.cwiki Sun Jul 10 04:34:53 2011
@@ -0,0 +1,127 @@
+h1. OpenEJB itests
+
+The OpenEJB itests module is a framework to create EJB test cases that are designed according to the JUnit rules, i.e. they all have setUp, tests and tearDown methods. Since it's JUnit-based, you can do whatever you could do in JUnit.
+
+This page describes the steps to create EJB test cases.
+
+h2. How itests work
+
+The itests module lives in OpenEJB's repository in the _modules\itests_ directory. Setting up the test environment to execute the itests is based on ([maven-itest-plugin-1.0 plugin|http://svn.apache.org/repos/asf/maven/maven-1/plugins-sandbox/trunk/itest/]). 
+
+Take a look at maven.xml in modules\itests directory. There you'll see that the default goal is _ejb:install_, which in turn executes _itest_. When the EJBs (todo: describe it a bit more) are done, the _itest:setup_ goal is executed, which starts the real game. First, _org/openejb/Security_ configuration is started. Once it's done, _openejb-itests-xxx.jar_ is deployed, which is _org/openejb/Itests_ configuration to be started, afterwards. When the configurations are deployed and started, the maven-itest-plugin executes junit (see [Ant JUnit task documentation|http://ant.apache.org/manual/OptionalTasks/junit.html] and project.properties of the itests module). The project.properties file configures which itests are run and some other stuff.
+
+The first itest test case is _org.openejb.test.entity.cmp.CmpTestSuite_. Consult this for more information. Then the others defined in _maven.itest.includes_ property are executed.
+
+The order in which the itests are executed is important, so the first order is set up via the maven.itest.includes property, then the test suites add their tests in some order, and finally the method names in the test classes put yet another order. So, be careful what name your test method name will become. It may influence the order.
+
+Some EJBs access database resources. It's even more important for CMPs. The itests module uses the database as defined in the _openejb.test.database_ property. It's currently defined in the _project.properties_ file of the module. You can change its value to whatever you wish using the Maven property setting approaches (-D on the command line, project.properties, build.properties in your home directory or the project you work in).
+
+So, the last important information is how the junit tests access the server resources - EJBs. It's done via executing session beans that in turn get at the test EJBs, mostly CMPs. It's also possible that the CMP itests will be accessed directly without having to pass on the call through a session bean.
+
+If itests are part of a larger project structure you can disable executing it using the _maven.itest.skip_ property. Set it to _true_ and Maven won't run the itests.
+
+h2. Simple CMP 2.1 itest
+
+h3. Database setup
+
+The itests default database is Derby. The class - _org.openejb.test.DerbyTestDatabase_ - is instantiated upon executing _org.openejb.testTestManager.getDatabase()_ in each test case's _setUp()_ method. Remember, you can define any other database using the _openejb.test.database_ property or do initialization of your own database choice in the setUp() method.
+
+The current implementation of database initialization is based on two DerbyTestDatabse methods: _createCMP2Model()_ and _dropCMP2Model()_ that create and drop database structure, accordingly.
+
+h3. CMP 2.1 deployment
+
+{info:title=Information}
+Unless specified, all directories are relative to _modules/itests_ directory and commands are executed in it.
+{info}
+
+A Maven project can produce one build artefact. It's very important to keep in mind whenever your tests are to be based on a EJB that's not built by default. The default EJBs are defined in _modules/itests/src/ejb/META-INF/ejb-jar.xml_. The corresponding deployment plan - the _openejb-jar.xml_ file is in _modules/itests/src/ejb/META-INF/openejb-jar.xml_.
+
+If you want to test your own EJB, you need to build it yourself, i.e. describe the build and deployment in _modules/itests/maven.xml_ in the pregoal of _itest:setup_.
+
+In the following example, Ant's jar builds openejb-cmp2-petstore.jar file, which in turn is distributed and started in Geronimo. The _id_ attribute of _deploy:start_ is as specified in the module's deployment plan. See [Geronimo Deployment|http://wiki.apache.org/geronimo/Deployment] for more information about Geronimo deployment plans.
+
+{noformat}
+<ant:jar destfile="${basedir}/target/openejb-cmp2-petstore.jar">
+  <fileset dir="${basedir}/target/classes">
+    <include name="**/cmp2/petstore/*.class"/>
+    <include name="**/TestFailureException.class"/>
+  </fileset>
+  <metainf dir="${basedir}/src/cmp2/petstore" includes="*.xml"/>
+</ant:jar>
+<deploy:distribute
+  uri="deployer:geronimo:jmx:rmi://localhost/jndi/rmi:/JMXConnector"
+  username="system"
+  password="manager"
+  module="${basedir}/target/openejb-cmp2-petstore.jar"
+/>
+<deploy:start
+  uri="deployer:geronimo:jmx:rmi://localhost/jndi/rmi:/JMXConnector"
+  username="system"
+  password="manager"
+  id="org/openejb/cmp2/petstore"/>
+{noformat} 
+
+h3. Execution
+
+When EJB classes, deployment descriptor and plan, maven.xml are all set up, it's time to execute your tests. In order to run itests you will run Maven in _modules/itests_ directory.
+
+{noformat}
+~/openejb/modules/itests
+$ maven
+{noformat}
+
+It's also possible to override project properties and run only some test cases.
+
+{noformat}
+~/openejb/modules/itests
+$ maven -Dmaven.itest.includes=**/Cmp2TestSuite.java
+{noformat}
+
+When a failure occurs, you should take a look at the result file of the failed test suite in _target/itest-reports_, e.g.
+
+{noformat}
+~/openejb/modules/itests
+$ maven -Dmaven.itest.includes=**/Cmp2TestSuite.java -o
+...
+    [junit] Tests run: 113, Failures: 1, Errors: 0, Time elapsed: 22,132 sec
+    [junit] [ERROR] TEST org.openejb.test.entity.cmp2.Cmp2TestSuite FAILED
+...
+BUILD FAILED
+File...... C:\Documents and Settings\root\.maven\cache\maven-itest-plugin-1.0\plugin.jelly
+Element... fail
+Line...... 166
+Column.... 64
+There were test failures.
+Total time: 2 minutes 3 seconds
+Finished at: Sun Jul 17 17:48:36 CEST 2005
+
+$ more target/itest-reports/TEST-org.openejb.test.entity.cmp2.Cmp2TestSuite.txt
+Testsuite: org.openejb.test.entity.cmp2.Cmp2TestSuite
+Tests run: 113, Failures: 1, Errors: 0, Time elapsed: 22,132 sec
+
+Testcase: PetstoreTests.create: FAILED
+Received Exception class java.lang.NullPointerException : null
+junit.framework.AssertionFailedError: Received Exception class java.lang.NullPointerException : null
+        at org.openejb.test.entity.cmp2.PetstoreTests.test01_create(PetstoreTests.java:84)
+        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+        at org.openejb.test.NumberedTestCase.runTestMethod(NumberedTestCase.java:195)
+        at org.openejb.test.NumberedTestCase$3.protect(NumberedTestCase.java:169)
+        at org.openejb.test.NumberedTestCase.run(NumberedTestCase.java:172)
+        at org.openejb.test.NumberedTestCase.run(NumberedTestCase.java:141)
+        at org.openejb.test.TestSuite.run(TestSuite.java:71)
+...
+{noformat}
+
+Complete execution log is in _target/openejb/var/log/openejb.log_ of the itests module.
+
+h4. Running the Tests in Eclipse.
+
+The steps for running the iTests inside of Eclipse are given below. They are
+
+1) For Local Interface Tests, the class to be run is _org.apache.openejb.iTest_.
+2) For Remote Interface Tests, the class to be run is _org.apache.openejb.RemoteiTest_.
+
+In both the cases you need to give _'-Dopenejb.home=target/test-classes/'_ as a vm argument 
+for the tests to run. 
\ No newline at end of file

Added: websites/staging/openejb/trunk/content/creating-itests.html
==============================================================================
--- websites/staging/openejb/trunk/content/creating-itests.html (added)
+++ websites/staging/openejb/trunk/content/creating-itests.html Sun Jul 10 04:34:53 2011
@@ -0,0 +1,297 @@
+<!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>Creating itests</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="Creatingitests-OpenEJBitests"></a></p>
+
+<h1>OpenEJB itests</h1>
+
+<p>The OpenEJB itests module is a framework to create EJB test cases that are
+designed according to the JUnit rules, i.e. they all have setUp, tests and
+tearDown methods. Since it's JUnit-based, you can do whatever you could do
+in JUnit.</p>
+
+<p>This page describes the steps to create EJB test cases.</p>
+
+<p><a name="Creatingitests-Howitestswork"></a></p>
+
+<h2>How itests work</h2>
+
+<p>The itests module lives in OpenEJB's repository in the <em>modules\itests</em> directory. Setting up the test environment to execute the itests is based on (<a href="http://svn.apache.org/repos/asf/maven/maven-1/plugins-sandbox/trunk/itest/">maven-itest-plugin-1.0 plugin</a>
+). </p>
+
+<p>Take a look at maven.xml in modules\itests directory. There you'll see that
+the default goal is <em>ejb:install</em>, which in turn executes <em>itest</em>. When the
+EJBs (todo: describe it a bit more) are done, the <em>itest:setup</em> goal is
+executed, which starts the real game. First, <em>org/openejb/Security</em>
+configuration is started. Once it's done, <em>openejb-itests-xxx.jar</em> is
+deployed, which is <em>org/openejb/Itests</em> configuration to be started,
+afterwards. When the configurations are deployed and started, the
+maven-itest-plugin executes junit (see <a href="http://ant.apache.org/manual/OptionalTasks/junit.html">Ant JUnit task documentation</a>
+ and project.properties of the itests module). The project.properties file
+configures which itests are run and some other stuff.</p>
+
+<p>The first itest test case is <em>org.openejb.test.entity.cmp.CmpTestSuite</em>.
+Consult this for more information. Then the others defined in
+<em>maven.itest.includes</em> property are executed.</p>
+
+<p>The order in which the itests are executed is important, so the first order
+is set up via the maven.itest.includes property, then the test suites add
+their tests in some order, and finally the method names in the test classes
+put yet another order. So, be careful what name your test method name will
+become. It may influence the order.</p>
+
+<p>Some EJBs access database resources. It's even more important for CMPs. The
+itests module uses the database as defined in the <em>openejb.test.database</em>
+property. It's currently defined in the <em>project.properties</em> file of the
+module. You can change its value to whatever you wish using the Maven
+property setting approaches (-D on the command line, project.properties,
+build.properties in your home directory or the project you work in).</p>
+
+<p>So, the last important information is how the junit tests access the server
+resources - EJBs. It's done via executing session beans that in turn get at
+the test EJBs, mostly CMPs. It's also possible that the CMP itests will be
+accessed directly without having to pass on the call through a session
+bean.</p>
+
+<p>If itests are part of a larger project structure you can disable executing
+it using the <em>maven.itest.skip</em> property. Set it to <em>true</em> and Maven won't
+run the itests.</p>
+
+<p><a name="Creatingitests-SimpleCMP2.1itest"></a></p>
+
+<h2>Simple CMP 2.1 itest</h2>
+
+<p><a name="Creatingitests-Databasesetup"></a></p>
+
+<h3>Database setup</h3>
+
+<p>The itests default database is Derby. The class -
+<em>org.openejb.test.DerbyTestDatabase</em> - is instantiated upon executing
+<em>org.openejb.testTestManager.getDatabase()</em> in each test case's <em>setUp()</em>
+method. Remember, you can define any other database using the
+<em>openejb.test.database</em> property or do initialization of your own database
+choice in the setUp() method.</p>
+
+<p>The current implementation of database initialization is based on two
+DerbyTestDatabse methods: <em>createCMP2Model()</em> and <em>dropCMP2Model()</em> that
+create and drop database structure, accordingly.</p>
+
+<p><a name="Creatingitests-CMP2.1deployment"></a></p>
+
+<h3>CMP 2.1 deployment</h3>
+
+<p>{info:title=Information}
+Unless specified, all directories are relative to <em>modules/itests</em>
+directory and commands are executed in it.
+{info}</p>
+
+<p>A Maven project can produce one build artefact. It's very important to keep
+in mind whenever your tests are to be based on a EJB that's not built by
+default. The default EJBs are defined in
+<em>modules/itests/src/ejb/META-INF/ejb-jar.xml</em>. The corresponding deployment
+plan - the <em>openejb-jar.xml</em> file is in
+<em>modules/itests/src/ejb/META-INF/openejb-jar.xml</em>.</p>
+
+<p>If you want to test your own EJB, you need to build it yourself, i.e.
+describe the build and deployment in <em>modules/itests/maven.xml</em> in the
+pregoal of <em>itest:setup</em>.</p>
+
+<p>In the following example, Ant's jar builds openejb-cmp2-petstore.jar file,
+which in turn is distributed and started in Geronimo. The <em>id</em> attribute of
+<em>deploy:start</em> is as specified in the module's deployment plan. See <a href="http://wiki.apache.org/geronimo/Deployment">Geronimo Deployment</a>
+ for more information about Geronimo deployment plans.</p>
+
+<pre><code>&lt;ant:jar destfile="${basedir}/target/openejb-cmp2-petstore.jar"&gt;
+  &lt;fileset dir="${basedir}/target/classes"&gt;
+    &lt;include name="**/cmp2/petstore/*.class"/&gt;
+    &lt;include name="**/TestFailureException.class"/&gt;
+  &lt;/fileset&gt;
+  &lt;metainf dir="${basedir}/src/cmp2/petstore" includes="*.xml"/&gt;
+&lt;/ant:jar&gt;
+&lt;deploy:distribute
+  uri="deployer:geronimo:jmx:rmi://localhost/jndi/rmi:/JMXConnector"
+  username="system"
+  password="manager"
+  module="${basedir}/target/openejb-cmp2-petstore.jar"
+/&gt;
+&lt;deploy:start
+  uri="deployer:geronimo:jmx:rmi://localhost/jndi/rmi:/JMXConnector"
+  username="system"
+  password="manager"
+  id="org/openejb/cmp2/petstore"/&gt;
+</code></pre>
+
+<p><a name="Creatingitests-Execution"></a></p>
+
+<h3>Execution</h3>
+
+<p>When EJB classes, deployment descriptor and plan, maven.xml are all set up,
+it's time to execute your tests. In order to run itests you will run Maven
+in <em>modules/itests</em> directory.</p>
+
+<pre><code>~/openejb/modules/itests
+$ maven
+</code></pre>
+
+<p>It's also possible to override project properties and run only some test
+cases.</p>
+
+<pre><code>~/openejb/modules/itests
+$ maven -Dmaven.itest.includes=**/Cmp2TestSuite.java
+</code></pre>
+
+<p>When a failure occurs, you should take a look at the result file of the
+failed test suite in <em>target/itest-reports</em>, e.g.</p>
+
+<pre><code>~/openejb/modules/itests
+$ maven -Dmaven.itest.includes=**/Cmp2TestSuite.java -o
+...
+ [junit]
+</code></pre>
+
+<p>Tests run: 113, Failures: 1, Errors: 0, Time elapsed: 22,132 sec
+     [junit]
+ [ERROR]
+ TEST org.openejb.test.entity.cmp2.Cmp2TestSuite FAILED
+    ...
+    BUILD FAILED
+    File...... C:\Documents and
+Settings\root.maven\cache\maven-itest-plugin-1.0\plugin.jelly
+    Element... fail
+    Line...... 166
+    Column.... 64
+    There were test failures.
+    Total time: 2 minutes 3 seconds
+    Finished at: Sun Jul 17 17:48:36 CEST 2005</p>
+
+<pre><code>$ more
+</code></pre>
+
+<p>target/itest-reports/TEST-org.openejb.test.entity.cmp2.Cmp2TestSuite.txt
+    Testsuite: org.openejb.test.entity.cmp2.Cmp2TestSuite
+    Tests run: 113, Failures: 1, Errors: 0, Time elapsed: 22,132 sec</p>
+
+<pre><code>Testcase: PetstoreTests.create: FAILED
+Received Exception class java.lang.NullPointerException : null
+junit.framework.AssertionFailedError: Received Exception class
+</code></pre>
+
+<p>java.lang.NullPointerException : null
+        at
+org.openejb.test.entity.cmp2.PetstoreTests.test01_create(PetstoreTests.java:84)
+        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+        at
+sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+        at
+sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+        at
+org.openejb.test.NumberedTestCase.runTestMethod(NumberedTestCase.java:195)
+        at
+org.openejb.test.NumberedTestCase$3.protect(NumberedTestCase.java:169)
+        at org.openejb.test.NumberedTestCase.run(NumberedTestCase.java:172)
+        at org.openejb.test.NumberedTestCase.run(NumberedTestCase.java:141)
+        at org.openejb.test.TestSuite.run(TestSuite.java:71)
+    ...</p>
+
+<p>Complete execution log is in <em>target/openejb/var/log/openejb.log</em> of the
+itests module.</p>
+
+<p><a name="Creatingitests-RunningtheTestsinEclipse."></a></p>
+
+<h4>Running the Tests in Eclipse.</h4>
+
+<p>The steps for running the iTests inside of Eclipse are given below. They
+are</p>
+
+<p>1) For Local Interface Tests, the class to be run is
+<em>org.apache.openejb.iTest</em>.
+2) For Remote Interface Tests, the class to be run is
+<em>org.apache.openejb.RemoteiTest</em>.</p>
+
+<p>In both the cases you need to give <em>'-Dopenejb.home=target/test-classes/'</em>
+as a vm argument 
+for the tests to run. </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>