[Zope-CMF] Project-style workflows, DCWorkflow, SQL, etc.
Phillip J. Eby
pje@telecommunity.com
Fri, 12 Oct 2001 08:30:07 -0500
At 02:21 PM 10/12/01 +0200, Ulrich Eck wrote:
>As far as I can see right now, it would be good to create a new tool
>e.g. portal-activity/portal-task or whatever it will be called.
>
>This tool holds different process-definitions and is based on the
>portal-worklfow-tool (optimally the interface could be used
>without major modifications).
>
>I see the activity-tool as a coordinator for Application-objects
>that internally use the portal-workflow (DCWorkflow/hardcoded ...).
>
>The activity-tool leads the participant to the application/task which
>is finished when it reaches a certain state. Then transitions defined
>in the activity-tool can be made (manually/automatically).
>
>Worklists can be used to determine which activities are open depending
>on the participants information of a ProcessDefinition.
>
>A participant can be a person/group/machine.
>
>Does this alltogether make sense ??
Not to me, but I'm probably blinded by viewing this through the lenses of
my "waiter-for" model perspective. What you're saying above sounds like
overkill to me, as I don't think it's necessary to modify the existing CMF
at all in order to do more complex workflows. At most, DCWorkflow might
need some extra features, but I'm not sure even that would be necessary.
> > >How is WarpCore doing? Been too busy to keep up with it.
> >
> > I've been too busy to work on TransWarp much lately. WarpCORE has long
> ago
> > been in production use as a base schema for our Sybase application
> > databases, however, and Ty has made prototype versions of the WarpCORE
> > kernel schema for Firebird/Interbase and PostgreSQL. I've also begun a
> > draft of documentation for the WarpCORE design patterns and kernel, but
> > have no schedule for completing it.
> >
>
>1. What exactly is WARPCore?
>2. Is there some code that I could see to find out what it does ?? I'm
>searching
>for a Relational<->Object Binding and would contribute a shema for
>SAP-DB if possible.
Here's the "Overview" section from the documentation... which is in fact
all I've written so far. Any further discussion of WarpCORE should
probably go to the TransWarp list, which I've cc:'d on this e-mail, since
it has little relevance to the CMF.
======
Overview
WarpCORE is a set of patterns for implementing "business object"
applications in relational databases. Truly implementing business objects
requires not only "object" concepts like classes, polymorphism, interfaces,
and object composition, but also "business" concepts such as relationships
and historical event records. Further, creating practical applications
usually requires interaction with "legacy" applications or other
systems/databases which are not a part of the new application.
WarpCORE addresses most of these requirements with only a few tables and
stored procedures. A typical base WarpCORE implementation, depending on
the specific database platform, may need as few as 7 tables and 13 stored
procedures, many of which can be eliminated if they are not needed for that
application. WarpCORE is also highly cross-platform, with production DDL
already in existence for Sybase, and prototypes written for
Interbase/Firebird, and PostgreSQL. Porting to other databases (as long as
they have transactions and stored procedures) should be straightforward,
since WarpCORE tends towards least-common-denominator SQL features.
Unlike many object-relational approaches, however, WarpCORE still allows
for very high-performance applications, by leveraging the relational
database's strengths. WarpCORE uses a "table per interface" approach which
allows each interface to have indexes specifically tuned for that
interface's requirements. It also uses a stored-procedure manipulation
pattern that makes it easy to hide any denormalizations introduced for
performance enhancement.
Although the creators of WarpCORE prefer using Python to most any other
language, and mostly develop web applications, there is nothing
particularly Pythonic or web-oriented in WarpCORE, as it is a set of design
patterns for relational databases, not applications per se. (There are a
few fields in the standard "tw_classes" table which are useful for
web-based applications, but their use is subject to application
interpretation anyway, so there's nothing stopping you from using them for
something else or omitting them altogether.)
Indeed, WarpCORE databases are quite usable from other languages besides
Python. For example, Java offers many object-relational mapping libraries
that should work without modification against WarpCORE databases, once the
appropriate mappings are defined. For example, ArsDigita's ACS system
includes a "persistence definition language", PDL, which is rather ideally
suited to using WarpCORE objects for persistence. By contrast, PyDO, the
closest equivalent to PDL available for Python, would require quite a bit
of extension to work well with schemas based on WarpCORE, or at minimum the
addition of extra views to the schemas. We hope to remedy this situation
in the future by creating a TransWarp "horizontal framework" for mapping
Python objects to/from WarpCORE database schemas.
======
So, as you can see, WarpCORE is *not* an O-R binding or mapping tool, it's
a set of modelling patterns for schemas, a set of idioms for organizing
data. If I document it well, I think it will turn out to be a full-blown
"pattern language". But it's not software, even though at some point
TransWarp will evolve to include code that's specialized for use with
schemas modelled with it. Currently, the single production WarpCORE
application is actually based on Zope+ZPatterns, but Ty and I have just
begun work on porting it to ZLite+TransWarp. This should result in
enhancements to both ZLite and TransWarp, probably including some kind of
database mapping tools, since the target application has both
WarpCORE-on-Sybase and LDAP datasets that it works with.