Author: buildbot
Date: Mon Dec 31 15:37:21 2012
New Revision: 844417
Log:
Staging update by buildbot for ode
Modified:
websites/staging/ode/trunk/content/ (props changed)
websites/staging/ode/trunk/content/bpel-management-api-specification.html
websites/staging/ode/trunk/content/instance-replayer.html
websites/staging/ode/trunk/content/ode-execution-events.html
websites/staging/ode/trunk/content/process-versioning.html
Propchange: websites/staging/ode/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Mon Dec 31 15:37:21 2012
@@ -1 +1 @@
-1427148
+1427153
Modified:
websites/staging/ode/trunk/content/bpel-management-api-specification.html
==============================================================================
--- websites/staging/ode/trunk/content/bpel-management-api-specification.html
(original)
+++ websites/staging/ode/trunk/content/bpel-management-api-specification.html
Mon Dec 31 15:37:21 2012
@@ -85,7 +85,7 @@
<div class="span12">
<p><a
name="BPELManagementAPISpecification-BPELManagementAPISpecification"></a></p>
<h1 id="bpel-management-api-specification">BPEL Management API
Specification</h1>
-<p>The BPEL Management API {excerpt} exposes management functions related to
BPEL processes and their instances{excerpt}.</p>
+<p>The BPEL Management API exposes management functions related to BPEL
processes and their instances.</p>
<p><a name="BPELManagementAPISpecification-GeneralDesignPrinciples"></a></p>
<h2 id="general-design-principles">General Design Principles</h2>
<p>The Process Management API is defined as a Web service interface. In doing
so we can offer SOAP access to the service, and also create Java interfaces for
SOAP access and JMX, depending on needs. All messages are defined as XML
elements, mapping to WSDL doc/literal.</p>
Modified: websites/staging/ode/trunk/content/instance-replayer.html
==============================================================================
--- websites/staging/ode/trunk/content/instance-replayer.html (original)
+++ websites/staging/ode/trunk/content/instance-replayer.html Mon Dec 31
15:37:21 2012
@@ -100,73 +100,73 @@
</ol>
<p>Replayer extends management api by 2 operations: replay and
getCommunication (see pmapi.wsdl from ODE distribution).</p>
<p>In order to do 1, you invoke:</p>
-<div class="codehilite"><pre> <span class="nt"><pmap:replay</span>
<span class="na">xmlns:ns=</span><span
class="s">"http://www.apache.org/ode/pmapi/types/2006/08/02/"</span><span
class="nt">></span>
- <span class="nt"><replay></span>
- <span class="nt"><ns:upgradeInstance></span>1234<span
class="nt"></ns:upgradeInstance></span>
- <span class="nt"></replay></span>
- <span class="nt"></pmap:replay></span>
+<div class="codehilite"><pre><span class="nt"><pmap:replay</span> <span
class="na">xmlns:ns=</span><span
class="s">"http://www.apache.org/ode/pmapi/types/2006/08/02/"</span><span
class="nt">></span>
+ <span class="nt"><replay></span>
+ <span class="nt"><ns:upgradeInstance></span>1234<span
class="nt"></ns:upgradeInstance></span>
+ <span class="nt"></replay></span>
+<span class="nt"></pmap:replay></span>
</pre></div>
<p>To do 2, you need to retrieve exchanges from instance (or instances) by:</p>
-<div class="codehilite"><pre> <span
class="nt"><pmap:getCommunication</span> <span
class="na">xmlns:ns=</span><span
class="s">"http://www.apache.org/ode/pmapi/types/2006/08/02/"</span><span
class="nt">></span>
- <span class="nt"><getCommunication></span>
- <span class="nt"><ns:iid></span>1234<span
class="nt"></ns:iid></span>
- <span class="nt"></getCommunication></span>
- <span class="nt"></pmap:getCommunication></span>
-
- <span class="nt"><ns:restoreInstance></span>
- <span class="nt"><ns:processType</span> <span
class="na">xmlns:p=</span><span
class="s">"http://sample.bpel.org/bpel/sample"</span><span
class="nt">></span>p:OnEventCorrelation<span
class="nt"></ns:processType></span>
- <span class="nt"><exchange</span> <span
class="na">xmlns=</span><span
class="s">"http://www.apache.org/ode/pmapi/types/2006/08/02/"</span><span
class="nt">></span>
- <span class="nt"><type></span>M<span
class="nt"></type></span>
- <span
class="nt"><createTime></span>2009-04-01T16:41:29.873+02:00<span
class="nt"></createTime></span>
- <span class="nt"><service</span> <span
class="na">xmlns:sam=</span><span
class="s">"http://sample.bpel.org/bpel/sample"</span><span
class="nt">></span>sam:OnEventCorrelationInit<span
class="nt"></service></span>
- <span class="nt"><operation></span>initiate<span
class="nt"></operation></span>
- <span class="nt"><in></span>
- <span class="nt"><initiate</span> <span
class="na">xmlns:sam=</span><span
class="s">"http://sample.bpel.org/bpel/sample"</span> <span
class="na">xmlns:soapenv=</span><span
class="s">"http://schemas.xmlsoap.org/soap/envelope/"</span> <span
class="na">xmlns=</span><span class="s">""</span><span
class="nt">></span>
- <span class="nt"><payload></span>abc7<span
class="nt"></payload></span>
- <span class="nt"><payload2></span>abc8<span
class="nt"></payload2></span>
- <span class="nt"></initiate></span>
- <span class="nt"></in></span>
- <span class="nt"><out></span>
- <span class="nt"><message</span> <span
class="na">xmlns=</span><span class="s">""</span><span
class="nt">></span>
- <span class="nt"><payload></span>test1<span
class="nt"></payload></span>
- <span class="nt"><payload2/></span>
- <span class="nt"></message></span>
- <span class="nt"></out></span>
- <span class="nt"></exchange></span>
-
- <span class="nt"><exchange</span> <span
class="na">xmlns:ns=</span><span
class="s">"http://www.apache.org/ode/pmapi/types/2006/08/02/"</span>
<span class="na">xmlns=</span><span
class="s">"http://www.apache.org/ode/pmapi/types/2006/08/02/"</span><span
class="nt">></span>
- <span class="nt"><type></span>P<span
class="nt"></type></span>
- <span
class="nt"><createTime></span>2009-04-01T16:41:32.998+02:00<span
class="nt"></createTime></span>
- <span class="nt"><service</span> <span
class="na">xmlns:sam=</span><span
class="s">"http://sample.bpel.org/bpel/sample"</span><span
class="nt">></span>sam:OnEventCorrelation<span
class="nt"></service></span>
- <span class="nt"><operation></span>initiate<span
class="nt"></operation></span>
- <span class="nt"><in></span>
- <span class="nt"><initiate</span> <span
class="na">xmlns:sam=</span><span
class="s">"http://sample.bpel.org/bpel/sample"</span> <span
class="na">xmlns:soapenv=</span><span
class="s">"http://schemas.xmlsoap.org/soap/envelope/"</span> <span
class="na">xmlns=</span><span class="s">""</span><span
class="nt">></span>
- <span class="nt"><payload></span>abc7<span
class="nt"></payload></span>
- <span class="nt"><payload2></span>abc8<span
class="nt"></payload2></span>
- <span class="nt"></initiate></span>
- <span class="nt"></in></span>
- <span class="nt"><out></span>
- <span class="nt"><message</span> <span
class="na">xmlns=</span><span class="s">""</span><span
class="nt">></span>
- <span class="nt"><payload></span>test5<span
class="nt"></payload></span>
- <span class="nt"><payload2/></span>
- <span class="nt"></message></span>
- <span class="nt"></out></span>
- <span class="nt"></exchange></span>
- <span class="nt"></ns:restoreInstance></span>
+<div class="codehilite"><pre><span class="nt"><pmap:getCommunication</span>
<span class="na">xmlns:ns=</span><span
class="s">"http://www.apache.org/ode/pmapi/types/2006/08/02/"</span><span
class="nt">></span>
+ <span class="nt"><getCommunication></span>
+ <span class="nt"><ns:iid></span>1234<span
class="nt"></ns:iid></span>
+ <span class="nt"></getCommunication></span>
+<span class="nt"></pmap:getCommunication></span>
+
+<span class="nt"><ns:restoreInstance></span>
+ <span class="nt"><ns:processType</span> <span
class="na">xmlns:p=</span><span
class="s">"http://sample.bpel.org/bpel/sample"</span><span
class="nt">></span>p:OnEventCorrelation<span
class="nt"></ns:processType></span>
+ <span class="nt"><exchange</span> <span class="na">xmlns=</span><span
class="s">"http://www.apache.org/ode/pmapi/types/2006/08/02/"</span><span
class="nt">></span>
+ <span class="nt"><type></span>M<span
class="nt"></type></span>
+ <span
class="nt"><createTime></span>2009-04-01T16:41:29.873+02:00<span
class="nt"></createTime></span>
+ <span class="nt"><service</span> <span
class="na">xmlns:sam=</span><span
class="s">"http://sample.bpel.org/bpel/sample"</span><span
class="nt">></span>sam:OnEventCorrelationInit<span
class="nt"></service></span>
+ <span class="nt"><operation></span>initiate<span
class="nt"></operation></span>
+ <span class="nt"><in></span>
+ <span class="nt"><initiate</span> <span
class="na">xmlns:sam=</span><span
class="s">"http://sample.bpel.org/bpel/sample"</span> <span
class="na">xmlns:soapenv=</span><span
class="s">"http://schemas.xmlsoap.org/soap/envelope/"</span> <span
class="na">xmlns=</span><span class="s">""</span><span
class="nt">></span>
+ <span class="nt"><payload></span>abc7<span
class="nt"></payload></span>
+ <span class="nt"><payload2></span>abc8<span
class="nt"></payload2></span>
+ <span class="nt"></initiate></span>
+ <span class="nt"></in></span>
+ <span class="nt"><out></span>
+ <span class="nt"><message</span> <span
class="na">xmlns=</span><span class="s">""</span><span
class="nt">></span>
+ <span class="nt"><payload></span>test1<span
class="nt"></payload></span>
+ <span class="nt"><payload2/></span>
+ <span class="nt"></message></span>
+ <span class="nt"></out></span>
+ <span class="nt"></exchange></span>
+
+ <span class="nt"><exchange</span> <span
class="na">xmlns:ns=</span><span
class="s">"http://www.apache.org/ode/pmapi/types/2006/08/02/"</span>
<span class="na">xmlns=</span><span
class="s">"http://www.apache.org/ode/pmapi/types/2006/08/02/"</span><span
class="nt">></span>
+ <span class="nt"><type></span>P<span
class="nt"></type></span>
+ <span
class="nt"><createTime></span>2009-04-01T16:41:32.998+02:00<span
class="nt"></createTime></span>
+ <span class="nt"><service</span> <span
class="na">xmlns:sam=</span><span
class="s">"http://sample.bpel.org/bpel/sample"</span><span
class="nt">></span>sam:OnEventCorrelation<span
class="nt"></service></span>
+ <span class="nt"><operation></span>initiate<span
class="nt"></operation></span>
+ <span class="nt"><in></span>
+ <span class="nt"><initiate</span> <span
class="na">xmlns:sam=</span><span
class="s">"http://sample.bpel.org/bpel/sample"</span> <span
class="na">xmlns:soapenv=</span><span
class="s">"http://schemas.xmlsoap.org/soap/envelope/"</span> <span
class="na">xmlns=</span><span class="s">""</span><span
class="nt">></span>
+ <span class="nt"><payload></span>abc7<span
class="nt"></payload></span>
+ <span class="nt"><payload2></span>abc8<span
class="nt"></payload2></span>
+ <span class="nt"></initiate></span>
+ <span class="nt"></in></span>
+ <span class="nt"><out></span>
+ <span class="nt"><message</span> <span
class="na">xmlns=</span><span class="s">""</span><span
class="nt">></span>
+ <span class="nt"><payload></span>test5<span
class="nt"></payload></span>
+ <span class="nt"><payload2/></span>
+ <span class="nt"></message></span>
+ <span class="nt"></out></span>
+ <span class="nt"></exchange></span>
+<span class="nt"></ns:restoreInstance></span>
</pre></div>
<p>Then, you execute replay on the other ODE installation to replicate
instance:</p>
-<div class="codehilite"><pre> <span class="nt"><pmap:replay</span>
<span class="na">xmlns:ns=</span><span
class="s">"http://www.apache.org/ode/pmapi/types/2006/08/02/"</span><span
class="nt">></span>
- <span class="nt"><replay></span>
- <span class="nt"><ns:restoreInstance></span>
- <span class="nt"><ns:processType</span> <span
class="na">xmlns:p=</span><span
class="s">"http://sample.bpel.org/bpel/sample"</span><span
class="nt">></span>p:OnEventCorrelation<span
class="nt"></ns:processType></span>
- ... exchanges
- <span class="nt"></ns:restoreInstance></span>
- <span class="nt"></replay></span>
- <span class="nt"></pmap:replay></span>
+<div class="codehilite"><pre><span class="nt"><pmap:replay</span> <span
class="na">xmlns:ns=</span><span
class="s">"http://www.apache.org/ode/pmapi/types/2006/08/02/"</span><span
class="nt">></span>
+ <span class="nt"><replay></span>
+ <span class="nt"><ns:restoreInstance></span>
+ <span class="nt"><ns:processType</span> <span
class="na">xmlns:p=</span><span
class="s">"http://sample.bpel.org/bpel/sample"</span><span
class="nt">></span>p:OnEventCorrelation<span
class="nt"></ns:processType></span>
+ ... exchanges
+ <span class="nt"></ns:restoreInstance></span>
+ <span class="nt"></replay></span>
+<span class="nt"></pmap:replay></span>
</pre></div>
@@ -182,10 +182,10 @@ You can migrate a few instances at once
<li>Replayer extends BpelRuntimeContextImpl by ReplayerBpelRuntimeContextImpl
class, which overrides methods like invoke and registerTimer to mock up
communication.</li>
<li>It implements ReplayerScheduler, which executes actions from past in time
sorted order (exchanges given to replayer have createTime field, which is used
for sorting)</li>
<li>jobs from past are processed in ReplayerScheduler and jobs in future are
registered in engine's scheduler</li>
-<li>In order to make integrity constraints, replaying returns error if:
-<strong> a first incoming request is routed to an existing instance instead of
creating a new one
-</strong> next incoming request is routed to other instance or creates a new
instance
-** there is some unprocessed communication while finishing replaying (for
example if there is some outgoing exchange for service, which did not have
INVOKE from replayed instance)</li>
+<li>In order to make integrity constraints, replaying returns error if:</li>
+<li>a first incoming request is routed to an existing instance instead of
creating a new one</li>
+<li>next incoming request is routed to other instance or creates a new
instance</li>
+<li>there is some unprocessed communication while finishing replaying (for
example if there is some outgoing exchange for service, which did not have
INVOKE from replayed instance)</li>
<li>It extends bpel-compiler and xpath evaluation by $ode:currentEventDateTime
variable</li>
<li>It adds currentEventDateTime property to BpelRuntimeContext</li>
<li>It adds replayer package to bpel engine in bpel-runtime module</li>
Modified: websites/staging/ode/trunk/content/ode-execution-events.html
==============================================================================
--- websites/staging/ode/trunk/content/ode-execution-events.html (original)
+++ websites/staging/ode/trunk/content/ode-execution-events.html Mon Dec 31
15:37:21 2012
@@ -28,7 +28,7 @@
<li class="">
<a href="/getting-ode.html">Getting ODE</a>
</li>
- <li class=" dropdown">
+ <li class="active dropdown">
<a href="/user-guide.html" class="dropdown-toggle"
data-toggle="dropdown" data-target="#">Documentation<b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="/userguide/">User Guide</a></li>
@@ -83,11 +83,12 @@
<div class="row">
<div class="span12">
- <p>ODE generates events to let you track what is exactly happening
in the engine and produces detailed information about process executions. These
events are persisted in ODE's database and can be queried using the <a
href="management-api.html">Management API</a>. The default behavior for the
engine is to always generate all events for every executed action. However from
a performance standpoint it's a good idea to deactivate some of the events
you're not interested in (or even all of them). Inserting all these events
generates a non-negligeable overhead.</p>
+ <h2 id="overview">Overview</h2>
+<p>ODE generates events to let you track what is exactly happening in the
engine and produces detailed information about process executions. These events
are persisted in ODE's database and can be queried using the <a
href="management-api.html">Management API</a>. The default behavior for the
engine is to always generate all events for every executed action. However from
a performance standpoint it's a good idea to deactivate some of the events
you're not interested in (or even all of them). Inserting all these events
generates a non-negligeable overhead.</p>
<p><a name="ODEExecutionEvents-Eventtypes"></a></p>
-<h3 id="event-types">Event types</h3>
+<h2 id="event-types">Event types</h2>
<p>The following table details each event possibly generated by ODE:</p>
-<table>
+<table class="table table-hover table-bordered">
<tr><th>Event
Name</th><th>Process/Scope</th><th>Description</th><th>Type</th></tr>
<tr><td>ActivityEnabledEvent </td><td> Scope </td><td> An activity is enabled
(just before it's started) </td><td> activityLifecycle
</tr>
@@ -139,9 +140,9 @@
<p>The second column specifies wether an event is associated with the process
itself or with one of its scopes. The event type is used for filtering
events.</p>
<p><a name="ODEExecutionEvents-Filteringevents"></a></p>
-<h3 id="filtering-events">Filtering events</h3>
+<h2 id="filtering-events">Filtering events</h2>
<p><a name="ODEExecutionEvents-Filteringattheprocesslevel"></a></p>
-<h4 id="filtering-at-the-process-level">Filtering at the process level</h4>
+<h3 id="filtering-at-the-process-level">Filtering at the process level</h3>
<p>Using ODE's deployment descriptor, it's possible to tweak events generation
to filtrate which ones get created. First, events can be filtered at the
process level using one of the following stanza:</p>
<div class="codehilite"><pre><span class="nt"><dd:process-events</span>
<span class="na">generate=</span><span class="s">"all"</span><span
class="nt">/></span> <span class="c"><!-- Default configuration
--></span>
@@ -156,7 +157,7 @@
<p>The first form just duplicates the default behaviour, when nothing is
specified in the deployment descriptor, all events are generated. The third
form lets you define which type of event is generated, possible types are:
<code>instanceLifecycle</code>, <code>activityLifecycle</code>,
<code>dataHandling</code>, <code>scopeHandling</code>,
<code>correlation</code>.</p>
<p><a name="ODEExecutionEvents-Filteringatthescopelevel"></a></p>
-<h4 id="filtering-at-the-scope-level">Filtering at the scope level</h4>
+<h3 id="filtering-at-the-scope-level">Filtering at the scope level</h3>
<p>It's also possible to define filtering for each scope of your process. This
overrides the settings defined on the process. In order to define event
filtering on a scope, the scope activity MUST have a name in your process
definition. Scopes are referenced by name in the deployment descriptor:</p>
<div class="codehilite"><pre><span class="nt"><dd:deploy</span> <span
class="na">xmlns:dd=</span><span
class="s">"http://www.apache.org/ode/schemas/dd/2007/03"</span><span
class="nt">></span>
...
@@ -177,10 +178,10 @@
<p>Note that it's useless to enable an event associated with the process
itself when filtering events on scopes.</p>
<p>The filter defined on a scope is automatically inherited by its inner
scopes. So if no filter is defined on a scope, it will use the settings of its
closest parent scope having event filters (up to the process). Note that what
gets inherited is the full list of selected events, not each event definition
individually.</p>
<p><a name="ODEExecutionEvents-Eventlisteners"></a></p>
-<h3 id="event-listeners">Event listeners</h3>
+<h2 id="event-listeners">Event listeners</h2>
<p>ODE lets you register your own event listeners to analyze all produced
events and do whatever you want to do with them. To create a listener you just
need to implement the <a
href="https://svn.apache.org/repos/asf/ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/iapi/BpelEventListener.java">org.apache.ode.bpel.iapi.BpelEventListener</a>
interface.</p>
<p>Then add your implementation in the server's classpath and add a property
in ode-axis2.properties giving your fully qualified implementation class name.
Something like:</p>
-<div class="codehilite"><pre><span class="n">ode</span><span
class="o">-</span><span class="n">axis2</span><span class="o">.</span><span
class="n">event</span><span class="o">.</span><span
class="n">listeners</span><span class="o">=</span><span
class="n">com</span><span class="o">.</span><span class="n">compamy</span><span
class="o">.</span><span class="n">product</span><span class="o">.</span><span
class="n">MyOdeEventListener</span>
+<div class="codehilite"><pre><span
class="na">ode-axis2.event.listeners</span><span class="o">=</span><span
class="s">com.compamy.product.MyOdeEventListener</span>
</pre></div>
Modified: websites/staging/ode/trunk/content/process-versioning.html
==============================================================================
--- websites/staging/ode/trunk/content/process-versioning.html (original)
+++ websites/staging/ode/trunk/content/process-versioning.html Mon Dec 31
15:37:21 2012
@@ -87,15 +87,13 @@
<h2 id="introduction">Introduction</h2>
<div class="toc">
<ul>
-<li><a href="#introduction">Introduction</a><ul>
+<li><a href="#introduction">Introduction</a></li>
<li><a href="#how-versioning-works">How Versioning Works</a><ul>
<li><a href="#process-versioning-in-ode">Process Versioning in ODE</a></li>
<li><a href="#remote-deployment-vs-hand-made-deployment">Remote Deployment vs.
Hand-Made Deployment</a></li>
</ul>
</li>
</ul>
-</li>
-</ul>
</div>
<p>Before starting on what process versioning exactly does, let's see what the
world (or at least ODE) would be without versioning. It will be much more
easier for you to understand the solution after fully seeing the problem.</p>
<p>So you're starting using ODE and you've just designed you first business
process. It's all nice and dandy and works perfectly. It works so well that you
let your users start using it. It's not really production but you know, release
early, release often, so let's see what users think of it. After a couple of
days you realize that a couple of steps are missing, you add them in your
process and once again, it executes smoothly. So let's see what our users think
of the improvement! Next thing you know, your phone starts ringing and the user
on the other side is most likely pretty upset. What happened?</p>
@@ -103,11 +101,11 @@
<p>At this time there's no simple automated way to migrate a running process
that has been executing using one definition to another new one. Computing the
differences between the 2 definitions can be very complex and chances are that
they're not even compatible! When you think of all these little tasks that are
arranged just so to guarantee a perfect execution using the right data types,
even minor alterations can get really tricky to apply on instances without
blowing them all.</p>
<p>So here is the crude and sad truth: without having some versioning goodness
in it, a process engine will always delete all the running instances when a new
process definition is deployed.</p>
<p><a name="ProcessVersioning-HowVersioningWorks"></a></p>
-<h3 id="how-versioning-works">How Versioning Works</h3>
+<h2 id="how-versioning-works">How Versioning Works</h2>
<p>So if existing executions can't be migrated, what are you going to do with
them? Well, just let them be. Versioning is based on the fact that, instead of
directly updating the original process definition (leaving its instances to
their dreadful fate), another new version of this definition is created. The
older one is declared retired so no new executions can be started on that one,
the new process is the one to be used now on. But running instances can still
finish their job peacefully as the process they've been using to execute so
far is still available and unchanged.</p>
<p>However ODE also has the concept of deployment bundles and supports 2 modes
of deployment (remotely or manually directly on the filsesystem). Let's see how
we get versioning to work under those conditions.</p>
<p><a name="ProcessVersioning-ProcessVersioninginOde"></a></p>
-<h4 id="process-versioning-in-ode">Process Versioning in ODE</h4>
+<h3 id="process-versioning-in-ode">Process Versioning in ODE</h3>
<p>In ODE, processes are deployed in what we call a deployment bundle. When
you come down to it, it's just a zip file or a directory containing ODE's
deployment descriptor (<a
href="creating-a-process#deployment-descriptor.html">deploy.xml</a>), the
processes BPEL and all the other goodies necessary for your BPEL to run (WSDLs,
schemas, xsl stylesheets, you name it). And what ODE is using to know you're
redeploying the same thing is the deployment bundle name.</p>
<p>So when you're redeploying a deployment bundle in ODE, here is what
happens:</p>
<ol>
@@ -129,7 +127,7 @@
<p>There's still a last question left unsolved: what happens if you take your
bundle and deploy it under a different name with the same content. If you know
a bit about source version control (like CVS or Subversion), that's very close
to branching, only you might be executing two branches at the same time. As ODE
can't find another bundle with the same, the processes will simply be deployed
<em>without</em> retiring anything. You will effectively have twice the same
process deployed under different versions. In that scenario you're supposed to
know what you're doing. </p>
<p>If two identical process definitions are deployed at the same time, the
behavior of the engine is unspecified. Which one of the two process will pick
up the message? Who knows!? But this can be a very useful feature in specific
cases when you want to deploy the same process twice (by same understand same
name and same namespace) but the 2 definitions are actually different and
enable different endpoints. This allows the parallel deployment of two
different version of the same process provided that they don't overlap in their
endpoint implementation.</p>
<p><a name="ProcessVersioning-RemoteDeploymentvs.Hand-MadeDeployment"></a></p>
-<h4 id="remote-deployment-vs-hand-made-deployment">Remote Deployment vs.
Hand-Made Deployment</h4>
+<h3 id="remote-deployment-vs-hand-made-deployment">Remote Deployment vs.
Hand-Made Deployment</h3>
<p>ODE supports 2 different ways of deploying bundles:</p>
<ul>
<li>using the deployment web service or JBI deployment.</li>