📄 loader.java
字号:
Vector vecXmlElements = new Vector();
Vector vecJDBCTargetConnections = new Vector();
//initializing logger
//videti jos oko ulaznih parametara, iz main methode ili is xml fajla
ParseLoggerParam loggerParam = new ParseLoggerParam(this.strLoaderJobFileName);
String logClassName = loggerParam.getLogClassName();
String pathToLoggerConf = loggerParam.getPathToLoggerConf();
String strLoggerParam = "";
boolean standardLogger = false;
try {
this.logger = (org.webdocwf.util.loader.logging.Logger)Class.forName(logClassName).
newInstance();
if (pathToLoggerConf != null && pathToLoggerConf.length() != 0)
strLoggerParam = pathToLoggerConf;
else
strLoggerParam = this.strLogDirName + ";" + this.strLogFileName;
}
catch (Exception e) {
this.logger = new StandardLogger();
strLoggerParam = this.strLogDirName + ";" + this.strLogFileName;
standardLogger = true;
}
try {
logger.configure(strLoggerParam);
logger.setEnabledLogLevels(this.defaultLogMode);
if (standardLogger == true) {
// if (!importDefinitionElement.strLogMode.equalsIgnoreCase("none")) {
this.logger.write("normal", "Default (Standard) Logger is load.");
// }
}
}
catch (Exception ex) {
String msg = "Error while configuring logger.";
LoaderException le = new LoaderException(msg + "\n" + ex.getMessage(), (Throwable)ex);
BufferOctopusClass.getInstance().writeToBuffer(msg + "\n" + ex.getMessage() + "\n");
//this.logger.write("normal", msg + "\n" + ex.getMessage() + "\n");
this.logger.write("full", le.getStackTraceAsString());
throw le;
}
this.timeCounter = new TimeWatch();
// if (!this.echo.createLog(this.strLogDirName, this.strLogFileName))
// this.echo.setLogFile(new File(this.strLogDirName, this.strLogFileName));
// this.createLog(this.strLogFileName);
jdbcParametersElement.setLogger(this.logger);
jdbcParametersElement.setConfigReaderSource(this.configReaderSource);
jdbcParametersElement.setLoaderJobPath(this.strLoaderJobFileName);
configReaderSource.setLogger(this.logger);
configReaderTarget.setLogger(this.logger);
configReaderSource.setConfJarStructure(this.confJarStructure);
configReaderTarget.setConfJarStructure(this.confJarStructure);
loaderJobReader.setLogger(this.logger);
loaderJobReader.setDefaultOnErrorContinue(this.bOnErrorContinue);
sqlElement.setLogger(this.logger);
sqlElement.setLoaderJob(this.loaderJobReader);
sqlElement.setConfigReader(this.configReaderTarget);
sqlElement.setJdbcParametersElement(this.jdbcParametersElement);
checkRowCache.setLogger(this.logger);
dataTransmition.setLogger(this.logger);
// if (!importDefinitionElement.strLogMode.equalsIgnoreCase("none")) {
this.logger.write("normal", "\nApplication is started.");
// }
this.timeCounter.setStartTime();
ByteArrayInputStream inStream = null;
ByteArrayOutputStream foStream = new ByteArrayOutputStream();
// Loading XML file and replacing include tags
LoaderXIncluder loaderInclude = new LoaderXIncluder(foStream);
LocationOfException locationOfException = new LocationOfException(this.strLoaderJobFileName);
loaderInclude.parseURI(this.strLoaderJobFileName);
inStream = new ByteArrayInputStream(foStream.toByteArray());
//for test only
// try {
// File file=new File("c:/Users/Rale/Octopus/ObjectLoader/InputStream.txt");
// FileOutputStream fileLogr=new FileOutputStream(file);
// if(file.exists())
// file.delete();
// fileLogr.write(foStream.toByteArray());
// fileLogr.close();
// } catch(Exception e) { System.out.println("File error"); }
//part for validating input xml file
try {
OctopusValidator validator = new OctopusValidator();
validator.validate(new ByteArrayInputStream(foStream.toByteArray()));
}
catch (Exception e) {
this.logger.write("normal", "Sorry, validation error occurred . Message was: " + e.getMessage());
BufferOctopusClass.getInstance().writeToBuffer(
"Sorry, validation error occurred . Message was: " + e.getMessage());
LoaderException le = new LoaderException("Exception:"+e.getMessage(),(Throwable)e);
this.logger.write("full", le.getStackTraceAsString());
throw le;
}
// if (!importDefinitionElement.strLogMode.equalsIgnoreCase("none")) {
this.logger.write("normal", "\nXML document is valid.");
// }
// Import attribute values from variable tags from XML
this.importVariable(inStream);
// Setting bReplaceInData if there is even one ReplaceInData attribut
// in variable tags
for (int i = 0; i < this.vecReplaceInData.size(); i++) {
if (this.vecReplaceInData.get(i).toString().equalsIgnoreCase("true"))
bReplaceInData = true;
}
// Change variable values in SQL, JDBC and Constants Tags in XML
this.foStreamTmp = foStream;
foStream = new ByteArrayOutputStream();
LoadVariable loadVariable = new LoadVariable(foStream, this);
loadVariable.parseURI();
//refresh inStream with replaced variables
inStream = new ByteArrayInputStream(foStream.toByteArray());
loaderJobReader.setDefaultLogMode(this.defaultLogMode);
loaderJobReader.importLoaderJobAttributes(inStream);
iImportJobs = this.parseImportJob(inStream);
iCopyTable = this.parseCopyTable(inStream);
iSqlTags = sqlElement.parseSql(inStream);
iEchoElements = this.parseEcho(inStream);
this.importRestartCounter(inStream);
vecXmlElements = this.parseMainElements(inStream);
//setting the last number of importDefinition tag
iLastImportDefinition = 0;
for (int i = 0; i < vecXmlElements.size(); i++) {
if (vecXmlElements.get(i).toString().equalsIgnoreCase("importDefinition"))
iLastImportDefinition = i;
}
jdbcParametersElement.parseTargetJDBCParameters(inStream);
DBConnectionManager connManager = new DBConnectionManager(jdbcParametersElement.
getTargetConnections());
Connection connToPools = null;
try {
this.isDefaultJdbc = jdbcParametersElement.parseImportJDBCDefaultParameters(inStream);
if (this.strVendorFileName != null && !this.strVendorFileName.equals(""))
configReaderTarget.setVendorFileName(this.strVendorFileName);
//this can be erased!!!?
configReaderTarget.readConfigValues(jdbcParametersElement.getTargetDBVendor(),
jdbcParametersElement.getTargetDriverName(), "target");
this.currentOidColumnName = configReaderTarget.getOidColumnName();
this.currentVersionColumnName = configReaderTarget.getVersionColumnName();
if (jdbcParametersElement.getJDBCTargetParameterDriver().equals("") ||
jdbcParametersElement.getJDBCTargetParameterDriver() == null)
jdbcParametersElement.setJDBCTargetParameterDriver(configReaderTarget.getDriverClassName());
Class.forName(jdbcParametersElement.getJDBCTargetParameterDriver());
int iImport = 0;
int iCopy = 0;
int iSql = 0;
int iEcho = 0;
//main loop
for (int l = 0; l < (iImportJobs + iCopyTable + iSqlTags + iEchoElements); l++) {
Object tempLogMode = this.logModes.get(l);
if( tempLogMode != null && !tempLogMode.equals("") )
this.logger.setEnabledLogLevels(tempLogMode.toString());
else
this.logger.setEnabledLogLevels(loaderJobReader.getDefaultLogMode());
//reset global variables
this.resetGlobalVariables();
relationsCache.resetRelationsCache();
checkRowCache.resetCheckRowCache();
// if (!importDefinitionElement.strLogMode.equalsIgnoreCase("none")) {
this.logger.write("normal",
"\nImport job No. " + (iImport + iCopy + iSql + 1) + " is started.");
// }
if (vecXmlElements.get(l).toString().equalsIgnoreCase("importDefinition")) {
this.logger.write("full", "Importing and parsing XML file is started.");
//importing specific jdbc parameters if any exist
this.parseAndImport(inStream, iImport);
jdbcParametersElement.parseImportJDBCParameters(inStream, iImport + 1, "importDefinition");
configReaderSource.readConfigValues(jdbcParametersElement.getDbVendor(),
jdbcParametersElement.getDriverName(), "source");
configReaderTarget.readConfigValues(jdbcParametersElement.getTargetDBVendor(),
jdbcParametersElement.getTargetDriverName(), "target");
// validStmt.setConfigReader(configReaderSource);
this.currentOidColumnName = configReaderTarget.getOidColumnName();
this.currentVersionColumnName = configReaderTarget.getVersionColumnName();
}
//rale 24.10.2003
else if (vecXmlElements.get(l).toString().equalsIgnoreCase("copyTable")) {
this.logger.write("full", "Importing and parsing XML file is started.");
this.parseAndImport(inStream, iCopy);
//this.logger.setEnabledLogLevels(importDefinitionElement.strCopyTableLogMode);
jdbcParametersElement.parseImportJDBCParameters(inStream, iCopy + 1, "copyTable");
configReaderSource.readConfigValues(jdbcParametersElement.getDbVendor(),
jdbcParametersElement.getDriverName(),
"source");
configReaderTarget.readConfigValues(jdbcParametersElement.getTargetDBVendor(),
jdbcParametersElement.getTargetDriverName(),
"target");
this.currentOidColumnName = configReaderTarget.getOidColumnName();
this.currentVersionColumnName = configReaderTarget.getVersionColumnName();
} else if (vecXmlElements.get(l).toString().equalsIgnoreCase("sql")) {
configReaderTarget.readConfigValues(jdbcParametersElement.getTargetDBVendor(),
jdbcParametersElement.getTargetDriverName(), "target");
this.currentOidColumnName = configReaderTarget.getOidColumnName();
this.currentVersionColumnName = configReaderTarget.getVersionColumnName();
//this don't send enything to logger (importSQLStatement)
this.logger.write("full", "Importing and parsing XML file is started.");
this.vecSqlStmt = sqlElement.importSQLStatement(inStream, iSql);
//defining the log mode
// if (!sqlElement.getSqlLogMode().equals("") && sqlElement.getSqlLogMode() != null)
//this.logger.setEnabledLogLevels(sqlElement.getSqlLogMode());
// else
// this.logger.setEnabledLogLevels(loaderJobReader.getDefaultLogMode());
//importing specific jdbc parameters if any exist
this.logger.write("full", "Importing and parsing XML file is started.");
jdbcParametersElement.parseImportJDBCParameters(inStream, iSql + 1, "sql");
}
if (vecXmlElements.get(l).toString().equalsIgnoreCase("importDefinition") ||
vecXmlElements.get(l).toString().equalsIgnoreCase("sql") ||
vecXmlElements.get(l).toString().equalsIgnoreCase("copyTable")) {
if (jdbcParametersElement.getJDBCSourceParameterDriver().equals("") ||
jdbcParametersElement.getJDBCSourceParameterDriver() == null)
jdbcParametersElement.setJDBCSourceParameterDriver(configReaderSource.
getDriverClassName());
if (jdbcParametersElement.getJDBCTargetParameterDriver().equals("") ||
jdbcParametersElement.getJDBCTargetParameterDriver() == null)
jdbcParametersElement.setJDBCTargetParameterDriver(configReaderTarget.
getDriverClassName());
}
this.logger.write("full", "Importing and parsing XML file is finished.");
connManager.setLoaderJobPath(this.strLoaderJobFileName);
connManager.setConnectionPrefix(configReaderTarget.getConnectionPrefix());
connManager.setParsePermission(configReaderTarget.getFileSystemDatabase());
try {
connToPools = connManager.getConnection(jdbcParametersElement.
getJDBCTargetParameterConnection());
//TODO ZK 17.6 2004. This make problem with Excel jdbc-odbc.
connToPools.setAutoCommit(false);
}catch (Exception ex) {
String message = "Can't get connection to Target Database." + "\n" +
"Maybe connection "
+ jdbcParametersElement.getJDBCTargetParameterConnection()
+ " is wrong. ";
LoaderException le = new LoaderException("SQLException: " + message + "\n" +
ex.getMessage() + "\n", (Throwable)ex);
this.logger.write("full", le.getStackTraceAsString());
throw le;
}
if (vecXmlElements.get(l).toString().equalsIgnoreCase("importDefinition")) {
if (importDefinitionElement.bRestartAutoCreate == true) {
dataTransmition.createRestartCounterTable(connToPools);
}
this.currentJobName = "importDefinition";
String importName = importDefinitionElement.strImportDefinitionName;
boolean doJob = true;
for (int i = 0; i < this.includeTables.size(); i++) {
if (importName.equalsIgnoreCase(this.includeTables.get(i).toString())) {
doJob = true;
break;
} else {
doJob = false;
}
}
if (doJob) {
try {
this.loadSource(connToPools);
}
catch (Exception ex) {
//this.logger.write("normal", "\t" + ex.getMessage().toString());
LoaderException le = new LoaderException("SQLException: ", (Throwable)ex);
this.logger.write("full", le.getStackTraceAsString());
if (importDefinitionElement.strOnErrorContinueXml.equalsIgnoreCase("true")) {
this.logger.write("normal",
"\tError : Application is not terminated because 'OnErrorContinue' attribute has value 'true'");
} else {
this.logger.write("normal",
"\tError : Application is terminated because 'OnErrorContinue' attribute has value 'false'");
connManager.release("true");
throw le;
}
}
//release resources
finally {
for (int i = 0; i < pstmtForInsert.size(); i++) {
String key = pstmtKeys.get(i).toString();
PreparedStatement pstmt = (PreparedStatement)pstmtForInsert.get(key);
pstmt.close();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -