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.store;
019
020 import java.sql.SQLException;
021 import java.sql.Timestamp;
022 import java.util.ArrayList;
023 import java.util.Date;
024 import java.util.List;
025 import java.util.concurrent.Callable;
026
027 import javax.persistence.EntityManager;
028 import javax.persistence.Query;
029
030 import org.apache.oozie.ErrorCode;
031 import org.apache.oozie.SLAEventBean;
032 import org.apache.oozie.XException;
033 import org.apache.oozie.service.InstrumentationService;
034 import org.apache.oozie.service.Services;
035 import org.apache.oozie.util.Instrumentation;
036 import org.apache.oozie.util.ParamChecker;
037
038 public class SLAStore extends Store {
039 private EntityManager entityManager;
040 private static final String INSTR_GROUP = "db";
041
042 public SLAStore() throws StoreException {
043 super();
044 entityManager = getEntityManager();
045
046 }
047
048 public SLAStore(Store store) throws StoreException {
049 super(store);
050 entityManager = getEntityManager();
051 }
052
053 /**
054 * Create a CoordJobBean. It also creates the process instance for the job.
055 *
056 * @param workflow workflow bean
057 * @throws StoreException
058 */
059
060 public void insertSLAEvent(final SLAEventBean slaEvent) throws StoreException {
061 ParamChecker.notNull(slaEvent, "sLaEvent");
062
063 doOperation("insertSLAEvent", new Callable<Void>() {
064 public Void call() throws StoreException {
065 entityManager.persist(slaEvent);
066 return null;
067 }
068 });
069 }
070
071 /**
072 * Get a list of SLA Events newer than a specific sequence with limit clause.
073 *
074 * @param seqId sequence id
075 * @return List of SLA Events
076 * @throws StoreException
077 */
078 public List<SLAEventBean> getSLAEventListNewerSeqLimited(final long seqId, final int limitLen, long[] lastSeqId)
079 throws StoreException {
080 ParamChecker.notNull(seqId, "SLAEventListNewerSeqLimited");
081 ParamChecker.checkGTZero(limitLen, "SLAEventListNewerSeqLimited");
082
083 lastSeqId[0] = seqId;
084
085 List<SLAEventBean> seBeans = (List<SLAEventBean>) doOperation("getSLAEventListNewerSeqLimited",
086 new Callable<List<SLAEventBean>>() {
087
088 public List<SLAEventBean> call() throws StoreException {
089
090 List<SLAEventBean> seBeans;
091 try {
092 Query q = entityManager.createNamedQuery("GET_SLA_EVENT_NEWER_SEQ_LIMITED");
093 q.setParameter("id", seqId);
094 // q.setFirstResult(0);
095 q.setMaxResults(limitLen);
096 seBeans = q.getResultList();
097 }
098 catch (IllegalStateException e) {
099 throw new StoreException(ErrorCode.E0601, e.getMessage(), e);
100 }
101 return seBeans;
102 }
103 });
104 List<SLAEventBean> eventList = new ArrayList<SLAEventBean>();
105 for (SLAEventBean j : seBeans) {
106 lastSeqId[0] = Math.max(lastSeqId[0], j.getEvent_id());
107 eventList.add(j);
108 }
109 return eventList;
110 }
111
112 private SLAEventBean copyEventBean(SLAEventBean e) {
113 SLAEventBean event = new SLAEventBean();
114 event.setAlertContact(e.getAlertContact());
115 event.setAlertFrequency(e.getAlertFrequency());
116 event.setAlertPercentage(e.getAlertPercentage());
117 event.setAppName(e.getAppName());
118 event.setAppType(e.getAppType());
119 event.setAppTypeStr(e.getAppTypeStr());
120 event.setDevContact(e.getDevContact());
121 event.setEvent_id(e.getEvent_id());
122 event.setEventType(e.getEventType());
123 event.setExpectedEnd(e.getExpectedEnd());
124 event.setExpectedStart(e.getExpectedStart());
125 event.setGroupName(e.getGroupName());
126 event.setJobData(e.getJobData());
127 event.setJobStatus(e.getJobStatus());
128 event.setJobStatusStr(e.getJobStatusStr());
129 event.setNotificationMsg(e.getNotificationMsg());
130 event.setParentClientId(e.getParentClientId());
131 event.setParentSlaId(e.getParentSlaId());
132 event.setQaContact(e.getQaContact());
133 event.setSeContact(e.getSeContact());
134 event.setSlaId(e.getSlaId());
135 event.setStatusTimestamp(e.getStatusTimestamp());
136 event.setUpstreamApps(e.getUpstreamApps());
137 event.setUser(e.getUser());
138 return event;
139 }
140
141 private <V> V doOperation(String name, Callable<V> command) throws StoreException {
142 try {
143 Instrumentation.Cron cron = new Instrumentation.Cron();
144 cron.start();
145 V retVal;
146 try {
147 retVal = command.call();
148 }
149 finally {
150 cron.stop();
151 }
152 Services.get().get(InstrumentationService.class).get().addCron(INSTR_GROUP, name, cron);
153 return retVal;
154 }
155 catch (StoreException ex) {
156 throw ex;
157 }
158 catch (SQLException ex) {
159 throw new StoreException(ErrorCode.E0603, name, ex.getMessage(), ex);
160 }
161 catch (Exception e) {
162 throw new StoreException(ErrorCode.E0607, name, e.getMessage(), e);
163 }
164 }
165
166 }