2 * ============LICENSE_START==========================================
4 * ===================================================================
5 * Copyright (c) 2017 AT&T Intellectual Property
6 * ===================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
19 * ============LICENSE_END=============================================
20 * ====================================================================
22 package org.onap.music.main;
24 import java.util.Iterator;
25 import java.util.concurrent.Executors;
26 import java.util.concurrent.ScheduledExecutorService;
27 import java.util.concurrent.TimeUnit;
28 import javax.servlet.ServletContextEvent;
29 import javax.servlet.ServletContextListener;
30 import javax.servlet.annotation.WebListener;
32 import org.onap.music.datastore.PreparedQueryObject;
33 import org.onap.music.eelf.logging.EELFLoggerDelegate;
34 import org.onap.music.eelf.logging.format.ErrorSeverity;
35 import org.onap.music.exceptions.MusicLockingException;
36 import org.onap.music.exceptions.MusicServiceException;
38 import com.datastax.driver.core.ResultSet;
39 import com.datastax.driver.core.Row;
42 public class CronJobManager implements ServletContextListener {
44 private ScheduledExecutorService scheduler;
45 private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(CronJobManager.class);
48 public void contextInitialized(ServletContextEvent event) {
49 scheduler = Executors.newSingleThreadScheduledExecutor();
50 scheduler.scheduleAtFixedRate(new CachingUtil(), 0, 24, TimeUnit.HOURS);
51 PreparedQueryObject pQuery = new PreparedQueryObject();
52 String consistency = MusicUtil.EVENTUAL;
53 pQuery.appendQueryString("CREATE TABLE IF NOT EXISTS admin.locks ( lock_id text PRIMARY KEY, ctime text)");
55 ResultType result = MusicCore.nonKeyRelatedPut(pQuery, consistency);
56 } catch (MusicServiceException e1) {
57 logger.error(EELFLoggerDelegate.errorLogger, e1.getMessage(),ErrorSeverity.ERROR);
61 scheduler.scheduleAtFixedRate(new Runnable() {
66 } , 0, 24, TimeUnit.HOURS);
70 public void contextDestroyed(ServletContextEvent event) {
71 scheduler.shutdownNow();
74 public void deleteLocksFromDB() {
75 PreparedQueryObject pQuery = new PreparedQueryObject();
76 pQuery.appendQueryString(
77 "select * from admin.locks");
79 ResultSet rs = MusicCore.get(pQuery);
80 Iterator<Row> it = rs.iterator();
81 StringBuilder deleteKeys = new StringBuilder();
82 Boolean expiredKeys = false;
83 while (it.hasNext()) {
84 Row row = (Row) it.next();
85 String id = row.getString("lock_id");
86 long ctime = Long.parseLong(row.getString("ctime"));
87 if(System.currentTimeMillis() >= ctime + 24 * 60 * 60 * 1000) {
89 String new_id = id.substring(1);
91 MusicCore.deleteLock(new_id);
92 } catch (MusicLockingException e) {
93 logger.info(EELFLoggerDelegate.applicationLogger,
96 deleteKeys.append("'").append(id).append("'").append(",");
100 deleteKeys.deleteCharAt(deleteKeys.length()-1);
101 CachingUtil.deleteKeysFromDB(deleteKeys.toString());
103 } catch (MusicServiceException e) {
104 logger.error(EELFLoggerDelegate.errorLogger, e.getMessage(),ErrorSeverity.ERROR);