001    /**
002     * Copyright (c) 2010 Yahoo! Inc. All rights reserved.
003     * Licensed under the Apache License, Version 2.0 (the "License");
004     * you may not use this file except in compliance with the License.
005     * You may obtain a copy of the License at
006     *
007     *   http://www.apache.org/licenses/LICENSE-2.0
008     *
009     *  Unless required by applicable law or agreed to in writing, software
010     *  distributed under the License is distributed on an "AS IS" BASIS,
011     *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012     *  See the License for the specific language governing permissions and
013     *  limitations under the License. See accompanying LICENSE file.
014     */
015    package org.apache.oozie.workflow;
016    
017    import org.apache.hadoop.conf.Configuration;
018    
019    
020    /**
021     * The workflow library provides application parsing and storage capabilities for workflow instances. <p/> The
022     * implementation is responsible for doing the store operations in a transactional way, either in autocommit or within
023     * the scope of a transaction.
024     */
025    public interface WorkflowLib {
026    
027        /**
028         * Parse a workflow application definition.
029         *
030         * @param wfXml string containing the workflow definition.
031         * @return the parse workflow application.
032         * @throws WorkflowException thrown if the definition could not be parsed.
033         */
034        public WorkflowApp parseDef(String wfXml) throws WorkflowException;
035    
036    
037        /**
038         * Create a workflow instance.
039         *
040         * @param app application to create a workflow instance of.
041         * @param conf job configuration.
042         * @return the newly created workflow instance.
043         * @throws WorkflowException thrown if the instance could not be created.
044         */
045        public WorkflowInstance createInstance(WorkflowApp app, Configuration conf) throws WorkflowException;
046    
047        /**
048         * Create a workflow instance with the given wfId. This will be used for re-running workflows.
049         *
050         * @param app application to create a workflow instance of.
051         * @param conf job configuration.
052         * @param wfId Workflow ID.
053         * @return the newly created workflow instance.
054         * @throws WorkflowException thrown if the instance could not be created.
055         */
056        public WorkflowInstance createInstance(WorkflowApp app, Configuration conf, String wfId) throws WorkflowException;
057    
058        /**
059         * Insert a workflow instance in storage.
060         *
061         * @param instance of the workflow instance to insert.
062         * @throws WorkflowException thrown if the instance could not be inserted.
063         */
064        public void insert(WorkflowInstance instance) throws WorkflowException;
065    
066        /**
067         * Load a workflow instance from storage.
068         *
069         * @param id ID of the workflow instance to load.
070         * @return the loaded workflow instance.
071         * @throws WorkflowException thrown if the instance could not be loaded.
072         */
073        public WorkflowInstance get(String id) throws WorkflowException;
074    
075        /**
076         * Update a workflow instance in storage.
077         *
078         * @param instance workflow instance to update.
079         * @throws WorkflowException thrown if the instance could not be loaded.
080         */
081        public void update(WorkflowInstance instance) throws WorkflowException;
082    
083        /**
084         * Delete a workflow instance from storage.
085         *
086         * @param id ID of the workflow instance to delete.
087         * @throws WorkflowException thrown if the instance could not be deleted.
088         */
089        public void delete(String id) throws WorkflowException;
090    
091    
092        /**
093         * Commit changes to store.
094         *
095         * @throws WorkflowException thrown if the commit could not be done.
096         */
097        public void commit() throws WorkflowException;
098    
099        /**
100         * Close store. It rollbacks if there was no commit.
101         *
102         * @throws WorkflowException thrown if the close could not be done.
103         */
104        public void close() throws WorkflowException;
105    
106    }