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/12 20:06:36 UTC

svn commit: r792601 [15/49] - /websites/staging/openejb/trunk/content/

Modified: websites/staging/openejb/trunk/content/failover.html
==============================================================================
--- websites/staging/openejb/trunk/content/failover.html (original)
+++ websites/staging/openejb/trunk/content/failover.html Tue Jul 12 18:06:32 2011
@@ -152,12 +152,12 @@
           <P>
             <!-- $BODY -->
             <DIV id="PageContent">
-          <p><a name="Failover-Overview">&lt;<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">a></p>
+          <p><a name="Failover-Overview"></a></p>
 
 <h1>Overview</h1>
 
 <p>OpenEJB supports stateless failover.  Specifically, the ability for an EJB
-client to failover from one server to the ne<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">t if a request cannot be
+client to failover from one server to the next if a request cannot be
 completed.  No application state information is communicated between the
 servers, so this functionality should be used only with applications that
 are inherently stateless.  A common term for this sort of setup is a server
@@ -166,12 +166,12 @@ farm.</p>
 <p>The basic design assumption is that all servers in the same group have the
 same applications deployed and are capable of doing the same job.  Servers
 can be brought online and offline while clients are running.  As members
-join<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">leave this information is sent to the client as part of normal EJB
-request<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">response communication so active clients always have the most
+join/leave this information is sent to the client as part of normal EJB
+request/response communication so active clients always have the most
 current information on servers that can process their request should
 communication with a particular server fail.</p>
 
-<p><a name="Failover-Failover">&lt;<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">a></p>
+<p><a name="Failover-Failover"></a></p>
 
 <h2>Failover</h2>
 
@@ -183,32 +183,32 @@ list.  This is an important distinction 
 and forth on every request, only on change.  If the membership of the
 cluster is stable there is essentially no clustering overhead to the
 protocol -- 8 byte overhead to each request and 1 byte on each response --
-so you will <em>not</em> see an e<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">ponential slowdown in response times the more
+so you will <em>not</em> see an exponential slowdown in response times the more
 members are added to the cluster.  This new list takes affect for all
-pro<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">ies that share the same connection.</p>
+proxies that share the same connection.</p>
 
-<p>When a server shuts down, more connections are refused, e<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">isting
+<p>When a server shuts down, more connections are refused, existing
 connections not in mid-request are closed, any remaining connections are
 closed immediately after completion of the request in progress and clients
-can failover gracefully to the ne<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">t server in the list.  If a server
-crashes requests are retried on the ne<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">t server in the list (or depending
+can failover gracefully to the next server in the list.  If a server
+crashes requests are retried on the next server in the list (or depending
 on the ConnectionStrategy).  This failover pattern is followed until there
 are no more servers in the list at which point the client attempts a final
 multicast search (if it was created with a multicast PROVIDER_URL) before
-abandoning the request and throwing an e<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">ception to the caller.</p>
+abandoning the request and throwing an exception to the caller.</p>
 
 <p>By default, the failover is ordered but random selection is supported.  The
 multicast discovery aspect of the client adds a nice randomness to the
 selection of the first server.</p>
 
-<p><a name="Failover-Discovery">&lt;<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">a></p>
+<p><a name="Failover-Discovery"></a></p>
 
 <h2>Discovery</h2>
 
 <p>Each discoverable service has a URI which is broadcast as a heartbeat to
 other servers in the cluster.  This URI advertises the service's type, its
 cluster group, and its location in the format of 'group:type:location'. 
-Say for e<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">ample "cluster1:ejb:ejbd:<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"><IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">thehost:4201".  The URI is sent out
+Say for example "cluster1:ejb:ejbd://thehost:4201".  The URI is sent out
 repeatedly in a pulse and its presence on the network indicates its
 availability and its absence indicates the service is no longer available.</p>
 
@@ -218,15 +218,15 @@ section.  The rate at which the heartbea
 specified via the 'heart_rate' property.  The default is 500 milliseconds. 
 This rate is also used when listening for services on the network.  If a
 service goes missing for the duration of 'heart_rate' multiplied by
-'ma<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"><em>missed</em>heartbeats', then the service is considered dead.</p>
+'max_missed_heartbeats', then the service is considered dead.</p>
 
-<p>The 'group' property, cluster1 in the e<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">ample, is used to dissect the
+<p>The 'group' property, cluster1 in the example, is used to dissect the
 servers on the network into smaller logical clusters.  A given server will
-broadcast all it's services with the group prefi<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">ed in the URI, as well it
+broadcast all it's services with the group prefixed in the URI, as well it
 will ignore any services it sees broadcast if they do not share the same
 group name.</p>
 
-<p><a name="Failover-Multicast(UDP)">&lt;<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">a></p>
+<p><a name="Failover-Multicast(UDP)"></a></p>
 
 <h1>Multicast (UDP)</h1>
 
@@ -241,15 +241,15 @@ Complicated libraries that ride atop UDP
 (retransmission) and ordering on UDP can be avoided.  As well the
 advantages UDP has over TCP are retained as there are no java layers
 attempting to force UDP communication to be more TCP-like.  The simple
-design means UDP<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">Multicast is only used for discovery and from there on out
-critical information is transmitted over TCP<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">IP which is obviously going to
+design means UDP/Multicast is only used for discovery and from there on out
+critical information is transmitted over TCP/IP which is obviously going to
 do a better job at ensuring reliability and ordering.</p>
 
-<p><a name="Failover-ServerConfiguration">&lt;<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">a></p>
+<p><a name="Failover-ServerConfiguration"></a></p>
 
 <h2>Server Configuration</h2>
 
-<p>When you boot the server there should be a conf<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">multicast.properties file
+<p>When you boot the server there should be a conf/multicast.properties file
 containing:</p>
 
 <pre><code>server      = org.apache.openejb.server.discovery.MulticastDiscoveryAgent
@@ -260,29 +260,29 @@ group       = default
 </code></pre>
 
 <p>Just need to enable that by setting 'disabled=false'.  All of the above
-settings e<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">cept <em>server</em> can be changed.  The <em>port</em> and <em>bind</em> must
-be valid for general multicast<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">udp network communication.</p>
+settings except <em>server</em> can be changed.  The <em>port</em> and <em>bind</em> must
+be valid for general multicast/udp network communication.</p>
 
 <p>The <em>group</em> setting can be changed to further group servers that may use
 the same multicast channel.  As shown below the client also has a <em>group</em>
 setting which can be used to select an appropriate server from the
 multicast channel.</p>
 
-<p><a name="Failover-MulticastClient">&lt;<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">a></p>
+<p><a name="Failover-MulticastClient"></a></p>
 
 <h2>Multicast Client</h2>
 
 <p>The multicast functionality is not just for servers to find each other in a
 cluster, it can also be used for EJB clients to discover a server.  A
-special "multicast:<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"><IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">" URL can be used in the InitialConte<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">t properties to
+special "multicast://" URL can be used in the InitialContext properties to
 signify that multicast should be used to seed the connection process.  Such
 as:</p>
 
 <pre><code>Properties p = new Properties();
-p.put(Conte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t.INITIAL_CONTEXT_FACTORY,
-"org.apache.openejb.client.RemoteInitialConte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;tFactory");
-p.put(Conte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t.PROVIDER_URL, "multicast:&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;239.255.2.3:6142?group=default");
-InitialConte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t remoteConte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t = new InitialConte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t(p);
+p.put(Context.INITIAL_CONTEXT_FACTORY,
+"org.apache.openejb.client.RemoteInitialContextFactory");
+p.put(Context.PROVIDER_URL, "multicast://239.255.2.3:6142?group=default");
+InitialContext remoteContext = new InitialContext(p);
 </code></pre>
 
 <p>The URL has optional query parameters such as "schemes" and "group" and
@@ -305,15 +305,15 @@ Servers can use multicast to discover ea
 free to connect to servers in the network using the server's TCP address.</p>
 
 <pre><code>Properties p = new Properties();
-p.put(Conte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t.INITIAL_CONTEXT_FACTORY,  "org.apache.openejb.client.RemoteInitialConte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;tFactory");
-p.put(Conte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t.PROVIDER_URL, "ejbd:&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;192.168.1.30:4201");
-InitialConte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t remoteConte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t = new InitialConte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t(p);
+p.put(Context.INITIAL_CONTEXT_FACTORY,  "org.apache.openejb.client.RemoteInitialContextFactory");
+p.put(Context.PROVIDER_URL, "ejbd://192.168.1.30:4201");
+InitialContext remoteContext = new InitialContext(p);
 </code></pre>
 
 <p>When the client connects, the server will send the URLs of all the servers
 in the group and failover will take place normally.</p>
 
-<p><a name="Failover-Multipoint(TCP)">&lt;<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">a></p>
+<p><a name="Failover-Multipoint(TCP)"></a></p>
 
 <h1>Multipoint (TCP)</h1>
 
@@ -323,7 +323,7 @@ connection to each other server in the n
 
 <p>To join the network, the server must be configured to know the address of
 at least one server in the network and connect to it.  When it does both
-servers will e<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">change the full list of all the other servers each knows
+servers will exchange the full list of all the other servers each knows
 about.  Each server will then connect to any new servers they've  just
 learned about and repeat the processes with those new servers.  The end
 result is that everyone has a direct connection to everyone 100% of the
@@ -336,19 +336,19 @@ least one server in the network and be a
 it will get the full (and dynamically maintained) list of every server in
 the network.  The client doesn't connect to each of those servers
 immediately, but rather consults the list in the event of a failover, using
-it to decide who to connect to ne<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">t.</p>
+it to decide who to connect to next.</p>
 
 <p>The entire process is essentially the art of using a statically maintained
 list to bootstrap getting the more valuable dynamically maintained list.</p>
 
 <p>{div:style=clear:both;}{div}</p>
 
-<p><a name="Failover-ServerConfiguration">&lt;<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">a></p>
+<p><a name="Failover-ServerConfiguration"></a></p>
 
 <h2>Server Configuration</h2>
 
 <p>In the server this list can be specified via the
-<code>conf&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;multipoint.properties</code> file like so:</p>
+<code>conf/multipoint.properties</code> file like so:</p>
 
 <pre><code>server      = org.apache.openejb.server.discovery.MultipointDiscoveryAgent
 bind        = 127.0.0.1
@@ -364,19 +364,19 @@ servers on the network.  Only one of the
 running when this server starts up -- it is not required to list all
 servers in the network.</p>
 
-<p><a name="Failover-ClientConfiguration">&lt;<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">a></p>
+<p><a name="Failover-ClientConfiguration"></a></p>
 
 <h2>Client Configuration</h2>
 
 <p>Configuration in the client is similar, but note that EJB clients do not
 participate directly in multipoint communication and do <em>not</em> connect to
 the multipoint port.  The server list is simply a list of the regular
-"ejbd:<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"><IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">" urls that a client normally uses to connect to a server.</p>
+"ejbd://" urls that a client normally uses to connect to a server.</p>
 
 <pre><code>Properties p = new Properties();
-p.put(Conte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.RemoteInitialConte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;tFactory");
-p.put(Conte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t.PROVIDER_URL, "failover:ejbd:&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;192.168.1.20:4201,ejbd:&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;192.168.1.30:4201");
-InitialConte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t remoteConte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t = new InitialConte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t(p);
+p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.RemoteInitialContextFactory");
+p.put(Context.PROVIDER_URL, "failover:ejbd://192.168.1.20:4201,ejbd://192.168.1.30:4201");
+InitialContext remoteContext = new InitialContext(p);
 </code></pre>
 
 <h2>Considerations</h2>
@@ -385,7 +385,7 @@ InitialConte&lt;IMG class="emoticon" src
 
 <p>The general disadvantage of this topology is the number of connections
 required.  The number of connections for the network of servers is equal to
-"(n * n - n) <IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"> 2 ", where n is the number of servers.  For e<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">ample, with 5
+"(n * n - n) / 2 ", where n is the number of servers.  For example, with 5
 servers you need 10 connections, with 10 servers you need 45 connections,
 and with 50 servers you need 1225 connections.  This is of course the
 number of connections across the entire network, each individual server
@@ -393,7 +393,7 @@ only needs "n - 1" connections.</p>
 
 <p>The handling of these sockets is all asynchronous Java NIO code which
 allows the server to handle many connections (all of them) with one thread.
- From a pure threading perspective, the option is e<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">tremely efficient with
+ From a pure threading perspective, the option is extremely efficient with
 just one thread to listen and broadcast to many peers.  </p>
 
 <h3>Double connect</h3>
@@ -401,7 +401,7 @@ just one thread to listen and broadcast 
 <p>It is possible in this process that two servers learn of each other at the
 same time and each attempts to connect to the other simultaneously,
 resulting in two connections between the same two servers.  When this
-happens both servers will detect the e<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">tra connection and one of the
+happens both servers will detect the extra connection and one of the
 connections will be dropped and one will be kept.  In practice this race
 condition rarely happens and can be avoided almost entirely by fanning out
 server startup by as little as 100 milliseconds.</p>
@@ -414,9 +414,9 @@ establish direct connections with each o
 of failure.</p>
 
 <p>However to ensure that the bootstrapping process can occur successfully,
-the {{initialServers}} property of the {{conf<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">multipoint.properties}} file
+the {{initialServers}} property of the {{conf/multipoint.properties}} file
 must be set carefully and with a specific server start order in mind.  Each
-server consults its {{initialServers}} list e<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">actly once in the
+server consults its {{initialServers}} list exactly once in the
 bootstrapping phase at startup, after that time connections are made
 dynamically.</p>
 
@@ -426,7 +426,7 @@ become introduced and connected to all t
 
 <h2>Failed scenario (background)</h2>
 
-<p>As an e<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">ample of a failed scenario, imagine there are three servers;
+<p>As an example of a failed scenario, imagine there are three servers;
 server1, server2, server3.  They are setup only to point to the server in
 front of them making a chain:</p>
 
@@ -437,7 +437,7 @@ front of them making a chain:</p>
 </ul>
 
 <p>Which is essentially server1 -> server2 -> server3.  This scenario could
-work, but they servers would have to be started in e<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">actly the opposite
+work, but they servers would have to be started in exactly the opposite
 order:</p>
 
 <p># server3 starts
@@ -471,7 +471,7 @@ could bring a fourth server online tempo
 servers.  Once it makes the introductions and all servers learn of each
 other, you could shut it down again.</p>
 
-<p>The above setup is easily fi<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">able via better configuration.  If server3
+<p>The above setup is easily fixable via better configuration.  If server3
 listed both server1 and server2 in its initialServers list, rather than
 listing nothing at all, then all servers would fully discover each other
 regardless of startup order; assuming all three servers did eventually
@@ -483,11 +483,11 @@ start.</p>
 list all three servers.  </p>
 
 <ul>
-<li>server1<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">conf<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">multipoint.properties
+<li>server1/conf/multipoint.properties
 **    initialServers = server1, server2, server3</li>
-<li>server2<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">conf<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">multipoint.properties
+<li>server2/conf/multipoint.properties
 ** initialServers = server1, server2, server3</li>
-<li>server3<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">conf<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">multipoint.properties
+<li>server3/conf/multipoint.properties
 ** initialServers = server1, server2, server3</li>
 </ul>
 
@@ -502,9 +502,9 @@ focus on always keeping at least one of 
 as "root" servers for simplicity sake.</p>
 
 <ul>
-<li>server1<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">conf<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">multipoint.properties
+<li>server1/conf/multipoint.properties
 **    initialServers = server2</li>
-<li>server2<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">conf<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">multipoint.properties
+<li>server2/conf/multipoint.properties
 **    initialServers = server1</li>
 </ul>
 
@@ -517,11 +517,11 @@ server2, and vice versa.</p>
 their initialServers list.</p>
 
 <ul>
-<li>server3<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">conf<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">multipoint.properties
+<li>server3/conf/multipoint.properties
 **    initialServers = server1, server2</li>
-<li>server4<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">conf<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">multipoint.properties
+<li>server4/conf/multipoint.properties
 **    initialServers = server1, server2</li>
-<li>serverN<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">conf<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">multipoint.properties
+<li>serverN/conf/multipoint.properties
 **    initialServers = server1, server2</li>
 </ul>
 
@@ -539,18 +539,18 @@ convenience.</p>
 
 <h2>Command line overrides</h2>
 
-<p>Always remember that any property in a conf<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"><server-service>.properties
+<p>Always remember that any property in a conf/<server-service>.properties
 file can be overridden on the command line or via system properties.  So it
 is possible easily set the initialServers list in startup scripts.</p>
 
-<p>A bash e<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">ample might look something like:</p>
+<p>A bash example might look something like:</p>
 
-<pre><code>!&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;bin&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;bash
+<pre><code>!/bin/bash
 
-OPENEJB_HOME=&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;opt&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;openejb-3.1.3
-INITIAL_LIST=$(cat &lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;some&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;shared&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;directory&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;our_initial_servers.t&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t)
+OPENEJB_HOME=/opt/openejb-3.1.3
+INITIAL_LIST=$(cat /some/shared/directory/our_initial_servers.txt)
 
-$OPENEJB_HOME&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;bin&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;openejb start -Dmultipoint.initialServers=$INITIAL_LIST
+$OPENEJB_HOME/bin/openejb start -Dmultipoint.initialServers=$INITIAL_LIST
 </code></pre>
 
             </DIV>

Modified: websites/staging/openejb/trunk/content/faq.html
==============================================================================
--- websites/staging/openejb/trunk/content/faq.html (original)
+++ websites/staging/openejb/trunk/content/faq.html Tue Jul 12 18:06:32 2011
@@ -152,20 +152,20 @@
           <P>
             <!-- $BODY -->
             <DIV id="PageContent">
-          <p><a name="FAQ-&nbsp;General">&lt;<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">a></p>
+          <p><a name="FAQ-&nbsp;General"></a></p>
 
 <h2>&nbsp;General</h2>
 
 <p>&nbsp;</p>
 
-<p><a name="FAQ-WhatspecversiondoesOpenEJBsupport?">&lt;<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">a></p>
+<p><a name="FAQ-WhatspecversiondoesOpenEJBsupport?"></a></p>
 
 <h3>What spec version does OpenEJB support?</h3>
 
 <p>OpenEJB supports the Enterprise JavaBeans 3.0 specification and previous
 versions 2.1, 2.0 and 1.1.</p>
 
-<p><a name="FAQ-Idon'tplantouseEJBs,sowhywouldIembedOpenEJBintoTomcat.">&lt;<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">a></p>
+<p><a name="FAQ-Idon'tplantouseEJBs,sowhywouldIembedOpenEJBintoTomcat."></a></p>
 
 <h3>I don't plan to use EJBs, so why would I embed OpenEJB into Tomcat.</h3>
 
@@ -178,23 +178,23 @@ as Dates, Classes, URI, URL, List, Map, 
 case of Tomcat 5.5 which doesn't support dependency injection at all, even
 more is gained.</p>
 
-<p><a name="FAQ-CanIrunOpenEJBwithaJVMforanyvendor?">&lt;<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">a></p>
+<p><a name="FAQ-CanIrunOpenEJBwithaJVMforanyvendor?"></a></p>
 
 <h3>Can I run OpenEJB with a JVM for any vendor?</h3>
 
 <p>The Sun, Mac, and IBM vms are regularly tested, however any vm should work.</p>
 
-<p><a name="FAQ-WhichversionofJavaisrequiredtorunOpenEJB?">&lt;<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">a></p>
+<p><a name="FAQ-WhichversionofJavaisrequiredtorunOpenEJB?"></a></p>
 
 <h3>Which version of Java is required to run OpenEJB?</h3>
 
 <p>Java versions 5 or 6, aka Java 1.5 or 1.6.</p>
 
-<p><a name="FAQ-DoIneedApacheMaventoworkwithOpenEJB?">&lt;<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">a></p>
+<p><a name="FAQ-DoIneedApacheMaventoworkwithOpenEJB?"></a></p>
 
 <h3>Do I need Apache Maven to work with OpenEJB?</h3>
 
-<p>Definitely not. Most of the e<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">amples include both Maven and Ant build
+<p>Definitely not. Most of the examples include both Maven and Ant build
 files.  OpenEJB is usable as a plain library, much like an embedded
 database like Derby, so it is usable in any application regardless if that
 application is run via Maven, Ant, Intellij, Eclipse, NetBeans, JUnit,
@@ -205,57 +205,57 @@ TestNG, etc.</p>
 <p>supported by OpenEJB?</p>
 
 <p>The short answer is yes.  The basic approach for all embedding scenarios is
-to 1) add OpenEJB to your classpath, and 2) construct your InitialConte<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">t
-using org.apache.openejb.client.LocalInitialConte<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">tFactory.  The
-LocalInitialConte<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">tFactory will boot OpenEJB in your vm and all ejb
+to 1) add OpenEJB to your classpath, and 2) construct your InitialContext
+using org.apache.openejb.client.LocalInitialContextFactory.  The
+LocalInitialContextFactory will boot OpenEJB in your vm and all ejb
 applications visible in the classpath will be deployed. See
-http:<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"><IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">openejb.apache.org<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">embedding-openejb.html for details on how to
-embed openejb in your application and IDE.  See [Application discovery via the classpath](openejb<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">30:application-discovery-via-the-classpath.html)
+http://openejb.apache.org/embedding-openejb.html for details on how to
+embed openejb in your application and IDE.  See <a href="openejbx30:application-discovery-via-the-classpath.html">Application discovery via the classpath</a>
  for various ways to have your applications discovered. </p>
 
-<h3>During embedded testing, how can I e<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">ternalize all my DataSource</h3>
+<h3>During embedded testing, how can I externalize all my DataSource</h3>
 
 <p>configuration? </p>
 
-<p>Create an openejb.<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">ml file in any directory that gets added to your test
+<p>Create an openejb.xml file in any directory that gets added to your test
 classpath. For maven, something that winds up directly under
-"target<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">classes<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">" or "target<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">test-classes<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">" will work just fine.  Then in
+"target/classes/" or "target/test-classes/" will work just fine.  Then in
 your test case do this:</p>
 
-<pre><code>   protected void setUp() throws E&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;ception {
+<pre><code>   protected void setUp() throws Exception {
        Properties properties = new Properties();
-       properties.setProperty(Conte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t.INITIAL_CONTEXT_FACTORY, 
+       properties.setProperty(Context.INITIAL_CONTEXT_FACTORY, 
 </code></pre>
 
-<p>"org.apache.openejb.client.LocalInitialConte<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">tFactory");</p>
+<p>"org.apache.openejb.client.LocalInitialContextFactory");</p>
 
 <pre><code>       URL config =
 </code></pre>
 
-<p>this.getClass().getClassLoader().getResource("openejb.<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">ml");
+<p>this.getClass().getClassLoader().getResource("openejb.xml");
            properties.setProperty("openejb.configuration",
-config.toE<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">ternalForm());</p>
+config.toExternalForm());</p>
 
-<pre><code>       initialConte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t = new InitialConte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t(properties);
+<pre><code>       initialContext = new InitialContext(properties);
    }
 </code></pre>
 
-<p>The file itself doesn't have to be called "openejb.<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">ml", you could have a
+<p>The file itself doesn't have to be called "openejb.xml", you could have a
 few different files like that for different testing scenarios each with a
 name that describes the basic setup.</p>
 
-<p><a name="FAQ-Container-ManagedPersistence">&lt;<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">a></p>
+<p><a name="FAQ-Container-ManagedPersistence"></a></p>
 
 <h2>Container-Managed Persistence</h2>
 
-<p><a name="FAQ-WhatenginedoesOpenEJBuseforCMP?">&lt;<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">a></p>
+<p><a name="FAQ-WhatenginedoesOpenEJBuseforCMP?"></a></p>
 
 <h3>What engine does OpenEJB use for CMP?</h3>
 
 <p>The CMP engine is written as a layer over JPA with OpenJPA doing the
 persistence work.</p>
 
-<p><a name="FAQ-WhatistheformatfortheCMPmappingfiles?">&lt;<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">a></p>
+<p><a name="FAQ-WhatistheformatfortheCMPmappingfiles?"></a></p>
 
 <h3>What is the format for the CMP mapping files?</h3>
 

Modified: websites/staging/openejb/trunk/content/functional-testing-with-openejb,-jetty-and-selenium.html
==============================================================================
--- websites/staging/openejb/trunk/content/functional-testing-with-openejb,-jetty-and-selenium.html (original)
+++ websites/staging/openejb/trunk/content/functional-testing-with-openejb,-jetty-and-selenium.html Tue Jul 12 18:06:32 2011
@@ -155,16 +155,16 @@
           <p>Obviously, OpenEJB is great for unit testing EJBs, but I wondered whether I
 might also be able to use this embedded functionality to functionally test
 my application. You can use tools like Selenium, or HtmlUnit to run
-functional tests as if the user were sat at their browser typing te<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">t, and
+functional tests as if the user were sat at their browser typing text, and
 clicking links and buttons. This however means you have to have your app
 running on your app server, and you need to have consistent test data -
 otherwise a test might pass on one developers machine, but fail on another.
 Here's one approach that you could take to completely deploy your webapp
 within a test, and functionally test it with a tool like Selenium. There's
-also some sample code demonstrating this, available [here](http:<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"><IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">people.apache.org<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">~jgallimore<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">PersonApp.zip)
+also some sample code demonstrating this, available <a href="http://people.apache.org/~jgallimore/PersonApp.zip">here</a>
 .</p>
 
-<p><a name="FunctionaltestingwithOpenEJB,JettyandSelenium-Creatinganembeddedserver">&lt;<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">a></p>
+<p><a name="FunctionaltestingwithOpenEJB,JettyandSelenium-Creatinganembeddedserver"></a></p>
 
 <h3>Creating an embedded server</h3>
 
@@ -177,62 +177,62 @@ configure them to see the EJB and WAR mo
 
     private EmbeddedServer() {
     try {
-        &lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt; initialize OpenEJB &amp; add some test data
+        // initialize OpenEJB &amp; add some test data
         Properties properties = new Properties();
-        properties.put(Conte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t.INITIAL_CONTEXT_FACTORY,
+        properties.put(Context.INITIAL_CONTEXT_FACTORY,
 </code></pre>
 
-<p>"org.apache.openejb.client.LocalInitialConte<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">tFactory");
-            InitialConte<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">t ic = new InitialConte<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">t(properties);
+<p>"org.apache.openejb.client.LocalInitialContextFactory");
+            InitialContext ic = new InitialContext(properties);
             PeopleFacade facade = (PeopleFacade)
 ic.lookup("PeopleFacadeEJBRemote");
-            new TestFi<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">ture(facade).addTestData();</p>
+            new TestFixture(facade).addTestData();</p>
 
-<pre><code>        &lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt; setup web app
-        WebAppConte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t conte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t = new WebAppConte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t();
-        conte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t.setWar(computeWarPath());
-        InitialConte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t initialConte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t = setupJndi(conte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t);
+<pre><code>        // setup web app
+        WebAppContext context = new WebAppContext();
+        context.setWar(computeWarPath());
+        InitialContext initialContext = setupJndi(context);
 
-        &lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt; start the server
-        conte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t.setServletHandler(new
+        // start the server
+        context.setServletHandler(new
 </code></pre>
 
-<p>EmbeddedServerServletHandler(initialConte<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">t));
-            conte<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">t.setConte<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">tPath("<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">");
+<p>EmbeddedServerServletHandler(initialContext));
+            context.setContextPath("/");
             server = new Server(9091);
-            server.addHandler(conte<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">t);</p>
+            server.addHandler(context);</p>
 
 <pre><code>        server.start();
-    } catch (E&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;ception e) {
+    } catch (Exception e) {
         e.printStackTrace();
     }
     }
 
-    private InitialConte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t setupJndi(WebAppConte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t conte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t) throws
+    private InitialContext setupJndi(WebAppContext context) throws
 </code></pre>
 
-<p>NamingE<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">ception {
-        <IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"><IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"> setup local JNDI
-        InitialConte<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">t initialConte<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">t = new InitialConte<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">t();
-        WebApp webApp = getWebApp(conte<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">t);
+<p>NamingException {
+        // setup local JNDI
+        InitialContext initialContext = new InitialContext();
+        WebApp webApp = getWebApp(context);
         Collection<EjbRef> refs = webApp.getEjbRef();
         for (EjbRef ref : refs) {
             String ejbLink = ref.getEjbLink();</p>
 
-<pre><code>        &lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt; get enterprise bean info
+<pre><code>        // get enterprise bean info
         EnterpriseBeanInfo beanInfo = new
 </code></pre>
 
 <p>EJBHelper().getEJBInfo(ejbLink);
             if (beanInfo.jndiNames != null &amp;&amp; beanInfo.jndiNames.size() >
 0) {
-            String jndiName = "java:openejb<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">ejb<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">" +
+            String jndiName = "java:openejb/ejb/" +
 beanInfo.jndiNames.get(0);
-            initialConte<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">t.bind("java:comp<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">env<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">" + ref.getEjbRefName(),
+            initialContext.bind("java:comp/env/" + ref.getEjbRefName(),
 new LinkRef(jndiName));
             }
         }
-        return initialConte<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">t;
+        return initialContext;
         }</p>
 
 <pre><code>    private String computeWarPath() {
@@ -242,11 +242,11 @@ new LinkRef(jndiName));
         String[]
 </code></pre>
 
-<p>pathParts = currentPath.split("(\\|<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">)+");</p>
+<p>pathParts = currentPath.split("(\\|/)+");</p>
 
-<pre><code>    int webPart = Arrays.asList(pathParts).inde&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;Of("PersonWEB");
+<pre><code>    int webPart = Arrays.asList(pathParts).indexOf("PersonWEB");
     if (webPart == -1) {
-        warPath = "PersonWEB&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;src&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;main&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;webapp";
+        warPath = "PersonWEB/src/main/webapp";
     } else {
         StringBuffer buffer = new StringBuffer();
 
@@ -258,7 +258,7 @@ new LinkRef(jndiName));
             buffer.append(File.separator);
             }</p>
 
-<pre><code>        buffer.append("PersonWEB&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;src&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;main&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;webapp");
+<pre><code>        buffer.append("PersonWEB/src/main/webapp");
         warPath = buffer.toString();
     }
     return warPath;
@@ -278,21 +278,21 @@ new LinkRef(jndiName));
 <p>args) {
         try {
             EmbeddedServer.getInstance().getServer().join();
-        } catch (E<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">ception e) {
+        } catch (Exception e) {
             e.printStackTrace();
         }
         }</p>
 
-<pre><code>    private WebApp getWebApp(WebAppConte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t conte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t) {
+<pre><code>    private WebApp getWebApp(WebAppContext context) {
     WebApp webApp = null;
 
     try {
         FileInputStream is = new FileInputStream(new
 </code></pre>
 
-<p>File(conte<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">t.getWar() + "<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">WEB-INF<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">web.<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">ml").getAbsolutePath());
-            webApp = (WebApp) Ja<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">bJavaee.unmarshal(WebApp.class, is);
-        } catch (E<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">ception e) {
+<p>File(context.getWar() + "/WEB-INF/web.xml").getAbsolutePath());
+            webApp = (WebApp) JaxbJavaee.unmarshal(WebApp.class, is);
+        } catch (Exception e) {
             e.printStackTrace();
         }
         return webApp;
@@ -301,13 +301,13 @@ new LinkRef(jndiName));
 
 <p>This class sets up an embedded instance of Jetty, running on port 9091.
 You'll notice the setupJndi() method. This looks through the ejb-ref
-entries in web.<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">ml (which we deserialize using the openejb-jee library),
+entries in web.xml (which we deserialize using the openejb-jee library),
 and adds relevant LinkRefs to the JNDI tree, so you can lookup beans using
-the java:comp<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">env<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">bean format. I've added a main() method here for
+the java:comp/env/bean format. I've added a main() method here for
 convenience, so you can run this straight from an IDE, and record tests
-using tools like the Selenium Firefo<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"> plugin.</p>
+using tools like the Selenium Firefox plugin.</p>
 
-<p><a name="FunctionaltestingwithOpenEJB,JettyandSelenium-Supporting@EJBDependencyinjection">&lt;<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">a></p>
+<p><a name="FunctionaltestingwithOpenEJB,JettyandSelenium-Supporting@EJBDependencyinjection"></a></p>
 
 <h3>Supporting @EJB Dependency injection</h3>
 
@@ -315,15 +315,15 @@ using tools like the Selenium Firefo<IMG
 this is to perform dependency injection. The custom ServletHandler looks
 like this:</p>
 
-<pre><code>public class EmbeddedServerServletHandler e&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;tends ServletHandler {
-    private InitialConte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t initialConte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t;
+<pre><code>public class EmbeddedServerServletHandler extends ServletHandler {
+    private InitialContext initialContext;
 
-    public EmbeddedServerServletHandler(InitialConte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t initialConte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t) {
-    this.initialConte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t = initialConte&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;t;
+    public EmbeddedServerServletHandler(InitialContext initialContext) {
+    this.initialContext = initialContext;
     }
 
-    public Servlet customizeServlet(Servlet servlet) throws E&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;ception {
-    Class&lt;? e&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;tends Servlet&gt; servletClass = servlet.getClass();
+    public Servlet customizeServlet(Servlet servlet) throws Exception {
+    Class&lt;? extends Servlet&gt; servletClass = servlet.getClass();
         Field[]
 </code></pre>
 
@@ -337,18 +337,18 @@ like this:</p>
 
 <pre><code>        for (Annotation annotation : annotations) {
         if (EJB.class.equals(annotation.annotationType())) {
-            &lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt; inject into this field
+            // inject into this field
             Class&lt;?&gt; fieldType = declaredField.getType();
             EnterpriseBeanInfo beanInfo = getBeanFor(fieldType);
             if (beanInfo == null) {
             continue;
             }
 
-            String jndiName = "java:openejb&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;ejb&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;" +
+            String jndiName = "java:openejb/ejb/" +
 </code></pre>
 
 <p>beanInfo.jndiNames.get(0);
-                Object o = initialConte<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">t.lookup(jndiName);</p>
+                Object o = initialContext.lookup(jndiName);</p>
 
 <pre><code>            declaredField.setAccessible(true);
             declaredField.set(servlet, o);
@@ -368,27 +368,27 @@ like this:</p>
 <p>This looks up deployed beans that match the field type, and uses reflection
 to set the field.</p>
 
-<p><a name="FunctionaltestingwithOpenEJB,JettyandSelenium-WritingaFunctionaltest">&lt;<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">a></p>
+<p><a name="FunctionaltestingwithOpenEJB,JettyandSelenium-WritingaFunctionaltest"></a></p>
 
 <h3>Writing a Functional test</h3>
 
 <p>We can now write a functional test. I use a base abstract class to make
 sure the Embedded server is running, and start Selenium:</p>
 
-<pre><code>public abstract class FunctionalTestCase e&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;tends TestCase {
+<pre><code>public abstract class FunctionalTestCase extends TestCase {
     protected DefaultSelenium selenium;
 
-    protected void setUp() throws E&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;ception {
+    protected void setUp() throws Exception {
     super.setUp();
     EmbeddedServer.getInstance();
-    selenium = new DefaultSelenium("localhost", 4444, "*ie&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;plore",
+    selenium = new DefaultSelenium("localhost", 4444, "*iexplore",
 </code></pre>
 
-<p>"http:<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"><IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">localhost:9091<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">");
+<p>"http://localhost:9091/");
         selenium.start();
         }</p>
 
-<pre><code>    protected void tearDown() throws E&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;ception {
+<pre><code>    protected void tearDown() throws Exception {
     selenium.stop();
     }
 }
@@ -396,12 +396,12 @@ sure the Embedded server is running, and
 
 <p>and I can then I write a test like this:</p>
 
-<pre><code>public class AddPersonTest e&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;tends FunctionalTestCase {
-    public void testShouldAddAPerson() throws E&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;ception {
-    selenium.open("&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;People");
+<pre><code>public class AddPersonTest extends FunctionalTestCase {
+    public void testShouldAddAPerson() throws Exception {
+    selenium.open("/People");
     selenium.type("firstname", "Jonathan");
     selenium.type("lastname", "Gallimore");
-        selenium.click("&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;input[@name='add' and @value='Add']
+        selenium.click("//input[@name='add' and @value='Add']
 </code></pre>
 
 <p>");
@@ -409,20 +409,20 @@ sure the Embedded server is running, and
         selenium.type("filter", "gallimore");
         selenium.click("submit");
         selenium.waitForPageToLoad("30000");
-            assertEquals(1, selenium.getXpathCount("<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"><IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">div[@id='people']
-<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">ul<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">li").intValue());
-            assertEquals("Jonathan Gallimore", selenium.getTe<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">t("<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"><IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">div[@id='people']
-<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">ul<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">li[1]"));</p>
+            assertEquals(1, selenium.getXpathCount("//div[@id='people']
+/ul/li").intValue());
+            assertEquals("Jonathan Gallimore", selenium.getText("//div[@id='people']
+/ul/li[1]"));</p>
 
 <pre><code>    }
 } 
 </code></pre>
 
-<p><a name="FunctionaltestingwithOpenEJB,JettyandSelenium-Samplecode">&lt;<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">a></p>
+<p><a name="FunctionaltestingwithOpenEJB,JettyandSelenium-Samplecode"></a></p>
 
 <h3>Sample code</h3>
 
-<p>I've made a sample project which demonstrates this, source is available [here](http:<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"><IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">people.apache.org<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">~jgallimore<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">PersonApp.zip)
+<p>I've made a sample project which demonstrates this, source is available <a href="http://people.apache.org/~jgallimore/PersonApp.zip">here</a>
 . You'll need Maven to build it, and you can build it and run the tests by
 running 'mvn clean install'. If want to run the tests from your IDE, you'll
 need to have a Selenium server running, which you can do by running 'mvn

Modified: websites/staging/openejb/trunk/content/generating-ejb-3-annotations.html
==============================================================================
--- websites/staging/openejb/trunk/content/generating-ejb-3-annotations.html (original)
+++ websites/staging/openejb/trunk/content/generating-ejb-3-annotations.html Tue Jul 12 18:06:32 2011
@@ -152,12 +152,12 @@
           <P>
             <!-- $BODY -->
             <DIV id="PageContent">
-          <p><a name="GeneratingEJB3annotations-GeneratingEJB3annotations">&lt;<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">a></p>
+          <p><a name="GeneratingEJB3annotations-GeneratingEJB3annotations"></a></p>
 
 <h1>Generating EJB 3 annotations</h1>
 
 <p>The OpenEJB Eclipse plugin is able to provide some assistance in helping
-you migrate EJB 2.<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0"> projects to EJB 3.0, by analyzing your ejb-jar.<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">ml
+you migrate EJB 2.x projects to EJB 3.0, by analyzing your ejb-jar.xml
 file, and adding EJB annotations to your source code. This page will show
 you how to use this functionality.</p>
 
@@ -169,44 +169,44 @@ afterwards)</p>
 <pre><code>  &lt;dependencies&gt;
     ...
     &lt;dependency&gt;
-      &lt;groupId&gt;org.apache.openejb&lt;&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;groupId&gt;
-      &lt;artifactId&gt;javaee-api&lt;&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;artifactId&gt;
-      &lt;version&gt;5.0-1&lt;&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;version&gt;
-      &lt;scope&gt;provided&lt;&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;scope&gt;
-    &lt;&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;dependency&gt;
-  &lt;&lt;IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"&gt;dependencies&gt;
+      &lt;groupId&gt;org.apache.openejb&lt;/groupId&gt;
+      &lt;artifactId&gt;javaee-api&lt;/artifactId&gt;
+      &lt;version&gt;5.0-1&lt;/version&gt;
+      &lt;scope&gt;provided&lt;/scope&gt;
+    &lt;/dependency&gt;
+  &lt;/dependencies&gt;
 </code></pre>
 
 <p>Alternatively, import the API jars into your project, and add them to your
 build path.</p>
 
-<p>Ne<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">t, click the 'OpenEJB' menu on the menubar, and select 'Generate
+<p>Next, click the 'OpenEJB' menu on the menubar, and select 'Generate
 Annotations'.</p>
 
-<p>!http:<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"><IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">www.jrg.me.uk<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">openejb<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">annotations_step_1.jpg!</p>
+<p>!http://www.jrg.me.uk/openejb/annotations_step_1.jpg!</p>
 
 <p>Select the project you would like to work with, if it isn't already
-selected. Click 'Ne<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">t'.</p>
+selected. Click 'Next'.</p>
 
-<p>!http:<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"><IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">www.jrg.me.uk<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">openejb<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">annotations_step_2.jpg!</p>
+<p>!http://www.jrg.me.uk/openejb/annotations_step_2.jpg!</p>
 
-<p>Select your ejb-jar.<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">ml and (optionally) your openejb-jar.<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">ml files. Select
-or deselect the other options as appropriate, and select 'Ne<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">t'.</p>
+<p>Select your ejb-jar.xml and (optionally) your openejb-jar.xml files. Select
+or deselect the other options as appropriate, and select 'Next'.</p>
 
 <p>Options:</p>
 
 <pre><code>* Alter SessionBean interfaces - This option makes your session beans
 </code></pre>
 
-<p>implement your remote <IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"> local interfaces as opposed to
-java<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">.ejb.SessionBean, and stops your remote <IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"> local interfaces e<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">tending
-java<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/error.gif" height="16" width="16" align="absmiddle" alt="" border="0">.ejb.EJBObject.
+<p>implement your remote / local interfaces as opposed to
+javax.ejb.SessionBean, and stops your remote / local interfaces extending
+javax.ejb.EJBObject.
     * Add @Remote and @RemoteHome annotations - This adds @Remote and
 @RemoteHome annotations appropriately
     * Convert entity beans to POJOs - This options converts abstract CMP
 classes to POJOs generating simple getters and setters.</p>
 
-<p>!http:<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"><IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">www.jrg.me.uk<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">openejb<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">annotations_step_3.jpg!</p>
+<p>!http://www.jrg.me.uk/openejb/annotations_step_3.jpg!</p>
 
 <p>Review the changes that the plugin will make to your source code. Uncheck
 any changes you don't want to apply, and click 'Finish'.</p>

Modified: websites/staging/openejb/trunk/content/geronimo.html
==============================================================================
--- websites/staging/openejb/trunk/content/geronimo.html (original)
+++ websites/staging/openejb/trunk/content/geronimo.html Tue Jul 12 18:06:32 2011
@@ -152,13 +152,13 @@
           <P>
             <!-- $BODY -->
             <DIV id="PageContent">
-          <p>OpenEJB is the EJB Container implementation for [Apache Geronimo](http:<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"><IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">geronimo.apache.org)
+          <p>OpenEJB is the EJB Container implementation for <a href="http://geronimo.apache.org">Apache Geronimo</a>
 .  That integration is quite a bit different than what OpenEJB users are
 familiar with.  The best source of documentation on Geronimo and it's usage
 of OpenEJB is here:  </p>
 
 <ul>
-<li>[http:<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"><IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">geronimo.apache.org<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">documentation.html](http:<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0"><IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle" alt="" border="0">geronimo.apache.org<IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/check.gif" height="16" width="16" align="absmiddle
 " alt="" border="0">documentation.html)</li>
+<li><a href="http://geronimo.apache.org/documentation.html">http://geronimo.apache.org/documentation.html</a></li>
 </ul>
 
             </DIV>