[omniORB-dev] ImR prototype/proof-of-concept

krbailey6@mchsi.com krbailey6@mchsi.com
Mon, 27 Jan 2003 22:10:27 +0000


--NextPart_Webmail_9m3u9jl4l_16169_1043705427
Content-Type: text/plain
Content-Transfer-Encoding: 8bit


The code contained here is meant to be a prototype/proof-of-concept *only*.
It's purpose is to further the discussion among the omniORB-dev group with
respect to the development of a portable Implementation Repository (ImR) service
for use in omniORB or mixed ORB environments (or even to replace another ORB's
ImR if so desired).

Some known/intentional problems/ommissions:
============================================
1) little/no error handling
2) not thread safe.  No locking, and no use of synchronization primitive to
coordinate needed communication between threads.  Saving of ImR state is not
thread-safe at all.
3) no graceful way to shut down ImR.py or test/server.py
4) persistence of ImR state is inefficient.  Any change to the state causes the
full state to get re-serialized using cPickle.

Topics for discussion:
=======================
- Correctness/completeness of imr.idl and imradmin.idl
- Persistence strategy for the ImR
- Details of the server auto-start mechanism.  Local vs. remote process launching.
  The right way/portable way to start a daemon process / Windows Service?
- Logging, graceful shutdown, error handling, other boiler-plate.


Kendall

--NextPart_Webmail_9m3u9jl4l_16169_1043705427
Content-Type: application/x-tar; name="imr.tgz"
Content-Transfer-Encoding: base64

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

--NextPart_Webmail_9m3u9jl4l_16169_1043705427--