Re: Workflow in Database
Hani Suleiman <[email protected]>
| Newsgroups | gmane.comp.java.open-symphony.devel |
|---|---|
| Message-ID | <[email protected]> |
I've just committed a fix for the encoding error, and also changed the
order in which things happen in ConfigLoader. persistenceArgs are now
read in before the factories are created/initialised. Please let me
know if you have any other issues with these.
Regarding your JDBCXMLWorkflowFactory, I'm curious as to the benefits
of this? Do you have a separate tool to manage these workflows? How do
people update them?
On Monday, May 5, 2003, at 12:30 PM, Philipp Hug wrote:
> I implemented the JDBCWorkflowFactory, and it seems to work ;-)
> Ok, how does it work:
> At the moment it uses one table with 2 fields (WF_NAME; WF_DEFINITION)
> the first contains the name of the workflow and the second contains
> the whole workflow definition xml as a blob.
>
> problems:
> 1. osworkflow doesn't correctly encode strings in xml,
> if you have && in a beanshell script it'll just write it down like
> that,
> instead of escaping it. (e.g. with CDATA) (--> see jira bug WF-152)
> this causes problems when you try to save the example workflow into
> database.
> 2. patch for ConfigLoader required:
> persistence properties must be loaded before the JDBCWorkflowFactory
> is initialized,
> because I load the DB settings from the persistence properties.
> I could change it to load the setting from a property in the factory
> section of osworkflow.xml,
> but this would just create yet another place where you have to set the
> datasource. :-(
>
> If nobody disagrees, I'll put this patch and JDBCWorkflowFactory.java
> in jira.
>
> philipp
>
> Index: java/com/opensymphony/workflow/config/ConfigLoader.java
> ===================================================================
> RCS file:
> /cvs/apps/flow/opensymphony/osworkflow/src/java/com/opensymphony/
> workflow/config/ConfigLoader.java,v
> retrieving revision 1.2
> diff -r1.2 ConfigLoader.java
> 77a78,87
>> persistence = p.getAttribute("class");
>>
>> NodeList args = p.getElementsByTagName("property");
>> persistenceArgs = new HashMap();
>>
>> for (int i = 0; i < args.getLength(); i++) {
>> Element e = (Element) args.item(i);
>> persistenceArgs.put(e.getAttribute("key"), e.getAttribute("value"));
>> }
>>
> 98,107d107
> < }
> <
> < persistence = p.getAttribute("class");
> <
> < NodeList args = p.getElementsByTagName("property");
> < persistenceArgs = new HashMap();
> <
> < for (int i = 0; i < args.getLength(); i++) {
> < Element e = (Element) args.item(i);
> < persistenceArgs.put(e.getAttribute("key"), e.getAttribute("value"));
>
>
> ----- Original Message -----
> From: "Hani Suleiman" <[email protected]>
> To: <[email protected]>
> Sent: Thursday, May 01, 2003 6:15 PM
> Subject: Re: [Opensymphony-developers] Workflow in Database
>
>
>> I've added the load(InputStream) method, it's in CVS now.
>>
>> For the other issue, I don't think it's a good idea to add that. The
>> reason is that the way it is set up currently, the save method is free
>> to choose any way of saving. It doesn't need to store it as an xml
>> file
>> either. It could persist the workflow descriptor to a set of database
>> tables which model its structure, or to a swing JTree model.
>>
>> The WorkflowLoader is a convenience class, and so I don't think it's
>> such a big deal to duplicate the small amount of code it is to write
>> out the xml file. You could always have your jdbc factory subclass
>> XMLWorkflowFactory, and use its writing method. Okok, so this wasn't
>> possible before, but I just fixed it in XMLWorkflowFactory.
>>
>> You can subclass it (JDBCXMLWorkflowFactory) and override the
>> saveWorkflow method, then use the writeXML method to write out your
>> workflow to whatever Writer you want.
>>
>> Let me know if you have any problems with your implementation!
>>
>> Hani
>>
>> On Thursday, May 1, 2003, at 10:03 AM, Philipp Hug wrote:
>>
>>> I wrote a class to put workflow definitions in a JDBC database,
>>> but I need some patches in osWorkflow to prevent code duplication:
>>>
>>> 1. WorkflowLoader.java
>>> --> add an additional load method that takes an InputStream instead
>>> of
>>> an
>>> URL
>>> /**
>>> * Load a workflow descriptor from a URL
>>> */
>>> public static WorkflowDescriptor load(final URL url) throws
>>> SAXException, IOException {
>>> return load(url.openStream());
>>> }
>>>
>>> /**
>>> * Load a workflow descriptor from an InputStream
>>> */
>>> public static WorkflowDescriptor load(final InputStream is)
>>> throws
>>> SAXException, IOException {
>>> ----
>>>
>>> 2. Move save() code from XMLWorkflowFactory into a new class similar
>>> to
>>> WorkflowLoader, otherwise the code
>>> would need to be duplicated. It's just a small part of code but
>>> anyway:
>>>
>>> the code could look like that:
>>> public static save(OutputStream os) {
>>> Writer out = new OutputStreamWriter(os);
>>>
>>> PrintWriter writer = new PrintWriter(new
>>> BufferedWriter(out));
>>> writer.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
>>>
>>> writer.println("<!DOCTYPE workflow PUBLIC \"-//OpenSymphony
>>> Group//DTD OSWorkflow 2.5//EN\"
>>> \"http://www.opensymphony.com/osworkflow/workflow.dtd\">");
>>> descriptor.writeXML(writer, 0);
>>> writer.flush();
>>> writer.close();
>>> }
>>>
>>> What do you think? Should I submit a feature request/bug in JIRA?
>>>
>>> philipp
>>>
>>>
>>>
>>> -------------------------------------------------------
>>> This sf.net email is sponsored by:ThinkGeek
>>> Welcome to geek heaven.
>>> http://thinkgeek.com/sf
>>> _______________________________________________
>>> Opensymphony-developers mailing list
>>> [email protected]
>>> https://lists.sourceforge.net/lists/listinfo/opensymphony-developers
>>>
>>
>>
>>
>> -------------------------------------------------------
>> This sf.net email is sponsored by:ThinkGeek
>> Welcome to geek heaven.
>> http://thinkgeek.com/sf
>> _______________________________________________
>> Opensymphony-developers mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/opensymphony-developers
>>
>>
>
>
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf