From 94ae08701bbd7585a0b7e5a92d1975965a503c03 Mon Sep 17 00:00:00 2001 From: Dennis Kao <ulysseskao@gmail.com> Date: Wed, 15 Jan 2014 11:28:52 +0800 Subject: [PATCH] Merge branch 'origin/2.1.x' --- xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java | 411 +++++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 265 insertions(+), 146 deletions(-) diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java index f419c5d..841a5e9 100644 --- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java +++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java @@ -3,32 +3,32 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.nio.BufferOverflowException; import java.nio.ByteBuffer; +import java.sql.Connection; +import java.sql.ResultSet; import java.sql.SQLException; +import java.sql.Statement; import java.util.ArrayList; import java.util.Map; import java.util.StringTokenizer; import java.util.TreeMap; +import com.vividsolutions.jts.util.Assert; +import com.ximple.eofms.jobs.context.AbstractOracleJobContext; +import com.ximple.eofms.util.FeatureTypeBuilderUtil; +import oracle.sql.BLOB; import org.apache.commons.logging.Log; import org.geotools.data.DataStore; -import org.geotools.data.jdbc.ConnectionPoolManager; -import org.geotools.data.oracle.OracleDataStore; -import org.geotools.data.oracle.OracleDataStoreFactory; +import org.geotools.data.oracle.OracleNGDataStoreFactory; +import org.geotools.jdbc.JDBCDataStore; import org.quartz.Job; import org.quartz.JobDataMap; import org.quartz.JobDetail; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; -import com.vividsolutions.jts.util.Assert; - -import oracle.sql.BLOB; - -import com.ximple.eofms.jobs.context.AbstractOracleJobContext; - -public abstract class AbstractOracleDatabaseJob implements Job -{ +public abstract class AbstractOracleDatabaseJob implements Job { /** * The Oracle driver class name */ @@ -44,6 +44,7 @@ private static final String CONVERTDB = "CONVERTDB"; private static final String CONVERTFILE = "CONVERTFILE"; private static final String CONVERTELEMIN = "CONVERTELEMIN"; + private static final String CONVERTPWTHEMES = "CONVERTPWTHEMES"; private static final String CREATEDUMMY = "CREATEDUMMY"; private static final String ELEMLOG = "ELEMLOG"; private static final String ORAHOST = "ORAHOST"; @@ -54,8 +55,11 @@ private static final String TESTMODE = "TESTMODE"; private static final String TESTCOUNT = "TESTCOUNT"; private static final String COPYCONNECTIVITYMODE = "COPYCONNECTIVITYMODE"; + private static final String PROFILEMODE = "PROFILEMODE"; + private static final String USEZONE121 = "USEZONE121"; + private static final String IGNORE_DBETL = "IGNORE_DBETL"; - protected static OracleDataStoreFactory dataStoreFactory = new OracleDataStoreFactory(); + protected static OracleNGDataStoreFactory dataStoreFactory = new OracleNGDataStoreFactory(); protected String _dataPath; protected String _filterPath; @@ -67,22 +71,30 @@ protected String _convertDB; protected String _convertFile; protected String _convertElementIn; + protected String _convertPWThemes; protected String _elementLogging; protected String _createDummy; protected ArrayList<String> _orgSchema = new ArrayList<String>(); protected boolean _testMode = false; protected boolean _copyConnectivityMode = false; + protected boolean _profileMode = false; + protected boolean _useZone121 = true; + protected boolean _useTransform = true; + protected boolean _ignoreDBETL = false; + protected int _testCount = -1; - protected OracleDataStore sourceDataStore; + protected JDBCDataStore sourceDataStore; private boolean driverFound = true; - protected AbstractOracleDatabaseJob() - { - try - { + private long _processTime; + private long _updateTime; + private long _processTimeStart; + private long _updateTimeStart; + + protected AbstractOracleDatabaseJob() { + try { Class.forName(JDBC_DRIVER); - } catch (Throwable t) - { + } catch (Throwable t) { // must be running off dummy jar! driverFound = false; } @@ -92,8 +104,7 @@ public abstract Log getLogger(); - protected void extractJobConfiguration(JobDetail jobDetail) throws JobExecutionException - { + protected void extractJobConfiguration(JobDetail jobDetail) throws JobExecutionException { // The directory to scan is stored in the job map JobDataMap dataMap = jobDetail.getJobDataMap(); _dataPath = dataMap.getString(JOBDATA_DIR); @@ -106,6 +117,7 @@ _convertDB = dataMap.getString(CONVERTDB); _convertFile = dataMap.getString(CONVERTFILE); _convertElementIn = dataMap.getString(CONVERTELEMIN); + _convertPWThemes = dataMap.getString(CONVERTPWTHEMES); _elementLogging = dataMap.getString(ELEMLOG); _createDummy = dataMap.getString(CREATEDUMMY); @@ -126,20 +138,26 @@ String strSchema = dataMap.getString(SPATAILSCHEMA); StringTokenizer st = new StringTokenizer(strSchema, ","); - while (st.hasMoreTokens()) - { + while (st.hasMoreTokens()) { String aSchema = st.nextToken().trim(); _orgSchema.add(aSchema); } _testMode = dataMap.getBooleanFromString(TESTMODE); _testCount = dataMap.getIntFromString(TESTCOUNT); _copyConnectivityMode = dataMap.getBooleanFromString(COPYCONNECTIVITYMODE); + _profileMode = dataMap.getBooleanFromString(PROFILEMODE); + _useZone121 = dataMap.getBooleanFromString(USEZONE121); + _ignoreDBETL = dataMap.getBooleanFromString(IGNORE_DBETL); + + if (_useZone121) { + FeatureTypeBuilderUtil.setDefaultFeatureSRID(3826); + } else { + FeatureTypeBuilderUtil.setDefaultFeatureSRID(3825); + } // Validate the required input - if (_dataPath == null) - { - if (logger != null) - { + if (_dataPath == null) { + if (logger != null) { logger.warn("Cannot found data directory in configarion."); } throw new JobExecutionException("Directory not configured"); @@ -147,47 +165,40 @@ // Make sure the directory exists File dir = new File(_dataPath); - if (!dir.exists()) - { + if (!dir.exists()) { logger = getLogger(); - if (logger != null) - { + if (logger != null) { logger.warn("Cannot found data directory in file system.[" + _dataPath + "]"); } throw new JobExecutionException("Invalid Dir " + _dataPath); } - if (_oracleHost == null) - { + if (_oracleHost == null) { logger.warn("OracleHOST is null"); throw new JobExecutionException("Unknown Oracle Host."); } - if (_oracleInstance == null) - { + if (_oracleInstance == null) { logger.warn("OracleINSTANCE is null"); throw new JobExecutionException("Unknown Oracle Instance."); } - if (_username == null) - { + if (_username == null) { logger.warn("OracleUSER is null"); throw new JobExecutionException("Unknown Oracle Username."); } - if (_password == null) - { + if (_password == null) { logger.warn("OraclePASS is null"); throw new JobExecutionException("Unknown Oracle Password."); } - if (_orgSchema == null) - { + if (_orgSchema == null) { logger.warn("OracleSchema is null"); throw new JobExecutionException("Unknown Spatial Database Schema."); } } - protected abstract AbstractOracleJobContext prepareJobContext(String targetSchemaName, String filterPath); + protected abstract AbstractOracleJobContext prepareJobContext(String targetSchemaName, String filterPath, + boolean profileMode, boolean useTransform); - protected static byte[] getBytesFromBLOB(BLOB blob) throws SQLException - { + protected byte[] getBytesFromBLOB(BLOB blob) throws SQLException, BufferOverflowException { byte[] raw = null; // BLOB blob = (BLOB) rs.getBlob(1); @@ -195,220 +206,328 @@ byte[] chunk = new byte[optimalSize]; InputStream is = blob.getBinaryStream(0); ByteBuffer buffer = null; // ByteBuffer.allocate(optimalSize); - int len; + int len = 0; - try - { - while ((len = (is.read(chunk))) != -1) - { - if (buffer != null) - { + try { + while ((len = (is.read(chunk))) != -1) { + if (buffer != null) { buffer.limit(buffer.limit() + len); - } else - { + } else { buffer = ByteBuffer.allocate(len); } - buffer.put(chunk); + buffer.put(chunk, 0, len); } - - is.close(); assert buffer != null; buffer.position(0); raw = buffer.array(); - } catch (IOException e) - { + } catch (IOException e) { e.printStackTrace(); // To change body of catch statement use File | Settings | File Templates. Assert.shouldNeverReachHere(); + } catch (BufferOverflowException e) { + getLogger().warn("BufferOverflowException:: len = " + len + "buffer.limit=" + buffer.limit()); + } finally { + try { + is.close(); + } catch (IOException e) { + getLogger().warn("InputStream cannot close", e); + } + ; } return raw; } - public boolean isDriverFound() - { + public boolean isDriverFound() { return driverFound; } - public String getDataPath() - { + public String getDataPath() { return _dataPath; } - public String getFilterPath() - { + public String getFilterPath() { return _filterPath; } - public String getOracleHost() - { + public String getOracleHost() { return _oracleHost; } - public String getOracleInstance() - { + public String getOracleInstance() { return _oracleInstance; } - public String getOraclePort() - { + public String getOraclePort() { return _oraclePort; } - public String getUsername() - { + public String getUsername() { return _username; } - public String getPassword() - { + public String getPassword() { return _password; } - public ArrayList<String> getOriginSchema() - { + public ArrayList<String> getOriginSchema() { return _orgSchema; } - public boolean isTestMode() - { + public boolean isTestMode() { return _testMode; } - public int getTestCount() - { + public int getTestCount() { return _testCount; } - public String getConvertDB() - { + public String getConvertDB() { return _convertDB; } - public void setConvertDB(String convertDB) - { + public void setConvertDB(String convertDB) { _convertDB = convertDB; } - public String getConvertFile() - { + public String getConvertFile() { return _convertFile; } - public void setConvertFile(String convertFile) - { + public void setConvertFile(String convertFile) { _convertFile = convertFile; } - public String getConvertElementIn() - { + public String getConvertElementIn() { return _convertElementIn; } - public void setConvertElementIn(String convertElementIn) - { + public void setConvertElementIn(String convertElementIn) { _convertElementIn = convertElementIn; } - public boolean checkConvertDB() - { + public boolean checkConvertDB() { return _convertDB != null && !_convertDB.equalsIgnoreCase("false") && - !_convertDB.equalsIgnoreCase("no") && !_convertDB.equalsIgnoreCase("0"); + !_convertDB.equalsIgnoreCase("no") && !_convertDB.equalsIgnoreCase("0"); } - public boolean checkConvertFile() - { + public boolean checkConvertFile() { return _convertFile != null && !_convertFile.equalsIgnoreCase("false") && - !_convertFile.equalsIgnoreCase("no") && !_convertFile.equalsIgnoreCase("0"); + !_convertFile.equalsIgnoreCase("no") && !_convertFile.equalsIgnoreCase("0"); } - public boolean checkConvertElementIn() - { + public boolean checkConvertElementIn() { return _convertElementIn != null && !_convertElementIn.equalsIgnoreCase("false") && - !_convertElementIn.equalsIgnoreCase("no") && !_convertElementIn.equalsIgnoreCase("0"); + !_convertElementIn.equalsIgnoreCase("no") && !_convertElementIn.equalsIgnoreCase("0"); } - public String getElementLogging() - { + public boolean checkConvertPWThemes() { + return _convertPWThemes != null && !_convertPWThemes.equalsIgnoreCase("false") && + !_convertPWThemes.equalsIgnoreCase("no") && !_convertPWThemes.equalsIgnoreCase("0"); + } + + public String getElementLogging() { return _elementLogging; } - public void setElementLogging(String elementLogging) - { + public void setElementLogging(String elementLogging) { this._elementLogging = elementLogging; } - public boolean checkElementLogging() - { + public boolean checkElementLogging() { return _elementLogging != null && !_elementLogging.equalsIgnoreCase("false") && - !_elementLogging.equalsIgnoreCase("no") && !_elementLogging.equalsIgnoreCase("0"); + !_elementLogging.equalsIgnoreCase("no") && !_elementLogging.equalsIgnoreCase("0"); } - public boolean checkCreateDummy() - { + public boolean checkCreateDummy() { return _createDummy != null && !_createDummy.equalsIgnoreCase("false") && - !_createDummy.equalsIgnoreCase("no") && !_createDummy.equalsIgnoreCase("0"); + !_createDummy.equalsIgnoreCase("no") && !_createDummy.equalsIgnoreCase("0"); } - public boolean isCopyConnectivityMode() - { + public boolean isCopyConnectivityMode() { return _copyConnectivityMode; } - public DataStore getSourceDataStore() - { + public boolean isProfileMode() { + return _profileMode; + } + + public boolean isTransformed() { + return _useTransform; + } + + public boolean isZone121() { + return _useZone121; + } + + public boolean isIgnoreDBETL() { + return _ignoreDBETL; + } + + public void set_ignoreDBETL(boolean _ignoreDBETL) { + this._ignoreDBETL = _ignoreDBETL; + } + + public DataStore getSourceDataStore() { return sourceDataStore; } - protected void createSourceDataStore() throws JobExecutionException - { - if (sourceDataStore != null) - { + protected void createSourceDataStore() throws JobExecutionException { + if (sourceDataStore != null) { sourceDataStore.dispose(); sourceDataStore = null; } - if (!isDriverFound()) - { + if (!isDriverFound()) { throw new JobExecutionException("Oracle JDBC Driver not found.-" + JDBC_DRIVER); } Map<String, String> map = new TreeMap<String, String>(); - map.put("host", _oracleHost); - map.put("port", _oraclePort); - map.put("instance", _oracleInstance); - map.put("user", _username); - map.put("passwd", _password); - map.put("dbtype", "oracle"); - map.put("alias", _oracleInstance); - map.put("namespace", null); - if (!map.containsKey(OracleDataStoreFactory.MAXCONN.key)) - { - map.put(OracleDataStoreFactory.MAXCONN.key, "10"); + map.put(OracleNGDataStoreFactory.HOST.key, _oracleHost); + map.put(OracleNGDataStoreFactory.PORT.key, _oraclePort); + map.put(OracleNGDataStoreFactory.DATABASE.key, _oracleInstance); + map.put(OracleNGDataStoreFactory.USER.key, _username); + map.put(OracleNGDataStoreFactory.PASSWD.key, _password); + map.put(OracleNGDataStoreFactory.DBTYPE.key, "oracle"); + map.put(OracleNGDataStoreFactory.NAMESPACE.key, null); + + if (!map.containsKey(OracleNGDataStoreFactory.MAXCONN.key)) { + map.put(OracleNGDataStoreFactory.MAXCONN.key, "5"); } - if (!map.containsKey(OracleDataStoreFactory.MINCONN.key)) - { - map.put(OracleDataStoreFactory.MINCONN.key, "1"); + if (!map.containsKey(OracleNGDataStoreFactory.MINCONN.key)) { + map.put(OracleNGDataStoreFactory.MINCONN.key, "1"); } - if (!dataStoreFactory.canProcess(map)) - { + if (!dataStoreFactory.canProcess(map)) { getLogger().warn("cannot process properties-"); throw new JobExecutionException("cannot process properties-"); } - try - { - sourceDataStore = (OracleDataStore) dataStoreFactory.createDataStore(map); - } catch (IOException e) - { + try { + sourceDataStore = dataStoreFactory.createDataStore(map); + } catch (IOException e) { getLogger().warn(e.getMessage(), e); throw new JobExecutionException(e.getMessage(), e); } } - protected void disconnect() - { - ConnectionPoolManager manager = ConnectionPoolManager.getInstance(); - manager.closeAll(); + protected void disconnect() { + // ConnectionPoolManager manager = ConnectionPoolManager.getInstance(); + // manager.closeAll(); + if (sourceDataStore != null) { + sourceDataStore.dispose(); + sourceDataStore = null; + } + } + + public final void accumulateProcessTime() { + _processTime += System.currentTimeMillis() - _processTimeStart; + } + + public final void accumulateUpdateTime() { + _updateTime += System.currentTimeMillis() - _updateTimeStart; + } + + public long getProcessTime() { + return _processTime; + } + + public long getUpdateTime() { + return _updateTime; + } + + public final void markProcessTime() { + _processTimeStart = System.currentTimeMillis(); + } + + public final void markUpdateTime() { + _updateTimeStart = System.currentTimeMillis(); + } + + public final void resetProcessTime() { + _processTime = 0; + } + + public final void resetUpdateTime() { + _updateTime = 0; + } + + /** + * Connectivity (Connectivity) + * + * @param jobContext job context + * @throws java.sql.SQLException sql exception + */ + protected void copyConnectivity(AbstractOracleJobContext jobContext) throws SQLException { + Connection connection = jobContext.getOracleConnection(); + ResultSet rsMeta = connection.getMetaData().getTables(null, "BASEDB", + AbstractOracleJobContext.CONNECTIVITY_WEBCHECK_NAME + "%", + new String[]{"TABLE"}); + + boolean found = false; + try { + while (rsMeta.next()) { + String tablename = rsMeta.getString(3); + if (AbstractOracleJobContext.CONNECTIVITY_WEBCHECK_NAME.equalsIgnoreCase(tablename)) { + found = true; + break; + } + } + // } catch (SQLException e) + } finally { + if (rsMeta != null) { + rsMeta.close(); + rsMeta = null; + } + } + Statement stmt = connection.createStatement(); + if (found) { + stmt.execute(AbstractOracleJobContext.TRUNCATE_CONNECTIVITY_WEBCHECK); + } else { + getLogger().info("Create CONNECTIVITY_WEBCHECK table."); + stmt.execute(AbstractOracleJobContext.CREATE_CONNECTIVITY_WEBCHECK); + stmt.execute(AbstractOracleJobContext.CREATE_CONNECTIVITY_WEBCHECK_INDEX_1); + stmt.execute(AbstractOracleJobContext.CREATE_CONNECTIVITY_WEBCHECK_INDEX_2); + stmt.execute(AbstractOracleJobContext.CREATE_CONNECTIVITY_WEBCHECK_INDEX_3); + stmt.execute(AbstractOracleJobContext.CREATE_CONNECTIVITY_WEBCHECK_INDEX_4); + stmt.execute(AbstractOracleJobContext.CREATE_CONNECTIVITY_WEBCHECK_INDEX_5); + stmt.execute(AbstractOracleJobContext.CREATE_CONNECTIVITY_WEBCHECK_INDEX_6); + stmt.execute(AbstractOracleJobContext.ALTER_CONNECTIVITY_WEBCHECK_1); + stmt.execute(AbstractOracleJobContext.ALTER_CONNECTIVITY_WEBCHECK_2); + } + + stmt.execute(AbstractOracleJobContext.COPY_CONNECTIVITY_TO_WEBCHECK); + stmt.close(); + } + + protected void fetchTPData(AbstractOracleJobContext jobContext) { + Connection connection = jobContext.getOracleConnection(); + + try { + Statement stmt = connection.createStatement(); + ResultSet rs = stmt.executeQuery(AbstractOracleJobContext.FETCH_TPDATA); + if (rs.next()) { + short disId = rs.getShort(1); + jobContext.setDistId(disId); + + String distName = rs.getString(2); + jobContext.setDistName(distName); + } + rs.close(); + stmt.close(); + } catch (SQLException e) { + getLogger().warn("Fetch TPDATA Error.", e); + } + } + + protected void createHibernateSequence(AbstractOracleJobContext jobContext) throws SQLException { + Connection connection = jobContext.getOracleConnection(); + + try { + Statement stmt = connection.createStatement(); + stmt.execute(AbstractOracleJobContext.CREATE_HIBERNATE_SEQUENCE); + stmt.close(); + } catch (SQLException e) { + getLogger().warn("HIBERNATE_SEQUENCE is already exist."); + } } } -- Gitblit v0.0.0-SNAPSHOT