concern-users Mailing List for osbl (Page 5)
Brought to you by:
hengels,
leonchiver
You can subscribe to this list here.
| 2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
(1) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2004 |
Jan
(41) |
Feb
(3) |
Mar
|
Apr
(1) |
May
(24) |
Jun
|
Jul
(13) |
Aug
(5) |
Sep
(2) |
Oct
|
Nov
|
Dec
|
| 2005 |
Jan
|
Feb
|
Mar
|
Apr
(6) |
May
(6) |
Jun
(4) |
Jul
|
Aug
|
Sep
(7) |
Oct
(4) |
Nov
|
Dec
|
| 2006 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
|
| 2007 |
Jan
|
Feb
|
Mar
|
Apr
(4) |
May
|
Jun
|
Jul
(2) |
Aug
(1) |
Sep
(1) |
Oct
|
Nov
(4) |
Dec
(3) |
| 2008 |
Jan
(1) |
Feb
(1) |
Mar
(3) |
Apr
(4) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(12) |
Dec
(30) |
| 2009 |
Jan
|
Feb
(1) |
Mar
(5) |
Apr
(1) |
May
|
Jun
(17) |
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
| 2010 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: Manfred D. <Man...@FI...> - 2005-09-28 10:34:01
|
Hi,
con:cern seems to suite our needs for a coming workflow/process
management project. I think this extended case handling approach where
actions are in some way loosely coupled has a couple of advantages over
a direct control.
When I compiled the sources (checked out from CVS yesterday) there were
somee minor problems:
[javac] /home/md/concern/conform/src/java/org/concern/form/wings/PropertyCellRenderer.java:180: clone() in org.concern.form.wings.PropertyCellRenderer.ReadOnlyProperty cannot implement clone() in org.concern.form.Property; overridden method does not throw java.lang.CloneNotSupportedException
[javac] public Object clone() throws CloneNotSupportedException
I changed this to a RuntimeException and removed try/catch in
OneToManyEditor.java and OneToOneEditor.java. Then it compiled fine.
Next problem occured when I deployed the j2ee-demo to JBoss (JBoss
3.2.7, JDK 1.5.0_03, Linux Fedora Core 3). JBoss reported:
2005-09-28 11:35:16,464 ERROR
[org.jboss.deployment.scanner.URLDeploymentScanner] Incomplete
Deployment listing: MBeans waiting for other MBeans:
ObjectName: jboss.concern:name=ApplicationController
state: CONFIGURED
I Depend On: jboss.jca:service=ConcernController
jboss.jca:name=JBassDefaultDS,service=DataSourceBinding
Depends On Me:
ObjectName: jboss.concern:name=EngagementController
state: CONFIGURED
I Depend On: jboss.jca:service=ConcernController
jboss.jca:name=JBassDefaultDS,service=DataSourceBinding
Depends On Me:
ObjectName: jboss.concern:name=UrlaubController
state: CONFIGURED
I Depend On: jboss.jca:service=ConcernController
jboss.jca:name=JBassDefaultDS,service=DataSourceBinding
Depends On Me:
MBEANS THAT ARE THE ROOT CAUSE OF THE PROBLEM:
ObjectName: jboss.jca:name=JBassDefaultDS,service=DataSourceBinding
state: NOTYETINSTALLED
I Depend On:
Depends On Me: jboss.concern:name=ApplicationController
jboss.concern:name=EngagementController
jboss.concern:name=UrlaubController
The datasource JBassDefaultDS is deployed an can be accessed e. g. via
entity beans. Relevant config is:
<jndi-name>JBassDefaultDS</jndi-name>
<connection-url>jdbc:oracle:thin:@oradev.fiz-
karlsruhe.de:1521:osdb01</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>jbassdev</user-name>
<password>xxxxxx</password>
Please could someone give me a hint what is causing this deployment
problem?
Thanks in advance
Manfred
--
Manfred Deutsch
FIZ Karlsruhe, Entwicklung, Elektr. Publizieren u. eScience
Telefon 07247 808-267, Fax 07247 808-133
Email: man...@fi...
|
|
From: Holger E. <he...@me...> - 2005-09-26 11:54:56
|
by end of this week Quoting Torsten Schroeder <tor...@co...>: > Hi Holger, > > > On Fri, Sep 23, 2005 at 09:00:58AM +0200, Holger Engels wrote: >> ... >> then, you should switch to the cvs head. head is currently stabilizing. it >> has >> many advantages over the 2.0 release: >> ... >> distribution. please use the j2ee-demo as a reference. > > Okay, thanks, I'd switched/completed successfully to cvs. > The j2ee-demo is compiling correctly. > > >> We're currently using the j2ee-demo as the prototype for the current >> development >> in our company .. for we're using spring and not jmx, we changed the >> deployment >> accordingly. I will send you a copy of the prototype. > > Thanks in advance. Can you tell me an appointed day? > I'd never used JBoss or Spring before, so I'm prefer to familiarize > oneself with Spring "only" the more so as Spring seems to be modular and > complete. > > > Regards, > > Torsten > > > > ------------------------------------------------------- > SF.Net email is sponsored by: > Tame your development challenges with Apache's Geronimo App Server. Download > it for free - -and be entered to win a 42" plasma tv or your very own > Sony(tm)PSP. Click here to play: http://sourceforge.net/geronimo.php > _______________________________________________ > concern-users mailing list > con...@li... > https://lists.sourceforge.net/lists/listinfo/concern-users > > |
|
From: Torsten S. <tor...@co...> - 2005-09-26 11:41:43
|
Hi Holger, On Fri, Sep 23, 2005 at 09:00:58AM +0200, Holger Engels wrote: > ... > then, you should switch to the cvs head. head is currently stabilizing. it > has > many advantages over the 2.0 release: > ... > distribution. please use the j2ee-demo as a reference. Okay, thanks, I'd switched/completed successfully to cvs. The j2ee-demo is compiling correctly. > We're currently using the j2ee-demo as the prototype for the current > development > in our company .. for we're using spring and not jmx, we changed the > deployment > accordingly. I will send you a copy of the prototype. Thanks in advance. Can you tell me an appointed day? I'd never used JBoss or Spring before, so I'm prefer to familiarize oneself with Spring "only" the more so as Spring seems to be modular and complete. Regards, Torsten |
|
From: Holger E. <he...@me...> - 2005-09-23 07:01:25
|
Hi Thorsten,
first of all: thank you for the corrections to the homepage! I will apply them
as son as possible.
then, you should switch to the cvs head. head is currently stabilizing. it has
many advantages over the 2.0 release:
o you can assign actors to user activites. the actor will assign work to
assignees (integrate with an arbitrary orga structure management)
o a rich worklist concept
o the modeller's usability has been enhanced
o multiple process controllers share the same controller tables
o better spring integration (autowiring for process elements)
o correct timeout-and retry handling
the embedded-demo is not supported anymore. It has been excluded from
the 2.0.1
distribution. please use the j2ee-demo as a reference.
We're currently using the j2ee-demo as the prototype for the current
development
in our company .. for we're using spring and not jmx, we changed the
deployment
accordingly. I will send you a copy of the prototype.
Regards,
Holger
Quoting Torsten Schroeder <tor...@co...>:
> Hi guys,
>
>
> con:cern seems to suit my needs for our workflow-come-on-project.
> I rather like the vision to make the projekt run without J2EE,
> but with wingS-rich-client UI or on other way.
> For persistence I prefer PostgreSQL-database.
> So I'm willing to try out the sample "embedded-demo"
> The CVS access standing by our firewall.
> Unlucky I'm aware that the concern-2.0.1.tgz have zero bytes and
> so I'll do my best on the concern-2.0.tgz version.
> The global "ant all dist" and diverse subtree "ant all dist"
> gone successful
>
> 1) So, my first problem at this time is:
> But at the embedded-demo "ant all dist" seems to be a special nut, so I got:
> <snip>
> concern:
> [java] Generating artifact: ddl/postgres.xsl
> [java] java.io.FileNotFoundException:
>
> /home/torstentschroeder/temp/4/concern/devel/dist/etc/xsl/ddl/postgres.xsl
> (No such file or directory)
> </snip>
> Okay, I'd modified the etc/hibernate.cfg.xml with real life user/password and
> database.
> The devel "ant all" and "ant dist" are done successful, but the ddl-path is
> missed.
> I'd searched the mailing-lists and the project site, but without success.
>
>
> 2) The second problem at same ant-command, compiling errors,
> seems to be bugs in the source?:
> <snip>
> compile:
> [javac] Compiling 19 source files to
> /home/torstentschroeder/temp/4/concern/embedded-demo/build/class
> [javac]
> /home/torstentschroeder/temp/4/concern/embedded-demo/src/java/org/concern/embedded/demo/procurement/process/EntschiedenExit.java:15:
> unreported exception org.concern.SubjectNotFoundException; must be caught or
> declared to be thrown
> [javac]
> controller.destroySubject(controller.getLoader().idOf(subject));
> [javac] ^
> [javac]
> /home/torstentschroeder/temp/4/concern/embedded-demo/src/java/org/concern/embedded/demo/procurement/process/ProcurementLoader.java:30:
> org.concern.embedded.demo.procurement.process.ProcurementLoader is not
> abstract and does notoverride abstract method
> load(java.lang.String[],java.lang.String,java.lang.String) in
> org.concern.Loader
> [javac] public class ProcurementLoader
> [javac] ^
> [javac]
> /home/torstentschroeder/temp/4/concern/embedded-demo/src/java/org/concern/embedded/demo/procurement/process/ProcurementLoader.java:97:
> idOf(java.lang.Object) in
> org.concern.embedded.demo.procurement.process.ProcurementLoader cannot
> implement idOf(java.lang.Object) in org.concern.Loader; overridden method
> does not throw org.concern.UnknownSubjectException
> [javac] public String idOf(Object subject) throws
> UnknownSubjectException {
> [javac] ^
> [javac]
> /home/torstentschroeder/temp/4/concern/embedded-demo/src/java/org/concern/embedded/demo/procurement/process/ProcurementLoader.java:59:
> load(java.lang.String[]) in
> org.concern.embedded.demo.procurement.process.ProcurementLoader cannot
> implement load(java.lang.String[]) in org.concern.Loader; overridden method
> does not throw org.concern.UnknownSubjectException
> [javac] public Object[] load(String[] ids) throws
> UnknownSubjectException {
> [javac] ^
> [javac]
> /home/torstentschroeder/temp/4/concern/embedded-demo/src/java/org/concern/embedded/demo/procurement/process/ProcurementLoader.java:33:
> load(java.lang.String) in
> org.concern.embedded.demo.procurement.process.ProcurementLoader cannot
> implement load(java.lang.String) in org.concern.Loader; overridden method
> does not throw org.concern.UnknownSubjectException
> [javac] public Object load(String id) throws UnknownSubjectException {
> [javac] ^
> [javac] 5 errors
>
> BUILD FAILED
>
> /home/torstentschroeder/temp/4/concern/embedded-demo/build.xml:82: Compile
> failed; see the compiler error output for details.
>
> </snip>
>
>
>
>
> Thank you in advance
>
> Torsten
>
>
>
>
> -------------------------------------------------------
> SF.Net email is sponsored by:
> Tame your development challenges with Apache's Geronimo App Server. Download
> it for free - -and be entered to win a 42" plasma tv or your very own
> Sony(tm)PSP. Click here to play: http://sourceforge.net/geronimo.php
> _______________________________________________
> concern-users mailing list
> con...@li...
> https://lists.sourceforge.net/lists/listinfo/concern-users
>
>
|
|
From: Torsten S. <tor...@co...> - 2005-09-22 13:31:15
|
Hi guys,
con:cern seems to suit my needs for our workflow-come-on-project.
I rather like the vision to make the projekt run without J2EE,
but with wingS-rich-client UI or on other way.
For persistence I prefer PostgreSQL-database.
So I'm willing to try out the sample "embedded-demo"
The CVS access standing by our firewall.
Unlucky I'm aware that the concern-2.0.1.tgz have zero bytes and
so I'll do my best on the concern-2.0.tgz version.
The global "ant all dist" and diverse subtree "ant all dist"
gone successful
1) So, my first problem at this time is:
But at the embedded-demo "ant all dist" seems to be a special nut, so I got:
<snip>
concern:
[java] Generating artifact: ddl/postgres.xsl
[java] java.io.FileNotFoundException:
/home/torstentschroeder/temp/4/concern/devel/dist/etc/xsl/ddl/postgres.xsl
(No such file or directory)
</snip>
Okay, I'd modified the etc/hibernate.cfg.xml with real life user/password and
database.
The devel "ant all" and "ant dist" are done successful, but the ddl-path is
missed.
I'd searched the mailing-lists and the project site, but without success.
2) The second problem at same ant-command, compiling errors,
seems to be bugs in the source?:
<snip>
compile:
[javac] Compiling 19 source files to
/home/torstentschroeder/temp/4/concern/embedded-demo/build/class
[javac]
/home/torstentschroeder/temp/4/concern/embedded-demo/src/java/org/concern/embedded/demo/procurement/process/EntschiedenExit.java:15:
unreported exception org.concern.SubjectNotFoundException; must be caught or
declared to be thrown
[javac]
controller.destroySubject(controller.getLoader().idOf(subject));
[javac] ^
[javac]
/home/torstentschroeder/temp/4/concern/embedded-demo/src/java/org/concern/embedded/demo/procurement/process/ProcurementLoader.java:30:
org.concern.embedded.demo.procurement.process.ProcurementLoader is not
abstract and does notoverride abstract method
load(java.lang.String[],java.lang.String,java.lang.String) in
org.concern.Loader
[javac] public class ProcurementLoader
[javac] ^
[javac]
/home/torstentschroeder/temp/4/concern/embedded-demo/src/java/org/concern/embedded/demo/procurement/process/ProcurementLoader.java:97:
idOf(java.lang.Object) in
org.concern.embedded.demo.procurement.process.ProcurementLoader cannot
implement idOf(java.lang.Object) in org.concern.Loader; overridden method
does not throw org.concern.UnknownSubjectException
[javac] public String idOf(Object subject) throws
UnknownSubjectException {
[javac] ^
[javac]
/home/torstentschroeder/temp/4/concern/embedded-demo/src/java/org/concern/embedded/demo/procurement/process/ProcurementLoader.java:59:
load(java.lang.String[]) in
org.concern.embedded.demo.procurement.process.ProcurementLoader cannot
implement load(java.lang.String[]) in org.concern.Loader; overridden method
does not throw org.concern.UnknownSubjectException
[javac] public Object[] load(String[] ids) throws
UnknownSubjectException {
[javac] ^
[javac]
/home/torstentschroeder/temp/4/concern/embedded-demo/src/java/org/concern/embedded/demo/procurement/process/ProcurementLoader.java:33:
load(java.lang.String) in
org.concern.embedded.demo.procurement.process.ProcurementLoader cannot
implement load(java.lang.String) in org.concern.Loader; overridden method
does not throw org.concern.UnknownSubjectException
[javac] public Object load(String id) throws UnknownSubjectException {
[javac] ^
[javac] 5 errors
BUILD FAILED
/home/torstentschroeder/temp/4/concern/embedded-demo/build.xml:82: Compile
failed; see the compiler error output for details.
</snip>
Thank you in advance
Torsten
|
|
From: Holger E. <he...@me...> - 2005-06-29 06:49:06
|
Multiple (named) calendars is a good idea, cause the definition of
business time
might be different for different actors.
We should move the interpretation of the timeout and retry attributes to the
calendar. The default calendar would support the following lanuage:
60 = 60s -> 60 seconds
10m -> 10 minutes
2d 4h -> 2 days and 4 hours
A business calendar would might understand additional units. for example:
2bd = 2 business days
1bw = 1 business week / about 5bd
The method then looks like:
public long translate(long timestamp, String time);
It's quite similar like your proposal but allows a calendar to define the time
syntax.
Holger
Quoting Andy Depue <an...@ma...>:
> I'm willing to implement this. I could create an interface called, say,
> "TimeUnit":
>
> public interface TimeUnit extends Node
> {
> public long translate(long timestamp, long timevalue);
> }
>
> The main difference here is that Con:cern would pass in whatever value is
> specified in the "timeout" attribute directly, without modifying it in any
> way (for example, I believe it multiplies it by 1000 now in order to convert
> from seconds to millis).
>
> TimeUnits could be registered in the process definition:
>
> <process name="..." subject="...">
> ...
> <timeunit name="business"
> class="com.marathon.workflow.concern.BusinessTimeUnit">
> ... environment entries could go here ...
> </timeunit>
> ...
> </process>
>
> If desired, someone could even install multiple timeunits (with different
> names, of course). Con:cern would always install a default timeunit of
> "seconds", and if no timeunit is specified for an activity then it would use
> "seconds". "seconds" would simply do this:
>
> public class SecondsTimeUnit implements TimeUnit
> {
> ...
> public long translate(long timestamp, long timevalue) {
> return timestamp + (timevalue * 1000);
> }
> ...
> }
>
>
> We could then add an optional "timeunit" attribute to activity:
> <activity name="Review Entry"
> class="com.marathon.workflow.concern.MAsynchronousActivity"
> asynchronous="true" user="true" optional="false" timeout="86400"
> timeunit="business">
>
> Which would lookup the TimeUnit instance based on the name and use it to
> convert from the time value specified in "timeout". Again, if "timeunit" is
> omitted, then "seconds" would be used, which would provide backward
> compatible behavior. The only other question would then be other times (such
> as retry time, etc). Would "timeunit" apply the same to those as well?
>
> - Andy
>
>
> On Tuesday 28 June 2005 09:52 am, Holger Engels wrote:
>> Quoting Andy Depue <an...@ma...>:
>> > I would like the ability to specify some of my timeouts in "business
>> > days".
>>
>> me too! our approach at the moment is, that we ignore the timeout (return
>> from the escalate method without doing anything), if it falls into excluded
>> time. this is exact as long as the excluded period is at least as long as
>> the timeout.
>>
>> my proposal would be to define a calendar interface with a method
>>
>> long translate(long timestamp, long businessMillis)
>>
>> .. you pass in the current timestamp and a delay of 3 * 8 * 3600000 (3d).
>> it will return the same time, but three days later.
>>
>> This also works, if a delay spans multiple excluded periods.
>>
>> regards,
>>
>> Holger
>>
>> > <activity name="Review Entry"
>> > class="com.marathon.workflow.concern.MAsynchronousActivity"
>> > asynchronous="true" user="true" optional="false" timeout="86400">
>> >
>> > timeout="86400" represents 24 hours (1 day), but if this activity is
>> > started at 4:00 PM on Friday, I'd like it to not timeout until 4:00 PM on
>> > Monday. If started at 4:00 PM on Monday, then it should timeout at 4:00
>> > PM on Tuesday, and so on. Has anyone else needed to solve this issue?
>> > If so, what was your approach? Ideally, it would be neat if I could do
>> > something like this:
>> >
>> > <activity name="Review Journal Entry"
>> > class="com.marathon.workflow.concern.MAsynchronousActivity"
>> > asynchronous="true" user="true" optional="false" timeout="86400"
>> > time-unit="business-seconds">
>> >
>> > For now, I'm taking the approach of using an environment variable:
>> >
>> > <activity name="Review Entry"
>> > class="com.marathon.workflow.concern.MAsynchronousActivity"
>> > asynchronous="true" user="true" optional="false" timeout="86400">
>> > <env-enry>
>> > <env-entry-name>time-unit</env-entry-name>
>> > <env-entry-type>java.lang.String</entry-entry-type>
>> > <env-entry-value>business-seconds</entry-entry-value>
>> > </env-entry>
>> > </activity>
>> >
>> > And then manually adjusting the return value of "getTimeout()" from my
>> > AsynchronousActivity implementation.
>> > If this functionality were moved into the Con:cern core, we would
>> > probably want to use an interface that the end-developer can implement,
>> > much like Quartz does. Quartz allows you to handle "business" days via
>> > this interface:
>> >
>> > public interface Calendar {
>> > public boolean isTimeIncluded(long timeStamp);
>> > public long getNextIncludedTime(long timeStamp);
>> > }
>> >
>> > You just do this to adjust time:
>> > long now = System.currentTimeMillis();
>> > if(!calendar.isTimeIncluded(now + timeout)) {
>> > return (calendar.getNextIncludedTime(now + timeout) - now);
>> > } else {
>> > return timeout;
>> > }
>> >
>> >
>> > -------------------------------------------------------
>> > SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
>> > from IBM. Find simple to follow Roadmaps, straightforward articles,
>> > informative Webcasts and more! Get everything you need to get up to
>> > speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click
>> > _______________________________________________
>> > concern-users mailing list
>> > con...@li...
>> > https://lists.sourceforge.net/lists/listinfo/concern-users
>>
>> -------------------------------------------------------
>> SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
>> from IBM. Find simple to follow Roadmaps, straightforward articles,
>> informative Webcasts and more! Get everything you need to get up to
>> speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click
>> _______________________________________________
>> concern-users mailing list
>> con...@li...
>> https://lists.sourceforge.net/lists/listinfo/concern-users
>
>
> -------------------------------------------------------
> SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
> from IBM. Find simple to follow Roadmaps, straightforward articles,
> informative Webcasts and more! Get everything you need to get up to
> speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click
> _______________________________________________
> concern-users mailing list
> con...@li...
> https://lists.sourceforge.net/lists/listinfo/concern-users
>
>
|
|
From: Andy D. <an...@ma...> - 2005-06-28 17:50:52
|
I'm willing to implement this. I could create an interface called, say,
"TimeUnit":
public interface TimeUnit extends Node
{
public long translate(long timestamp, long timevalue);
}
The main difference here is that Con:cern would pass in whatever value is
specified in the "timeout" attribute directly, without modifying it in any
way (for example, I believe it multiplies it by 1000 now in order to convert
from seconds to millis).
TimeUnits could be registered in the process definition:
<process name="..." subject="...">
...
<timeunit name="business"
class="com.marathon.workflow.concern.BusinessTimeUnit">
... environment entries could go here ...
</timeunit>
...
</process>
If desired, someone could even install multiple timeunits (with different
names, of course). Con:cern would always install a default timeunit of
"seconds", and if no timeunit is specified for an activity then it would use
"seconds". "seconds" would simply do this:
public class SecondsTimeUnit implements TimeUnit
{
...
public long translate(long timestamp, long timevalue) {
return timestamp + (timevalue * 1000);
}
...
}
We could then add an optional "timeunit" attribute to activity:
<activity name="Review Entry"
class="com.marathon.workflow.concern.MAsynchronousActivity"
asynchronous="true" user="true" optional="false" timeout="86400"
timeunit="business">
Which would lookup the TimeUnit instance based on the name and use it to
convert from the time value specified in "timeout". Again, if "timeunit" is
omitted, then "seconds" would be used, which would provide backward
compatible behavior. The only other question would then be other times (such
as retry time, etc). Would "timeunit" apply the same to those as well?
- Andy
On Tuesday 28 June 2005 09:52 am, Holger Engels wrote:
> Quoting Andy Depue <an...@ma...>:
> > I would like the ability to specify some of my timeouts in "business
> > days".
>
> me too! our approach at the moment is, that we ignore the timeout (return
> from the escalate method without doing anything), if it falls into excluded
> time. this is exact as long as the excluded period is at least as long as
> the timeout.
>
> my proposal would be to define a calendar interface with a method
>
> long translate(long timestamp, long businessMillis)
>
> .. you pass in the current timestamp and a delay of 3 * 8 * 3600000 (3d).
> it will return the same time, but three days later.
>
> This also works, if a delay spans multiple excluded periods.
>
> regards,
>
> Holger
>
> > <activity name="Review Entry"
> > class="com.marathon.workflow.concern.MAsynchronousActivity"
> > asynchronous="true" user="true" optional="false" timeout="86400">
> >
> > timeout="86400" represents 24 hours (1 day), but if this activity is
> > started at 4:00 PM on Friday, I'd like it to not timeout until 4:00 PM on
> > Monday. If started at 4:00 PM on Monday, then it should timeout at 4:00
> > PM on Tuesday, and so on. Has anyone else needed to solve this issue?
> > If so, what was your approach? Ideally, it would be neat if I could do
> > something like this:
> >
> > <activity name="Review Journal Entry"
> > class="com.marathon.workflow.concern.MAsynchronousActivity"
> > asynchronous="true" user="true" optional="false" timeout="86400"
> > time-unit="business-seconds">
> >
> > For now, I'm taking the approach of using an environment variable:
> >
> > <activity name="Review Entry"
> > class="com.marathon.workflow.concern.MAsynchronousActivity"
> > asynchronous="true" user="true" optional="false" timeout="86400">
> > <env-enry>
> > <env-entry-name>time-unit</env-entry-name>
> > <env-entry-type>java.lang.String</entry-entry-type>
> > <env-entry-value>business-seconds</entry-entry-value>
> > </env-entry>
> > </activity>
> >
> > And then manually adjusting the return value of "getTimeout()" from my
> > AsynchronousActivity implementation.
> > If this functionality were moved into the Con:cern core, we would
> > probably want to use an interface that the end-developer can implement,
> > much like Quartz does. Quartz allows you to handle "business" days via
> > this interface:
> >
> > public interface Calendar {
> > public boolean isTimeIncluded(long timeStamp);
> > public long getNextIncludedTime(long timeStamp);
> > }
> >
> > You just do this to adjust time:
> > long now = System.currentTimeMillis();
> > if(!calendar.isTimeIncluded(now + timeout)) {
> > return (calendar.getNextIncludedTime(now + timeout) - now);
> > } else {
> > return timeout;
> > }
> >
> >
> > -------------------------------------------------------
> > SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
> > from IBM. Find simple to follow Roadmaps, straightforward articles,
> > informative Webcasts and more! Get everything you need to get up to
> > speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click
> > _______________________________________________
> > concern-users mailing list
> > con...@li...
> > https://lists.sourceforge.net/lists/listinfo/concern-users
>
> -------------------------------------------------------
> SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
> from IBM. Find simple to follow Roadmaps, straightforward articles,
> informative Webcasts and more! Get everything you need to get up to
> speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click
> _______________________________________________
> concern-users mailing list
> con...@li...
> https://lists.sourceforge.net/lists/listinfo/concern-users
|
|
From: Holger E. <he...@me...> - 2005-06-28 16:52:21
|
Quoting Andy Depue <an...@ma...>:
> I would like the ability to specify some of my timeouts in "business days".
me too! our approach at the moment is, that we ignore the timeout (return from
the escalate method without doing anything), if it falls into excluded time.
this is exact as long as the excluded period is at least as long as the
timeout.
my proposal would be to define a calendar interface with a method
long translate(long timestamp, long businessMillis)
.. you pass in the current timestamp and a delay of 3 * 8 * 3600000 (3d). it
will return the same time, but three days later.
This also works, if a delay spans multiple excluded periods.
regards,
Holger
> <activity name="Review Entry"
> class="com.marathon.workflow.concern.MAsynchronousActivity"
> asynchronous="true" user="true" optional="false" timeout="86400">
>
> timeout="86400" represents 24 hours (1 day), but if this activity is started
> at 4:00 PM on Friday, I'd like it to not timeout until 4:00 PM on Monday. If
> started at 4:00 PM on Monday, then it should timeout at 4:00 PM on Tuesday,
> and so on. Has anyone else needed to solve this issue? If so, what was your
> approach? Ideally, it would be neat if I could do something like this:
>
> <activity name="Review Journal Entry"
> class="com.marathon.workflow.concern.MAsynchronousActivity"
> asynchronous="true" user="true" optional="false" timeout="86400"
> time-unit="business-seconds">
>
> For now, I'm taking the approach of using an environment variable:
>
> <activity name="Review Entry"
> class="com.marathon.workflow.concern.MAsynchronousActivity"
> asynchronous="true" user="true" optional="false" timeout="86400">
> <env-enry>
> <env-entry-name>time-unit</env-entry-name>
> <env-entry-type>java.lang.String</entry-entry-type>
> <env-entry-value>business-seconds</entry-entry-value>
> </env-entry>
> </activity>
>
> And then manually adjusting the return value of "getTimeout()" from my
> AsynchronousActivity implementation.
> If this functionality were moved into the Con:cern core, we would probably
> want to use an interface that the end-developer can implement, much like
> Quartz does. Quartz allows you to handle "business" days via this interface:
>
> public interface Calendar {
> public boolean isTimeIncluded(long timeStamp);
> public long getNextIncludedTime(long timeStamp);
> }
>
> You just do this to adjust time:
> long now = System.currentTimeMillis();
> if(!calendar.isTimeIncluded(now + timeout)) {
> return (calendar.getNextIncludedTime(now + timeout) - now);
> } else {
> return timeout;
> }
>
>
> -------------------------------------------------------
> SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
> from IBM. Find simple to follow Roadmaps, straightforward articles,
> informative Webcasts and more! Get everything you need to get up to
> speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click
> _______________________________________________
> concern-users mailing list
> con...@li...
> https://lists.sourceforge.net/lists/listinfo/concern-users
>
>
|
|
From: Andy D. <an...@ma...> - 2005-06-28 16:32:56
|
I would like the ability to specify some of my timeouts in "business days".
For example:
<activity name="Review Entry"
class="com.marathon.workflow.concern.MAsynchronousActivity"
asynchronous="true" user="true" optional="false" timeout="86400">
timeout="86400" represents 24 hours (1 day), but if this activity is started
at 4:00 PM on Friday, I'd like it to not timeout until 4:00 PM on Monday. If
started at 4:00 PM on Monday, then it should timeout at 4:00 PM on Tuesday,
and so on. Has anyone else needed to solve this issue? If so, what was your
approach? Ideally, it would be neat if I could do something like this:
<activity name="Review Journal Entry"
class="com.marathon.workflow.concern.MAsynchronousActivity"
asynchronous="true" user="true" optional="false" timeout="86400"
time-unit="business-seconds">
For now, I'm taking the approach of using an environment variable:
<activity name="Review Entry"
class="com.marathon.workflow.concern.MAsynchronousActivity"
asynchronous="true" user="true" optional="false" timeout="86400">
<env-enry>
<env-entry-name>time-unit</env-entry-name>
<env-entry-type>java.lang.String</entry-entry-type>
<env-entry-value>business-seconds</entry-entry-value>
</env-entry>
</activity>
And then manually adjusting the return value of "getTimeout()" from my
AsynchronousActivity implementation.
If this functionality were moved into the Con:cern core, we would probably
want to use an interface that the end-developer can implement, much like
Quartz does. Quartz allows you to handle "business" days via this interface:
public interface Calendar {
public boolean isTimeIncluded(long timeStamp);
public long getNextIncludedTime(long timeStamp);
}
You just do this to adjust time:
long now = System.currentTimeMillis();
if(!calendar.isTimeIncluded(now + timeout)) {
return (calendar.getNextIncludedTime(now + timeout) - now);
} else {
return timeout;
}
|
|
From: Holger E. <he...@me...> - 2005-05-06 06:34:00
|
Quoting Andy Depue <an...@ma...>:
> What do you think of this proposal?
>=20
> Modify org.concern.Log by adding these methods:
>=20
> void setAnnotation(String name, String value);
> String getAnnotation(String name);
> Iterator iterateAnnotationKeys();
>=20
> And for Hibernate's sake:
> Map getAnnotations();
> void setAnnotations(Map annotations);
the map typed setter and getter should be sufficient.
> The same modification will have to be made to org.concern.controller.Lo=
g. If
> I understand the source properly, the same modification will have to be=
made
> to org.concern.controller.Archive as well.
right
> Next, modify the hibernate mapping to accommodate the attributes map (n=
ote,
> the reason I'm limiting it to String keys and String values is to simpl=
ify=20
> the Hibernate mapping).
i agree
> Next, add these methods to the Controller:
> boolean complete(String userValue, String activityName, Map /* <Strin=
g,=20
> String> */ logAnnotations);
> ? any other suggestions ?
ok
> If we want the ability to annotate a log entry after it has already bee=
n=20
> created, then we will need the ability to uniquely identify a particula=
r log
> entry from the client side - probably by adding the Log's id to=20
> org.concern.Log.
no. one should rather identify the activity / event / listener upon submi=
ssion
of the logs.
> Another thought I had was to add annotations to
> org.concern.controller.Subject=20
> (just like above), and provide methods for accessing those annotations =
(or=20
> the Subject instance) from Activities or client code. Then, when a Log=
(and
> later an Archive) is made from the Activity, copy a snapshot of the sub=
ject's
> annotations to the Log. Client code could then annotate the subject ev=
en=20
> during the course of completing an activity. For example, if a supervi=
sor=20
> sent a request back to a user for correction, the client UI could promp=
t the
> supervisor to provide a reason for the need to correct the entry and an=
notate
> the subject with that note. When the subject is later reviewed by the =
user,
> he/she will be able to review the note and correct the subject. In thi=
s=20
> example, we have a sequence of activities like this:
>=20
> 1. User submits the subject.
> 2. Supervisor reviews the subject and sends it back for correction
> 3. User reviews Supervisor's comments, makes corrections, and resubmi=
ts the
>=20
> subject.
>=20
> Now I'll present the same sequence again, only include details on how=20
> annotations might be handled:
>=20
> 1. User submits the subject.
> - Client code sets the annotation "user" to the user's id.
> - The activity completes, and the annotations are copied into the L=
og.=20
>=20
> The Log entry now contains the user id of the user who submitted the
> subject.
> 2. Supervisor reviews the subject and sends it back for correction.
> - Client code sets the annotation "user" to supervisor's id.
> - Client code sets the annotation "comments" to the supervisor's
> comments.
> - The activity completes, and the annotations are copied into the L=
og.=20
>=20
> The Log entry now contains the user id of the supervisor who rejected t=
he=20
> entry and the supervisor's comments.
> 3. User reviews Supervisor's comments, makes corrections, and resubmi=
ts the
> subject.
> - Client code can retrieve the current annotations for the subject =
(as=20
> they stand now) and see the supervisor's comments, and also who the=20
> supervisor was (via the user id).
> - Client code can also look through the log and see the history of=20
> activities performed against the subject, including the annotations as =
they
> existed at the time each of those activities completed.
> - User modifies the subject.
> - Client code sets the annotation "user" to the user's id.
> - The activity completes, and the annotations are copied into the L=
og.
>=20
> You get the idea. Basically, the subject will always contain a "curren=
t"=20
> snapshot of the annotations (much like CVS-HEAD :) ), while the Log wil=
l=20
> contain the history of annotations against the subject. If a subject h=
ad=20
> been sent back for correction several times, the user could see the=20
> supervisor's comments for every time the supervisor sent the subject ba=
ck for
> correction. The system also knows which user was involved in each acti=
vity.=20
>=20
> Of course, this is only an example and there are other applications for
> this.
>=20
> Let me know what you think,
i think, i got the idea. but i think, using the subjects as a temporary l=
og
store is not intutive. as i mentioned above, you are actually attaching t=
he
annotations to a subject-activity relation. furthermore the whole control=
ler api
communicates with strings (and collections thereof), making it easily exp=
osable
with soap, .. . the subject class is not visible from outside the control=
ler yet.
i'd prefer the following api:
public interface org.concern.Controller {
boolean complete(String userValue, String activityName, Map /* <String,=20
> String> */ logAnnotations);
boolean notify(String userValue, String eventName, Map /* <String,=20
> String> */ logAnnotations);
// ...
}
public abstract class org.concern.controller.AbstractSynchronousActivity =
{
// and
public abstract class org.concern.controller.AbstractListener {
void addAnnotation(String name, String value);
// ..
}
regards,
holger
-------------------------------------------------
This mail sent through IMP: http://horde.org/imp/
|
|
From: Andy D. <an...@ma...> - 2005-05-05 23:17:25
|
What do you think of this proposal?
Modify org.concern.Log by adding these methods:
void setAnnotation(String name, String value);
String getAnnotation(String name);
Iterator iterateAnnotationKeys();
And for Hibernate's sake:
Map getAnnotations();
void setAnnotations(Map annotations);
The same modification will have to be made to org.concern.controller.Log. If
I understand the source properly, the same modification will have to be made
to org.concern.controller.Archive as well.
Next, modify the hibernate mapping to accommodate the attributes map (note,
the reason I'm limiting it to String keys and String values is to simplify
the Hibernate mapping).
Next, add these methods to the Controller:
boolean complete(String userValue, String activityName, Map /* <String,
String> */ logAnnotations);
? any other suggestions ?
If we want the ability to annotate a log entry after it has already been
created, then we will need the ability to uniquely identify a particular log
entry from the client side - probably by adding the Log's id to
org.concern.Log.
Another thought I had was to add annotations to org.concern.controller.Subject
(just like above), and provide methods for accessing those annotations (or
the Subject instance) from Activities or client code. Then, when a Log (and
later an Archive) is made from the Activity, copy a snapshot of the subject's
annotations to the Log. Client code could then annotate the subject even
during the course of completing an activity. For example, if a supervisor
sent a request back to a user for correction, the client UI could prompt the
supervisor to provide a reason for the need to correct the entry and annotate
the subject with that note. When the subject is later reviewed by the user,
he/she will be able to review the note and correct the subject. In this
example, we have a sequence of activities like this:
1. User submits the subject.
2. Supervisor reviews the subject and sends it back for correction
3. User reviews Supervisor's comments, makes corrections, and resubmits the
subject.
Now I'll present the same sequence again, only include details on how
annotations might be handled:
1. User submits the subject.
- Client code sets the annotation "user" to the user's id.
- The activity completes, and the annotations are copied into the Log.
The Log entry now contains the user id of the user who submitted the subject.
2. Supervisor reviews the subject and sends it back for correction.
- Client code sets the annotation "user" to supervisor's id.
- Client code sets the annotation "comments" to the supervisor's comments.
- The activity completes, and the annotations are copied into the Log.
The Log entry now contains the user id of the supervisor who rejected the
entry and the supervisor's comments.
3. User reviews Supervisor's comments, makes corrections, and resubmits the
subject.
- Client code can retrieve the current annotations for the subject (as
they stand now) and see the supervisor's comments, and also who the
supervisor was (via the user id).
- Client code can also look through the log and see the history of
activities performed against the subject, including the annotations as they
existed at the time each of those activities completed.
- User modifies the subject.
- Client code sets the annotation "user" to the user's id.
- The activity completes, and the annotations are copied into the Log.
You get the idea. Basically, the subject will always contain a "current"
snapshot of the annotations (much like CVS-HEAD :) ), while the Log will
contain the history of annotations against the subject. If a subject had
been sent back for correction several times, the user could see the
supervisor's comments for every time the supervisor sent the subject back for
correction. The system also knows which user was involved in each activity.
Of course, this is only an example and there are other applications for this.
Let me know what you think,
Andy
On Thursday 05 May 2005 01:44 pm, Holger Engels wrote:
> not yet .. though this would be a valuable addition.
>
> Quoting Andy Depue <an...@ma...>:
> > I notice that Con:cern keeps a log of activity against a subject, which
> > is great. I would like to record additional information, such as who
> > performed
> >
> > the activity, etc. Would the best approach be to record that information
> > myself apart from con:cern, or does con:cern already provide some
> > mechanism
> >
> > to record additional information in relation to the log or an activity
> > performed?
> >
> > Thanks,
> > Andy
|
|
From: Holger E. <he...@me...> - 2005-05-05 20:44:40
|
not yet .. though this would be a valuable addition. Quoting Andy Depue <an...@ma...>: > I notice that Con:cern keeps a log of activity against a subject, which= is=20 > great. I would like to record additional information, such as who perf= ormed >=20 > the activity, etc. Would the best approach be to record that informati= on=20 > myself apart from con:cern, or does con:cern already provide some mecha= nism >=20 > to record additional information in relation to the log or an activity=20 > performed? >=20 > Thanks, > Andy >=20 >=20 > ------------------------------------------------------- > This SF.Net email is sponsored by: NEC IT Guy Games. > Get your fingers limbered up and give it your best shot. 4 great events= , 4 > opportunities to win big! Highest score wins.NEC IT Guy Games. Play to > win an NEC 61 plasma display. Visit http://www.necitguy.com/?r=3D20 > _______________________________________________ > concern-users mailing list > con...@li... > https://lists.sourceforge.net/lists/listinfo/concern-users >=20 >=20 Holger Engels (Dipl Inf Med) -- Consultant, Architect, Developer Mobile: +49 176 20119752 ------------------------------------------------- This mail sent through IMP: http://horde.org/imp/ |
|
From: Andy D. <an...@ma...> - 2005-05-05 18:38:13
|
I notice that Con:cern keeps a log of activity against a subject, which is great. I would like to record additional information, such as who performed the activity, etc. Would the best approach be to record that information myself apart from con:cern, or does con:cern already provide some mechanism to record additional information in relation to the log or an activity performed? Thanks, Andy |
|
From: Andy D. <an...@ma...> - 2005-05-02 19:09:47
|
There is nothing wrong with the term Subject. I used "case" simply because in my idea I was augmenting the subject with additional information. I pictured a folder with the subject and additional related information contained in it, which then seemed more like a case. The "case folder" contains the subject (with additional annotations as well). I really don't care too much which term is used. :) As for the storing of generic information, I think I would prefer options 1 or 5. I'm planning on implementing #5 in my code. As far as con:cern is concerned, my "subject" will be CaseFolder. My loader will take care of "stuffing" the CaseFolder with the actual subject and related annotations. - Andy On Monday 02 May 2005 01:29 am, Holger Engels wrote: > Hi andy, > > first of all: > > o con:cern does not address this issue yet > o of course, it's not a bad idea > > then some questions about the terminology used in concern, because you seem > to prefer the term case over subject: > > o is subject (as a short form of subject matter) a good term? > o is modeller a good term? > o are there any other strange terms in con:cern? > > I'm thinking about a store for generic information with the subject for > some time now. I can see different approaches and I'm not able to decide, > which on suites best. Maybe you can help me .. > > 1. named loaders > > a process can have several named loaders in parallel that load different > aspects of the subject. a condition then should refer to the respective > aspect. In a script, this could be somthing like "annotations.approved" > versus "bo.approved". alternatively both could be called with a subject > map. > > 2. named loaders 2 > > the conditions and activities in process are associated with an aspect. The > implementations are then called with the respective aspect. > > 3. derivation > > you could derivate a class <processname>JournalEntry from JournalEntry. So > you would address the issue with hibernate's capabilities. > > 4. dynamic components > > another hibernate only solution: > > http://www.hibernate.org/hib_docs/v3/reference/en/html/components.html#comp >onents-dynamic > > 5. loader based solution > > as you described or somewhow similar. > > 3 and 4 assumes, that every reasonable subject store provides some means to > store unstructured information with business objects. The advantage is, > that the unstructured inforation can be queried along with the business > object's information, so that you can easily implement filters for dynamic > worklists. > > The advantage of 1 and 5 is, that there is a standard way, how to store > process relevant information associated to a subject. This is especially > helpful, if your subject store can not store unstructured information. The > disadvantage is, that different parts of the process relevant information > will have to be handled differently (maybe inefficiently) by dynamic > worklists. > > Approach 5 can be implemented as an intelligent loader without any > modifications to the rest of concern. > > Regards, > > > Holger |
|
From: Holger E. <he...@me...> - 2005-05-02 08:29:18
|
Hi andy, first of all: o con:cern does not address this issue yet o of course, it's not a bad idea then some questions about the terminology used in concern, because you se= em to prefer the term case over subject: o is subject (as a short form of subject matter) a good term? o is modeller a good term? o are there any other strange terms in con:cern? I'm thinking about a store for generic information with the subject for s= ome time now. I can see different approaches and I'm not able to decide, whic= h on suites best. Maybe you can help me .. 1. named loaders a process can have several named loaders in parallel that load different = aspects of the subject. a condition then should refer to the respective aspect. I= n a script, this could be somthing like "annotations.approved" versus "bo.app= roved". alternatively both could be called with a subject map. 2. named loaders 2 the conditions and activities in process are associated with an aspect. T= he implementations are then called with the respective aspect. 3. derivation you could derivate a class <processname>JournalEntry from JournalEntry. S= o you would address the issue with hibernate's capabilities. 4. dynamic components another hibernate only solution: http://www.hibernate.org/hib_docs/v3/reference/en/html/components.html#co= mponents-dynamic 5. loader based solution as you described or somewhow similar. 3 and 4 assumes, that every reasonable subject store provides some means = to store unstructured information with business objects. The advantage is, t= hat the unstructured inforation can be queried along with the business object's information, so that you can easily implement filters for dynamic worklis= ts. The advantage of 1 and 5 is, that there is a standard way, how to store p= rocess relevant information associated to a subject. This is especially helpful,= if your subject store can not store unstructured information. The disadvanta= ge is, that different parts of the process relevant information will have to be = handled differently (maybe inefficiently) by dynamic worklists. Approach 5 can be implemented as an intelligent loader without any modifi= cations to the rest of concern. Regards, Holger Quoting Andy Depue <an...@ma...>: > As I look into using con:cern with our product, I'm tempted to employ a= n idea > and thought I'd bounce it off others to see if it makes sense. A "case= " can > sometimes have state that you really don't want to infect your object m= odel > (subject) with. For example, say you have a JournalEntry class in your= =20 > object model (and, of course, use Hibernate for ORM :) A user submits = a=20 > JournalEntry, which then must be approved by an accountant and a manage= r. =20 > The JournalEntry enters into a process as the subject of the case. If = the=20 > JournalEntry is NOT approved, then the accountant/manager rejecting the= entry >=20 > can send it back to the user for correction, along with a note. OK, so= I=20 > might be willing to let the approval and other flags be in my actual=20 > JournalEntry (isApproved(), etc). But I really don't want the correcti= on=20 > note sent from the accountant/manager to the user to be in the JournalE= ntry.=20 >=20 > So, I'm thinking of creating a "CaseFolder" class that looks something = like >=20 > this (as an example): >=20 > interface CaseFolder > { > Object getSubject(); > Object getAnnotation(String key); > void setAnnotation(String key, Object value); > } >=20 > Basically, this wraps the actual subject and allows "annotations" to be= =20 > inserted into the folder along with the subject of the case. An annota= tion >=20 > is just a generic property, really, and is used to pass around informat= ion=20 > related to the case/subject that is not a part of the actual case/subje= ct=20 > (such as the rejection note). The process model would then be built ar= ound >=20 > the CaseFolder instead of the JournalEntry directly. My "Approved" con= dition >=20 > in the process model would go from: >=20 > public boolean eval(JournalEntry subject) > { > return subject.isApproved(); > } >=20 > to: >=20 > public boolean eval(CaseFolder subject) > { > return ((JournalEntry)subject.getSubject()).isApproved(); > } >=20 > Or, if I decide that I don't want the approve flag stored in my object > model: >=20 > public boolean eval(CaseFolder subject) > { > return subject.getAnnotation(KEY_APPROVED) =3D=3D Boolean.TRUE; > } >=20 > The client could access the rejection note like this: > String rejectionNote =3D > (String)caseFolder.getAnnotation(KEY_REJECTION_NOTE); >=20 > My "Loader" implementation would return instances of this CaseFolder st= uffed >=20 > with the JournalEntry instead of the JournalEntry directly and would al= so=20 > handle persisting the annotations along with any changes to the > JournalEntry. >=20 > Does con:cern already address this issue? Is this a bad idea? >=20 > Thanks, > Andy >=20 >=20 > ------------------------------------------------------- > This SF.Net email is sponsored by: NEC IT Guy Games. > Get your fingers limbered up and give it your best shot. 4 great events= , 4 > opportunities to win big! Highest score wins.NEC IT Guy Games. Play to > win an NEC 61 plasma display. Visit http://www.necitguy.com/?r=3D20 > _______________________________________________ > concern-users mailing list > con...@li... > https://lists.sourceforge.net/lists/listinfo/concern-users >=20 >=20 Holger Engels (Dipl Inf Med) -- Consultant, Architect, Developer Mobile: +49 176 20119752 ------------------------------------------------- This mail sent through IMP: http://horde.org/imp/ |
|
From: Andy D. <an...@ma...> - 2005-04-29 16:23:50
|
As I look into using con:cern with our product, I'm tempted to employ an idea
and thought I'd bounce it off others to see if it makes sense. A "case" can
sometimes have state that you really don't want to infect your object model
(subject) with. For example, say you have a JournalEntry class in your
object model (and, of course, use Hibernate for ORM :) A user submits a
JournalEntry, which then must be approved by an accountant and a manager.
The JournalEntry enters into a process as the subject of the case. If the
JournalEntry is NOT approved, then the accountant/manager rejecting the entry
can send it back to the user for correction, along with a note. OK, so I
might be willing to let the approval and other flags be in my actual
JournalEntry (isApproved(), etc). But I really don't want the correction
note sent from the accountant/manager to the user to be in the JournalEntry.
So, I'm thinking of creating a "CaseFolder" class that looks something like
this (as an example):
interface CaseFolder
{
Object getSubject();
Object getAnnotation(String key);
void setAnnotation(String key, Object value);
}
Basically, this wraps the actual subject and allows "annotations" to be
inserted into the folder along with the subject of the case. An annotation
is just a generic property, really, and is used to pass around information
related to the case/subject that is not a part of the actual case/subject
(such as the rejection note). The process model would then be built around
the CaseFolder instead of the JournalEntry directly. My "Approved" condition
in the process model would go from:
public boolean eval(JournalEntry subject)
{
return subject.isApproved();
}
to:
public boolean eval(CaseFolder subject)
{
return ((JournalEntry)subject.getSubject()).isApproved();
}
Or, if I decide that I don't want the approve flag stored in my object model:
public boolean eval(CaseFolder subject)
{
return subject.getAnnotation(KEY_APPROVED) == Boolean.TRUE;
}
The client could access the rejection note like this:
String rejectionNote = (String)caseFolder.getAnnotation(KEY_REJECTION_NOTE);
My "Loader" implementation would return instances of this CaseFolder stuffed
with the JournalEntry instead of the JournalEntry directly and would also
handle persisting the annotations along with any changes to the JournalEntry.
Does con:cern already address this issue? Is this a bad idea?
Thanks,
Andy
|
|
From: Holger E. <he...@me...> - 2005-04-29 06:53:56
|
Quoting Andy Depue <an...@ma...>: > I'm curious if anyone here is aware of an article or whitepaper that mi= ght=20 > describe some of the ideas behind con:cern? At the moment, I'm attempt= ing to >=20 > absorb as much as possible via google translations (german to english),= =20 > source code, and the examples. This is a little challenging. I unders= tand >=20 > basic ideas, but feel like I'm missing the "big picture", so to speak. >=20 > As an example, I keep running into something that clues me in to the fa= ct > that=20 > I'm probably not understanding pre/postconditions. I'm looking at some= =20 > example models and often see this kind of thing (as a postcondition in = this >=20 > case): >=20 > ((genehmigt || !genehmigt) && entschieden) > For the help of english speakers, here is the google translation: > ((approved || !approved) && decided) >=20 > 'genehmigt' (approved) is a boolean, no? Then the test (genehmigt=20 > || !genehmigt) will always be true, so why include it at all? What am = I=20 > missing here? These are boolean, right and the expression is allways true. This is only= the graphical arrangement. Of yourse, if you ommit all postconditions, the pr= ocess will still work. In some cases, postconditions are important in order to validate the execution result. In other cases, like this one, it's only a= bout the graphical arrangement. > Also, one thing I'm beginning to infer is that because con:cern is subj= ect=20 > based, it has no need for process instances. For example, in OSWorkflo= w I=20 > would specifically instantiate an approval process. There may be many=20 > "instances" of that one process in play at any given moment, all in var= ious >=20 > states. Am I correct that con:cern is centered around subject instance= s, not >=20 > process instances? So, instead of instantiating a new approval process= , I=20 > instead introduce a new subject instance (in an unapproved state) into=20 > con:cern, and it automatically begins the approval process for that new= =20 > instance? right. the state is basically a function of the subject's properties. In = os workflow, the process state can be incosistent with the process instance = data. in con:cern, you can manipulate the subject arbitrarily (undo, manual intervention, ..) and the process will always continue correctly accordin= g to the subject's state. > Thanks for any aid as I continue to wrap my mind around con:cern despit= e the >=20 > language barrier. :) I have translated the slides of a presentation, I held lately on the gse = meeting at ibm .. attachment. Regards, Holger Engels (Dipl Inf Med) -- Consultant, Architect, Developer Mobile: +49 176 20119752 ------------------------------------------------- This mail sent through IMP: http://horde.org/imp/ |
|
From: Andy D. <an...@ma...> - 2005-04-28 17:42:29
|
I'm curious if anyone here is aware of an article or whitepaper that might
describe some of the ideas behind con:cern? At the moment, I'm attempting to
absorb as much as possible via google translations (german to english),
source code, and the examples. This is a little challenging. I understand
basic ideas, but feel like I'm missing the "big picture", so to speak.
As an example, I keep running into something that clues me in to the fact that
I'm probably not understanding pre/postconditions. I'm looking at some
example models and often see this kind of thing (as a postcondition in this
case):
((genehmigt || !genehmigt) && entschieden)
For the help of english speakers, here is the google translation:
((approved || !approved) && decided)
'genehmigt' (approved) is a boolean, no? Then the test (genehmigt
|| !genehmigt) will always be true, so why include it at all? What am I
missing here?
Also, one thing I'm beginning to infer is that because con:cern is subject
based, it has no need for process instances. For example, in OSWorkflow I
would specifically instantiate an approval process. There may be many
"instances" of that one process in play at any given moment, all in various
states. Am I correct that con:cern is centered around subject instances, not
process instances? So, instead of instantiating a new approval process, I
instead introduce a new subject instance (in an unapproved state) into
con:cern, and it automatically begins the approval process for that new
instance?
Thanks for any aid as I continue to wrap my mind around con:cern despite the
language barrier. :)
- Andy
|
|
From: Andy D. <an...@ma...> - 2005-04-27 16:02:14
|
Thanks for your responses, Holger! =A0This is very helpful (and encouraging= ). =A0 - Andy |
|
From: Holger E. <he...@me...> - 2005-04-27 07:32:17
|
Quoting Andy Depue <an...@ma...>: > Hello, > I'm currently in the process of evaluating workflow solutions for our= =20 > product and have some questions about con:cern. First, how hard do you= think >=20 > it will be for an English only reading/speaking developer to get acquai= nted > with con:cern? Hm, there's no documentation in english beside a few javadoc comments in = the package org.concern. However, I can guide you a little, respond to questi= ons, .. > Second, how active is the con:cern project? Very active. We're using it as a part of some of our products. Integratio= n with our erp suite is in the works. An integration workshop with tarend octopo= s will be held in may. I'm currently porting the kernel to hibernate 3. ... > Third, how do you handle "compensation" in con:cern? Some workflow eng= ines > provide the ability to undo actions, others provide the ability to defi= ne > compensating branches to execute in the case of an error, etc. o escalations after error / timeout can compensate problems programmatica= lly. whenever a asynchronous activity times out or a synchronous activity fa= ils permanently, the activitie's escalate method is called. for example: we= 're forwarding approval requests to the superior automatically, if the assi= gnee misses to handle it in time. o the kernel evaluates the state of the subject matter in order to decide= , what activity should be executed next. If you change the subject, the workflow will always react correctly according to the current state. th= us you can undo everything, if you just rollback the subject to some older state. a good practice is keeping a history of the subject's state. > Fourth, how well will con:cern integrate with a Swing based rich client= ? In > our arrangement, there will be a server (across the internet) that driv= es > the workflow. When a user logs in (via their Swing rich client), they = will > be able to pull up a task list containing tasks waiting for human > intervention. Of course, these tasks will be from workflows that are > currently in progress. Very well. expose the kernel interface (org.concern.Controller) with what= ever remoting technology, you like (RMI, SOAP, ..). The interface is completel= y string based. > Fifth, what kind of support does con:cern provide for assigning tasks/s= teps/ > actions/whatever to a particular role, group, or user? What would be r= eally > cool is if con:cern even went farther than that and provided a way to q= uery > outstanding tasks by various criteria (role, department, etc). The controller provides what we call "activity lists". It only cares, whi= ch asynchronous (user) activites have to be executed next. It's the worklist= 's (package org.concern.client) responsibility to assign these tasks to some actor. The UserRoleWorklist is based on a static relation between activit= ies and users / roles. The FilterWorklist queries the subject for various criteria to determine, if it should be included in the tasklist (is this really cool ;-) .. of course you can write a different implementations, = that - let's say - queries the weather forecast in order to shrink down the ta= sk list reasonably ;-) Kind regards, Holger Engels (Dipl Inf Med) -- Consultant, Architect, Developer Mobile: +49 176 20119752 ------------------------------------------------- This mail sent through IMP: http://horde.org/imp/ |
|
From: Andy D. <an...@ma...> - 2005-04-26 18:43:28
|
Hello, I'm currently in the process of evaluating workflow solutions for our product and have some questions about con:cern. First, how hard do you think it will be for an English only reading/speaking developer to get acquainted with con:cern? Second, how active is the con:cern project? Third, how do you handle "compensation" in con:cern? Some workflow engines provide the ability to undo actions, others provide the ability to define compensating branches to execute in the case of an error, etc. Fourth, how well will con:cern integrate with a Swing based rich client? In our arrangement, there will be a server (across the internet) that drives the workflow. When a user logs in (via their Swing rich client), they will be able to pull up a task list containing tasks waiting for human intervention. Of course, these tasks will be from workflows that are currently in progress. Fifth, what kind of support does con:cern provide for assigning tasks/steps/actions/whatever to a particular role, group, or user? What would be really cool is if con:cern even went farther than that and provided a way to query outstanding tasks by various criteria (role, department, etc). Thanks, Andy |
|
From: Holger E. <he...@me...> - 2004-09-13 12:26:41
|
Hi there, I am pleased to announce the availability of two valuable graph analyzation tools developed by Patrick Schmidt. o the analyzer detects cycles and states, wether a cycle is reachable and / or leavable o the gantt diagram generator creates gantt diagrams from non cyclic process graphs. a future version of it could treat cycles as "compound activities" and thus support graphs with cycles, too. Thanks to Patrick for his great work!! o any volunteer to code a tool that shows possible execution orders ;-) Regards, Holger Engels (Dipl Inf Med) -- Consultant, Architect, Developer Mobile: +49 176 20119752 ------------------------------------------------- This mail sent through IMP: http://horde.org/imp/ |
|
From: Holger E. <he...@me...> - 2004-09-03 11:41:53
|
There's a generator ant task available now. the j2ee is using it like this:
<concern>
<fileset dir="src/cpd" includes="*.cpd"/>
<artifact name="process/java.xsl" targetDirectory="build/template"/>
<artifact name="process/process-cpd.xsl" targetDirectory="build/src/meta"/>
</concern>
It's just making things easier
Holger
-------------------------------------------------
This mail sent through IMP: http://horde.org/imp/
|
|
From: Holger E. <he...@me...> - 2004-08-16 17:02:09
|
The j2ee demo build script is arranging jmx deployment on jboss now. Now, I'm quite satisfied with all the integration stuff .. some more tests, then it's time for a new release. I'm not sure, if we should call it 1.2 or 2.0 ? Holger Quoting Holger Engels <he...@me...>: > I did the jmx integration this weekend. Controllers can now be deployed as > MBeans. All controller methods are exposed and can thus be called from within > a > jmx console. For JBoss, there is a RMI proxy available. It is currently used > by > the (command line) client. > > For JBoss create a sar with the following layout: > > - engagement.sar > |-- META-INF > | |-- concern-process.xml > | `-- jboss-service.xml > `-- org > `-- concern > `-- test > `-- engagement > `-- engagement > |-- AdvertisedExternally.class > |-- AdvertisedInternally.class > |-- AllApplicationsDestroyed.class > |-- Close.class > |-- Closed.class > |-- DestroyApplicationIn.class > |-- DestroyApplicationOut.class > |-- EngagementLoader.class > |-- ExternalAdvertising.class > |-- InternalAdvertising.class > `-- TakeUpJobApplication.class > > The jboss-service.xml might look like this: > > <?xml version="1.0" encoding="UTF-8"?> > > <server> > > <mbean code="org.concern.controller.jmx.ControllerService" > name="jboss.concern:name=EngagementController"> > <depends>jboss:service=TransactionManager</depends> > <depends>jboss.jca:service=LocalTxCM,name=DefaultDS</depends> > > <attribute name="JndiName">java:controller/Engagement</attribute> > <attribute name="UserTransactionName">UserTransaction</attribute> > <attribute > name="TransactionManagerLookupStrategy">net.sf.hibernate.transaction.JBossTransactionManagerLookup</attribute> > > <attribute name="Datasource">java:DefaultDS</attribute> > <attribute > name="Dialect">net.sf.hibernate.dialect.HSQLDialect</attribute> > <attribute > name="CacheProvider">net.sf.ehcache.hibernate.Provider</attribute> > > <attribute name="ShowSql">true</attribute> > <attribute name="HbmToDdlAuto">create</attribute> > </mbean> > > </server> > > This is: > > o a dependency on the TransactionManager and the DataSource > o a JNDI name > o hibernate configuration > > > I will add jmx deployment on jboss (and maybe tomcat) by option for the > j2ee-demo build scripts. > > > Holger Engels > (Dipl Inf Med) > > -- > Consultant, Architect, Developer > Mobile: +49 176 20119752 > > > ------------------------------------------------- > This mail sent through IMP: http://horde.org/imp/ > > > ------------------------------------------------------- > SF.Net email is sponsored by Shop4tech.com-Lowest price on Blank Media > 100pk Sonic DVD-R 4x for only $29 -100pk Sonic DVD+R for only $33 > Save 50% off Retail on Ink & Toner - Free Shipping and Free Gift. > http://www.shop4tech.com/z/Inkjet_Cartridges/9_108_r285 > _______________________________________________ > Concern-users mailing list > Con...@li... > https://lists.sourceforge.net/lists/listinfo/concern-users > > Holger Engels (Dipl Inf Med) -- Consultant, Architect, Developer Mobile: +49 176 20119752 ------------------------------------------------- This mail sent through IMP: http://horde.org/imp/ |
|
From: Holger E. <he...@me...> - 2004-08-16 08:03:40
|
Hi,
I did the jmx integration this weekend. Controllers can now be deployed as
MBeans. All controller methods are exposed and can thus be called from within a
jmx console. For JBoss, there is a RMI proxy available. It is currently used by
the (command line) client.
For JBoss create a sar with the following layout:
- engagement.sar
|-- META-INF
| |-- concern-process.xml
| `-- jboss-service.xml
`-- org
`-- concern
`-- test
`-- engagement
`-- engagement
|-- AdvertisedExternally.class
|-- AdvertisedInternally.class
|-- AllApplicationsDestroyed.class
|-- Close.class
|-- Closed.class
|-- DestroyApplicationIn.class
|-- DestroyApplicationOut.class
|-- EngagementLoader.class
|-- ExternalAdvertising.class
|-- InternalAdvertising.class
`-- TakeUpJobApplication.class
The jboss-service.xml might look like this:
<?xml version="1.0" encoding="UTF-8"?>
<server>
<mbean code="org.concern.controller.jmx.ControllerService"
name="jboss.concern:name=EngagementController">
<depends>jboss:service=TransactionManager</depends>
<depends>jboss.jca:service=LocalTxCM,name=DefaultDS</depends>
<attribute name="JndiName">java:controller/Engagement</attribute>
<attribute name="UserTransactionName">UserTransaction</attribute>
<attribute
name="TransactionManagerLookupStrategy">net.sf.hibernate.transaction.JBossTransactionManagerLookup</attribute>
<attribute name="Datasource">java:DefaultDS</attribute>
<attribute name="Dialect">net.sf.hibernate.dialect.HSQLDialect</attribute>
<attribute name="CacheProvider">net.sf.ehcache.hibernate.Provider</attribute>
<attribute name="ShowSql">true</attribute>
<attribute name="HbmToDdlAuto">create</attribute>
</mbean>
</server>
This is:
o a dependency on the TransactionManager and the DataSource
o a JNDI name
o hibernate configuration
I will add jmx deployment on jboss (and maybe tomcat) by option for the
j2ee-demo build scripts.
Holger Engels
(Dipl Inf Med)
--
Consultant, Architect, Developer
Mobile: +49 176 20119752
-------------------------------------------------
This mail sent through IMP: http://horde.org/imp/
|