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.lite;
016
017 import java.sql.Connection;
018 import java.sql.SQLException;
019 import javax.xml.validation.Schema;
020
021 import org.apache.oozie.store.OozieSchema.OozieColumn;
022 import org.apache.oozie.store.OozieSchema.OozieTable;
023 import org.apache.oozie.workflow.WorkflowException;
024 import org.apache.oozie.workflow.WorkflowInstance;
025 import org.apache.oozie.util.ParamChecker;
026 import org.apache.oozie.util.WritableUtils;
027 import org.apache.oozie.util.db.SqlStatement.ResultSetReader;
028 import org.apache.oozie.util.db.SqlStatement;
029 import org.apache.oozie.ErrorCode;
030
031 //TODO javadoc
032 public class DBLiteWorkflowLib extends LiteWorkflowLib {
033 private final Connection connection;
034
035 public DBLiteWorkflowLib(Schema schema, Class<? extends DecisionNodeHandler> decisionHandlerClass,
036 Class<? extends ActionNodeHandler> actionHandlerClass, Connection connection) {
037 super(schema, decisionHandlerClass, actionHandlerClass);
038 this.connection = connection;
039 }
040
041 /**
042 * Save the Workflow Instance for the given Workflow Application.
043 *
044 * @param instance
045 * @return
046 * @throws WorkflowException
047 */
048 @Override
049 public void insert(WorkflowInstance instance) throws WorkflowException {
050 ParamChecker.notNull(instance, "instance");
051 try {
052 SqlStatement.insertInto(OozieTable.WF_PROCESS_INSTANCE).value(OozieColumn.PI_wfId, instance.getId()).value(
053 OozieColumn.PI_state, WritableUtils.toByteArray((LiteWorkflowInstance) instance))
054 .prepareAndSetValues(connection).executeUpdate();
055 }
056 catch (SQLException e) {
057 throw new WorkflowException(ErrorCode.E0713, e.getMessage(), e);
058 }
059 }
060
061 /**
062 * Loads the Workflow instance with the given ID.
063 *
064 * @param id
065 * @return
066 * @throws WorkflowException
067 */
068 @Override
069 public WorkflowInstance get(String id) throws WorkflowException {
070 ParamChecker.notNull(id, "id");
071 try {
072 ResultSetReader rs = SqlStatement.parse(SqlStatement.selectColumns(OozieColumn.PI_state).where(
073 SqlStatement.isEqual(OozieColumn.PI_wfId, ParamChecker.notNull(id, "id"))).
074 prepareAndSetValues(connection).executeQuery());
075 rs.next();
076 LiteWorkflowInstance pInstance = WritableUtils.fromByteArray(rs.getByteArray(OozieColumn.PI_state),
077 LiteWorkflowInstance.class);
078 return pInstance;
079 }
080 catch (SQLException e) {
081 throw new WorkflowException(ErrorCode.E0713, e.getMessage(), e);
082 }
083 }
084
085 /**
086 * Updates the Workflow Instance to DB.
087 *
088 * @param instance
089 * @throws WorkflowException
090 */
091 @Override
092 public void update(WorkflowInstance instance) throws WorkflowException {
093 ParamChecker.notNull(instance, "instance");
094 try {
095 SqlStatement.update(OozieTable.WF_PROCESS_INSTANCE).set(OozieColumn.PI_state,
096 WritableUtils.toByteArray((LiteWorkflowInstance) instance)).where(
097 SqlStatement.isEqual(OozieColumn.PI_wfId, instance.getId())).
098 prepareAndSetValues(connection).executeUpdate();
099 }
100 catch (SQLException e) {
101 throw new WorkflowException(ErrorCode.E0713, e.getMessage(), e);
102 }
103 }
104
105 /**
106 * Delets the Workflow Instance with the given id.
107 *
108 * @param id
109 * @throws WorkflowException
110 */
111 @Override
112 public void delete(String id) throws WorkflowException {
113 ParamChecker.notNull(id, "id");
114 try {
115 SqlStatement.deleteFrom(OozieTable.WF_PROCESS_INSTANCE).where(
116 SqlStatement.isEqual(OozieColumn.PI_wfId, id)).prepareAndSetValues(connection).executeUpdate();
117 }
118 catch (SQLException e) {
119 throw new WorkflowException(ErrorCode.E0713, e.getMessage(), e);
120 }
121 }
122
123 @Override
124 public void commit() throws WorkflowException {
125 // NOP
126 }
127
128 @Override
129 public void close() throws WorkflowException {
130 // NOP
131 }
132 }