[Biojava-l] LIMS framework- an open-bio project proposal

Alex Rolfe arolfe@genome.wi.mit.edu
Fri, 8 Mar 2002 10:50:16 -0500 (EST)


This is an outline/overview for a LIMS/Workflow framework project.  If
it sounds like the sort of thing that you're interested in using or
(better yet) helping with, please let me know.  Most of the design and
some of the implementation are done and it's at the point where it can
almost be useful to people without much work.

Many of us are familiar with writing LIMS software to track data from
laboratory or computational experiments through some process.  The same
components tend to get written over and over and the same mistakes get
made too.  A LIMS framework makes this task easier by providing common
functionality that lets you plug in simple, reusable components for
process-specific work.

The lims is built around the idea of Materials, Events, Queues, and
Listeners.  A Material is an object to represent a computational or
biological material that will be put through some process.  Events are
objects that represent the results of some work.  Queues are sets of
Materials waiting for a specific step in the process.  A material can be
in one queue per process at any time.  Listeners are objects that do the
actual work.  Each Queue has a set of Listeners that process the
materials in the queue.

In concrete terms, the lims system provides:
- a GUI for lims design.  Instead of hooking up components in code, you
specify the process structure with a flowchart.  The nodes in the
flowchart correspond to Queues.  You specify what listeners go with each
queue.  At each queue, at most one listener returns an Event to the
system which determines the Queue to which the Material is routed.
- a runtime engine.  The engine calls the listeners that you provided at the
correct times with the appropriate materials.  It also records the
state of the material and the history of the material.  
- a reporting infrastructure to let end-users query the history and
status of the material.

Right now, I'm using an SQL database for persistent storage of process
definitions and state and JMS/SonicMQ as the core of the engine.
Porting to other sql or jms implementations should be fairly easy.  All
of the code is in java right now.  Providing an interface to other
languages should be straightforward.  It could be done either
with SOAP or http bindings or some other method of passing serialized
objects.  

The lims framework would be a separate project from biojava.  I expect
that it would be used by many of the same people, but the purposes are
independent: process implementation vs. biological data representation.
 
There's a longer description of the system design and some ideas about
other features at http://www-genome.wi.mit.edu/~arolfe/lims-notes.ps.
Questions, suggestions, etc. are welcome.


Alex