This project has retired. For details please refer to its
Attic page.
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.executor.jpa;
019
020 import java.util.Collection;
021 import javax.persistence.EntityManager;
022 import javax.persistence.Query;
023
024 import org.apache.oozie.CoordinatorActionBean;
025 import org.apache.oozie.ErrorCode;
026 import org.apache.oozie.FaultInjection;
027 import org.apache.oozie.client.rest.JsonBean;
028 import org.apache.oozie.util.ParamChecker;
029
030 /**
031 * Class for updating and deleting beans in bulk
032 */
033 public class BulkUpdateDeleteJPAExecutor implements JPAExecutor<Void> {
034
035 private Collection<JsonBean> updateList;
036 private Collection<JsonBean> deleteList;
037 private boolean forRerun = true;
038
039 /**
040 * Initialize the JPAExecutor using the update and delete list of JSON beans
041 * @param deleteList
042 * @param updateList
043 */
044 public BulkUpdateDeleteJPAExecutor(Collection<JsonBean> updateList, Collection<JsonBean> deleteList,
045 boolean forRerun) {
046 this.updateList = updateList;
047 this.deleteList = deleteList;
048 this.forRerun = forRerun;
049 }
050
051 public BulkUpdateDeleteJPAExecutor() {
052 }
053
054 /**
055 * Sets the update list for JSON bean
056 *
057 * @param updateList
058 */
059 public void setUpdateList(Collection<JsonBean> updateList) {
060 this.updateList = updateList;
061 }
062
063 /**
064 * Sets the delete list for JSON bean
065 *
066 * @param deleteList
067 */
068 public void setDeleteList(Collection<JsonBean> deleteList) {
069 this.deleteList = deleteList;
070 }
071
072 /**
073 * Sets whether for RerunX command or no. Else it'd be for ChangeX
074 *
075 * @param forRerun
076 */
077 public void setForRerun(boolean forRerun) {
078 this.forRerun = forRerun;
079 }
080
081 /*
082 * (non-Javadoc)
083 *
084 * @see org.apache.oozie.executor.jpa.JPAExecutor#getName()
085 */
086 @Override
087 public String getName() {
088 return "BulkUpdateDeleteJPAExecutor";
089 }
090
091 /*
092 * (non-Javadoc)
093 *
094 * @see org.apache.oozie.executor.jpa.JPAExecutor#execute(javax.persistence.
095 * EntityManager)
096 */
097 @Override
098 public Void execute(EntityManager em) throws JPAExecutorException {
099 try {
100 if (updateList != null) {
101 for (JsonBean entity : updateList) {
102 ParamChecker.notNull(entity, "JsonBean");
103 em.merge(entity);
104 }
105 }
106 // Only used by test cases to check for rollback of transaction
107 FaultInjection.activate("org.apache.oozie.command.SkipCommitFaultInjection");
108 if (deleteList != null) {
109 for (JsonBean entity : deleteList) {
110 ParamChecker.notNull(entity, "JsonBean");
111 if (forRerun) {
112 em.remove(em.merge(entity));
113 }
114 else {
115 Query g = em.createNamedQuery("DELETE_UNSCHEDULED_ACTION");
116 String coordActionId = ((CoordinatorActionBean) entity).getId();
117 g.setParameter("id", coordActionId);
118 int actionsDeleted = g.executeUpdate();
119 if (actionsDeleted == 0)
120 throw new JPAExecutorException(ErrorCode.E1022, coordActionId);
121 }
122 }
123 }
124 return null;
125 }
126 catch (JPAExecutorException je) {
127 throw je;
128 }
129 catch (Exception e) {
130 throw new JPAExecutorException(ErrorCode.E0603, e);
131 }
132 }
133 }