01: /*
02: * This file is part of the WfMOpen project.
03: * Copyright (C) 2001-2004 Danet GmbH (www.danet.de), GS-AN.
04: * All rights reserved.
05: *
06: * This program is free software; you can redistribute it and/or modify
07: * it under the terms of the GNU General Public License as published by
08: * the Free Software Foundation; either version 2 of the License, or
09: * (at your option) any later version.
10: *
11: * This program is distributed in the hope that it will be useful,
12: * but WITHOUT ANY WARRANTY; without even the implied warranty of
13: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14: * GNU General Public License for more details.
15: *
16: * You should have received a copy of the GNU General Public License
17: * along with this program; if not, write to the Free Software
18: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19: *
20: * $Id: DirectInvocable.java,v 1.2 2006/09/29 12:32:09 drmlipp Exp $
21: *
22: * $Log: DirectInvocable.java,v $
23: * Revision 1.2 2006/09/29 12:32:09 drmlipp
24: * Consistently using WfMOpen as projct name now.
25: *
26: * Revision 1.1.1.1 2004/08/18 15:17:39 drmlipp
27: * Update to 1.2
28: *
29: * Revision 1.3 2004/07/14 14:54:37 lipp
30: * Restrictions for being direct invocable relaxed a bit.
31: *
32: * Revision 1.2 2004/04/13 14:33:57 lipp
33: * Clarify comment.
34: *
35: * Revision 1.1 2004/04/12 19:33:52 lipp
36: * Clarified application invocation interface.
37: *
38: */
39: package de.danet.an.workflow.tools.util;
40:
41: /**
42: * This interface marks a tool agent as requiring no or only read-only
43: * access to the activity passed to {@link
44: * de.danet.an.workflow.spis.aii.ToolAgent#invoke
45: * <code>invoke</code>}. <P>
46: *
47: * The issue arises from the necessity to invoke the tool agent in its
48: * own transaction. In order to provide the tool agent with full
49: * access to the activity, the activity must not be involved in
50: * another transaction. However, as tool agent invocation obviously
51: * updates the state of the activity, the activity (having its state
52: * updated) is involved in a transaction when the tool agent is
53: * invoked. To resolve this, WfMOpen does not invoke the tool agent
54: * directly. Rather, its sends a message to a tool agent invocation
55: * queue as part of the state update transaction and completes the
56: * transaction. The message is then retrieved from the queue and the
57: * tool agent is invoked without involving the activity in the message
58: * handling transaction.<P>
59: *
60: * Of course, this induces a considerable overhead which can be
61: * avoided if the tool agent accesses the activity not at all or uses
62: * only the methods <code>key</code>, <code>activityUniqueKey</code>
63: * or <code>container</code>. Experience shows that this is true for a
64: * lot of tool agents; either because they let an application running
65: * in another thread or process do the work, or because they use the
66: * <code>ResultProvider</code> interface and do not require access to
67: * the activity. If a tool agent satisfies these criteria, it may make
68: * this known to the workflow engine by implementing this marker
69: * interface. If a tool agent implements this interface, the engine
70: * does not put a message on the tool invocation queue but rather
71: * invokes the tool agent directly during state update. <P>
72: *
73: * Note that since the activity is involved in the state update
74: * transaction, the engine cannot call <code>setResult</code> and
75: * <code>complete</code> in a new transaction after tool agent
76: * invocation. Rather, these methods will be called in the same
77: * transaction as the tool agent invocation. Thus if
78: * <code>RemoteException</code>s occur when these methods are called
79: * by the workflow engine, the complete transaction, including the
80: * tool invocation, will be repeated. Tools that are "expensive" to
81: * execute or have side effects should not implement
82: * <code>DirectInvocable</code>.
83: *
84: * @author <a href="mailto:mnl@mnl.de">Michael N. Lipp</a>
85: * @version $Revision: 1.2 $
86: */
87:
88: public interface DirectInvocable {
89: }
|