Hi Tiger(?),

thanks for your interest in this project. I consider this a very
interesting project, also since it is crucial to make ODE more agile
and makes it possible to add new features without affecting backward
compatibility. Please ask any questions and take your time to file a
detailed application for GSoc. I'm happy to help you through the
process.

Here are some details about the OModel and what the problem is:

When a BPEL process is deployed to ODE, it first runs through the
compiler, which parses the BPEL file into a BPEL Object Model (BOM),
which basically aims at abstracting from different BPEL versions (1.1,
2.0 draft, 2.0 final). Then the compiler compiles the BOM into the
OModel, which is then stored as .cbp file using Java's built-in
serialization. The compiler does some optimizations, like translating
<receive> into a <pick> with a single <onMessage>, which is
semantically equivalent and thus simplifies the runtime navigator
(since it does not need to implement <receive>). Also, it assigns
every single element a unique ID within this process model.

When a process instance is executed, the navigator operates on the
OModel, i.e. it is loaded from disk into memory during execution and
is unloaded afterwards, depending on hydration/dehydration policies to
reduce the memory footprint. The execution state of the OModel keeps
in-memory references to the OModel, but when the state is persisted,
it does not store a copy of the OModel but only the IDs mentioned
above. When the state is loaded, the IDs are looked up and replaced by
proper references.

The problem with the current OModel is that it has a static structure
and is serialized using Java's built-in mechanisms, which are not very
tolerant against class changes and could even struggle with JDK
upgrades. This is a problem because BPEL processes and their instances
are potentially long-running, i.e. they may run over years. Thus, a
serialized OModel should survive ODE and JDK upgrades. Our problem is
that even simple changes (that are needed to implement new features or
even to fix some bugs) break backward compatibility in the OModel.
There are a couple of cumbersome ways to deal with that, but we need a
better solution to address that problem. The OModel resides in the
bpel-obj module in the SVN.

My suggestion is to duplicate the OModel and refactor it to a dynamic
or semi-static model. This model is then exclusively used by the
navigator. The old OModel remains untouched, so that old OModels (.cbp
files) can be loaded and then migrated in a stop-the-world approach to
the new model.

I spend a couple of hours to investigate possible approaches and
finally found Jackson 2.0 [1] as a potential solution. Jackson is
actually a JSON framework that supports flexible databindings, but it
turns out that its fast as hell, even faster than Java's built-in
means. In addition, it provides a binary serialization protocol
(Smile), that is even faster and smaller, also it can kind of optimize
the data by storing duplicate strings only once and replacing further
occurrences by a reference. Since in our case only read performance is
important, this makes it a good candidate. It also provides a
semi-static binding, which means that data that cannot be mapped to an
object's field are put into a Map [2]. This might be useful to make
the new OModel more evolveable: If there is unknown data in the map, a
model migrator could start and transform this data into the new format
if needed.

Some more requirements and considerations can be found here [3].

I hope that gives you an overview about the problem and the scope of
the project. Could you briefly tell us a bit more about you, your
experience with ODE and Java for instance? If you don't want to make
this publicly available on the mailing list, feel free to contact me
directly.

Thanks,
  Tammo

[1] http://wiki.fasterxml.com/JacksonHome
[2] http://www.innoq.com/blog/me/blog/2012/03/05/semistatic-json-binding/
[3] 
https://github.com/vanto/ode-omodel-jackson-experiments/blob/master/README.md

On Mon, Mar 19, 2012 at 15:16, Tiger Gui <tigergui1...@gmail.com> wrote:
> Hi All,
>
> I used ODE as BPEL engine before, and be interested in the GSoC 2012
> project "Dynamic OModel: Refactor OModel and provide migration"[1]. I read
> ODE's source code before, but not very familiar with its OModel module, so
> can anyone tell me where should i start with OModel's details ? Is there
> any materials which can help me understand OModel's design and implement
> very quickly?
>
> Thank you very much
>
>
> [1] https://issues.apache.org/jira/browse/ODE-912
> --
> Best Regards From Tiger Gui
> --------------------------------------
> Open source is some kind of life attitude



-- 
Tammo van Lessen - http://www.taval.de

Reply via email to