Hi Tammo,

Yeah, my name is Tiger :-)

Thank you for your detailed explanation about ODE's OModel design. I know
this project aims to re-factor OModel for ODE, and you describe the
necessity and importance. Now i will go deep into ODE's source code and try
to make clear of it structure,  start file a detailed GSoC project proposal
for this project. During this process, i will post my questions here to
discuss with you guys if i am in case of doubt.

Helping we can work together to finish an excellent GSoC project this
summer :-)

Thank you

2012/3/19 Tammo van Lessen <tvanles...@gmail.com>

> 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
>



-- 
Best Regards From Tiger Gui
--------------------------------------
Open source is some kind of life attitude

Reply via email to