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