001: /*
002: * This file is part of the WfMOpen project.
003: * Copyright (C) 2001-2003 Danet GmbH (www.danet.de), GS-AN.
004: * All rights reserved.
005: *
006: * This program is free software; you can redistribute it and/or modify
007: * it under the terms of the GNU General Public License as published by
008: * the Free Software Foundation; either version 2 of the License, or
009: * (at your option) any later version.
010: *
011: * This program is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
014: * GNU General Public License for more details.
015: *
016: * You should have received a copy of the GNU General Public License
017: * along with this program; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
019: *
020: * $Id: ExtApplication.java,v 1.1 2007/05/03 21:58:21 mlipp Exp $
021: *
022: * $Log: ExtApplication.java,v $
023: * Revision 1.1 2007/05/03 21:58:21 mlipp
024: * Internal refactoring for making better use of local EJBs.
025: *
026: */
027: package de.danet.an.workflow.internalapi;
028:
029: import java.io.Serializable;
030:
031: import java.rmi.RemoteException;
032: import java.util.Map;
033:
034: import de.danet.an.workflow.api.Activity;
035: import de.danet.an.workflow.api.Application;
036:
037: import de.danet.an.workflow.spis.aii.ApplicationNotStoppedException;
038: import de.danet.an.workflow.spis.aii.ToolAgentContext;
039:
040: /**
041: * This interface defines additional methods for applications
042: * used by the implementation classes.
043: *
044: * @author <a href="mailto:lipp@danet.de">Michael Lipp</a>
045: * @version $Revision: 1.1 $
046: */
047:
048: public interface ExtApplication extends Application {
049:
050: /**
051: * Returned by {@link #invoke <code>invoke</code>} if the tool
052: * agent returns a result.
053: */
054: public static class InvocationResult implements Serializable {
055: private Object res;
056:
057: /**
058: * Create a new invocation result with the given value.
059: * @param result the result
060: */
061: public InvocationResult(Object result) {
062: res = result;
063: }
064:
065: /**
066: * Return the result value passed to the constructor.
067: * @return the result
068: */
069: public Object result() {
070: return res;
071: }
072: }
073:
074: /**
075: * Invokes the application for the specific activity.
076: *
077: * @param agentContext the context to pass to the tool agent
078: * agent
079: * @param activity the activity to be executed
080: * @param params the invokation parameters
081: * @return the invocation result if the tool agent provides one
082: * (i.e. implements <code>ResultProvider</code>), else <code>null</code>
083: * @throws ToolInvocationException if execution is not possible
084: * @throws RemoteException if a temporary problem occurs and we
085: * should retry the tool invocation. (Usually thrown when a
086: * deadlock situation occurs while accessing the activity.)
087: */
088: InvocationResult invoke(ToolAgentContext agentContext,
089: Activity activity, Map params)
090: throws ToolInvocationException, RemoteException;
091:
092: /**
093: * Terminates the application for the specific activity.
094: *
095: * @param activity the activity
096: * @throws ApplicationNotStoppedException if execution is not possible
097: * @throws RemoteException if a temporary problem occurs and we
098: * should retry the tool invocation. (Usually thrown when a
099: * deadlock situation occurs while accessing the activity.)
100: */
101: void terminate(Activity activity)
102: throws ApplicationNotStoppedException, RemoteException;
103:
104: /**
105: * Return <code>true</code> is the tool agent implements {@link
106: * de.danet.an.workflow.tools.util.DirectInvocable
107: * <code>DirectInvocable</code>}.
108: *
109: * @return the result
110: */
111: boolean isDirectInvocable();
112: }
|