00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 package org.openmobileis.synchro.algo.syncnumber.impl;
00027
00028 import java.sql.ResultSet;
00029 import org.openmobileis.common.util.log.*;
00030 import org.openmobileis.common.util.database.ManagerDB;
00031 import org.openmobileis.common.util.exception.DatabaseException;
00032 import org.openmobileis.common.util.exception.ServiceException;
00033 import org.openmobileis.synchro.algo.syncnumber.SyncNumberManagerDelegate;
00034 import org.openmobileis.synchro.algo.syncnumber.SyncNumberNotFoundException;
00035 import org.openmobileis.synchro.algo.syncnumber.SynchroNumber;
00036
00044 public class OracleSyncNumberManagerDelegate implements SyncNumberManagerDelegate {
00045 private long currentSyncNumber;
00046 protected static OracleSafeServerSyncNumberQueryManager syncQueryManager = null;
00047
00048 public OracleSyncNumberManagerDelegate() {
00049 }
00050
00051 public void initDelegate() {
00052 syncQueryManager = new OracleSafeServerSyncNumberQueryManager();
00053 try {
00054 syncQueryManager.createSyncTable();
00055
00056
00057 ResultSet result = null;
00058 result = syncQueryManager.getLastSyncNumber();
00059 if (result.next()) {
00060 currentSyncNumber = result.getLong(1);
00061 } else {
00062 LogManager.traceAlert(LogServices.SERVERSERVICE," No current synchro number set to 0");
00063 currentSyncNumber = 0;
00064 }
00065 } catch (java.sql.SQLException e) {
00066 LogManager.traceCritique(LogServices.SERVERSERVICE, new ServiceException("Error init Syncho Number manager. Exit System",e));
00067 System.exit(1);
00068 } catch (DatabaseException e) {
00069 LogManager.traceCritique(LogServices.SERVERSERVICE, new ServiceException("Error init Syncho Number manager. Exit System",e));
00070 System.exit(1);
00071 }
00072 }
00073
00074
00075 public synchronized void setSyncNumberFactory(SyncNumberQueryManager fac) {
00076 syncQueryManager = (OracleSafeServerSyncNumberQueryManager)fac;
00077 }
00078
00079 public SynchroNumber getSynchroNumber(long ns) throws SyncNumberNotFoundException {
00080 String[] syncParams = {String.valueOf(ns)};
00081 try {
00082 ResultSet result = syncQueryManager.getSyncNumberbysn(syncParams);
00083 if (!result.next()) {
00084 throw new SyncNumberNotFoundException(LogPriorities.INFO);
00085 } else {
00086
00087 return new SynchroNumber(ns, result.getTimestamp(1).getTime());
00088 }
00089 } catch (java.sql.SQLException e) {
00090 LogManager.traceError(LogServices.SERVERSERVICE, new ServiceException("Error during getSynchroNumberBySN for synchro number :"+ns,e));
00091 throw new SyncNumberNotFoundException(LogPriorities.INFO);
00092 } catch (DatabaseException e) {
00093 LogManager.traceError(LogServices.SERVERSERVICE, e);
00094 throw new SyncNumberNotFoundException(LogPriorities.INFO);
00095 } finally {
00096 ManagerDB.getManager().garbageOpenedConnection();;
00097 }
00098 }
00099
00100 public long getCurrentSynchroNumber() throws DatabaseException {
00101 try {
00102
00103 ResultSet result = syncQueryManager.getLastSyncNumber();
00104 if (result.next()) {
00105 return result.getLong(1);
00106 }
00107 } catch (Throwable ex) {
00108 throw new DatabaseException(ex);
00109 } finally {
00110 ManagerDB.getManager().garbageOpenedConnection();;
00111 }
00112 throw new DatabaseException("No sync number in db. Db init error");
00113 }
00114
00115 public SynchroNumber getNextSynchroNumber() throws DatabaseException {
00116 long ns = this.incrementSynchoNumber();
00117 String[] syncParams = {String.valueOf(ns)};
00118 try {
00119
00120 syncQueryManager.create(syncParams);
00121 ResultSet result = syncQueryManager.getSyncNumberbysn(syncParams);
00122 SynchroNumber syncNumber = null;
00123 if (result.next()) {
00124
00125 syncNumber = new SynchroNumber(ns, result.getTimestamp(1).getTime());
00126 }
00127 return syncNumber;
00128 } catch (java.sql.SQLException e) {
00129 LogManager.traceError(LogServices.SERVERSERVICE, new ServiceException("Error during getNextSynchroNumber for synchro number :"+ns,e));
00130 throw new DatabaseException(e);
00131 } catch (DatabaseException ex) {
00132 throw new DatabaseException(ex);
00133 }
00134 }
00135
00136 public void deleteSyncNumber(SynchroNumber ns) throws DatabaseException {
00137 try {
00138 String[] syncParams = {String.valueOf(ns.getSynchroNumber())};
00139 syncQueryManager.delete(syncParams);
00140 } catch (DatabaseException ex) {
00141 LogManager.trace(ex);
00142 }
00143 }
00144
00145 public void createSynchroNumber(long ns, long timestamp) throws DatabaseException {
00146 String[] syncParams = {Long.toString(ns)};
00147 syncQueryManager.create(syncParams);
00148 }
00149
00153 public void setTimeStampForSynchroNumber(long syncNumber) throws SyncNumberNotFoundException {
00154 }
00155
00159 public long getTimeStampForSynchroNumber(long syncNumber) throws SyncNumberNotFoundException {
00160 return this.getSynchroNumber(syncNumber).getTimeStamp();
00161 }
00162
00163 private synchronized long incrementSynchoNumber() {
00164 return ++currentSyncNumber;
00165 }
00166 }