Ich habe mich an einem Java-Agenten versucht, der Abfragen auf eine Oracle -DB startet.
Jetzt habe ich mehrere Fragen:
a) habe ich alles recyceld, was ich recyclen muss?
b) die einzelnen Abfragen dauern zwischen 7 und 8 Sekunden, kann ich die Abfrage in checkyyyenInfo anders fassen, so dass das schneller geht?
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.*;
import java.lang.*;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Vector;
import lotus.domino.*;
public class yyyenstellenPruefung extends AgentBase {
Session session = null;
Database dbCurrent = null; //aktuelle DB
//für Oracle-Verbindung
View oracleConfigView = null;
Document docOracleConfig = null; //Konfigurationseinstellungen für Oracle
String strOracleServer = null; //
String strOracleView = null; //
String strOracleUser = null; //
String strOraclePwd = null; //
Connection conn=null; //
ResultSet rs=null; //
Statement stmt=null; //
// zu bearbeitende Dokumente
View terminalView = null; //zur 'Ermittlung der Dokumente
long newDocs = 0;
Document terminalDoc = null; //aktuelles Terminaldoc
Document nextDoc = null;
// Protokolldokument
Document logDoc = null; //Protokoll
GregorianCalendar cal=null; //
Item logItem=null; //
int logCount=0; //
int logDocCount=1; //
public void NotesMain() {
try {
System.out.println("Agent: Check für yyyenstellenaenderungen gestartet");
session = getSession();
AgentContext agentContext = session.getAgentContext();
dbCurrent = agentContext.getCurrentDatabase(); // aktuelle Datenbank holen
//Erstellung Protokolldokument
cal = new GregorianCalendar();
logDoc = dbCurrent.createDocument();
logDoc.replaceItemValue("Form","Log");
logDoc.replaceItemValue("Lauf","Lauf vom: " + cal.get(Calendar.DATE)+"."+(cal.get(Calendar.MONTH)+1)+"."+cal.get(Calendar.YEAR)+" " + cal.get(Calendar.HOUR_OF_DAY)+":"+cal.get(Calendar.MINUTE)+" Uhr");
logDoc.replaceItemValue("Start",cal.get(Calendar.DATE)+"."+(cal.get(Calendar.MONTH)+1)+"."+cal.get(Calendar.YEAR)+" " + cal.get(Calendar.HOUR_OF_DAY)+":"+cal.get(Calendar.MINUTE)+" Uhr");
logDoc.replaceItemValue("Log","");
logItem = logDoc.getFirstItem("Log");
logEvent("Agent: Check für yyyenstellenüberprüfung gestartet");
logDoc.save(true,false); //einmal abspeichern, damit Abbruch ersichtlich wird
//Einlesen der Oraclekonfigurationseinstellung
oracleConfigView = dbCurrent.getView("(luConfig)");
docOracleConfig = oracleConfigView.getDocumentByKey("OracleConfig");
strOracleServer = docOracleConfig.getItemValueString("OracleServer");
strOracleView = docOracleConfig.getItemValueString("OracleView");
strOracleUser = docOracleConfig.getItemValueString("OracleUser");
strOraclePwd = docOracleConfig.getItemValueString("OraclePwd");
//Erstellen der Verbindung
// achtung: wenn hier Fehlermeldung kommt wegen fehlendem Oracle-treiber --->
//im Agent müssen die Klassen als JArdatei eingehängt sein, wird unter 'Projekt bearbeiten' angezeigt, notfalls auf OracleHomeopage suchen
logEvent("vor Driver " + System.currentTimeMillis());
DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
logEvent("vor conn " + System.currentTimeMillis());
conn = DriverManager.getConnection("jdbc:oracle:thin:@"+strOracleServer, strOracleUser, strOraclePwd); //Aufbau Verbindung
if (conn.isClosed())
logEvent("Oracle Connection is not open yet.");
stmt = conn.createStatement();
logEvent("Datenbankanbindung an ACAT erfolgreich hergestellt");
// Ermitteln der zu überprüfenden Dokumente
terminalView = dbCurrent.getView("(luACATAbfrage)");
terminalDoc = terminalView.getFirstDocument();
while (terminalDoc != null) {
nextDoc = terminalView.getNextDocument(terminalDoc);
checkyyyenInfo(terminalDoc);
terminalDoc.recycle();
terminalDoc = nextDoc;
} //Ende While
logDoc.save(true,false);
stmt.close();
conn.close();
} catch(Exception e) {
e.printStackTrace();
}
System.gc();
} //Schließen Main
public void checkyyyenInfo(Document updateDoc)
{
try {
logEvent("vor Abfrage " + System.currentTimeMillis());
String common = updateDoc.getItemValueString("zzzName");
rs = stmt.executeQuery ("SELECT * FROM " + strOracleView + " WHERE zzzName='"+common + "'");
logEvent(common + System.currentTimeMillis());
if (rs.next())
{
String strxxxstelle = new String(rs.getString(3));
String stryyyenstelle = new String(rs.getString(4));
String strOldyyyenstelle = updateDoc.getItemValueString("yyyenstelle");
String strOldxxxstelle = updateDoc.getItemValueString("xxxstelle");
boolean result1 = strOldyyyenstelle.equals(stryyyenstelle );
boolean result2 = strOldxxxstelle.equals(strxxxstelle );
if ( result1 == false|| result2 == false)
{
fillyyyenInfo (updateDoc, stryyyenstelle, strxxxstelle);
}
}
rs.close();
}
catch(Exception e) {
e.printStackTrace();
}
}// Schliessen checkyyyenstellenInfo
public void fillyyyenInfo(Document updateDoc, String stryyyenstelle,String strxxxstelle)
{
try {
String common = updateDoc.getItemValueString("zzzName");
updateDoc.replaceItemValue("xxxstelle",stryyyenstelle);
updateDoc.replaceItemValue("yyyenstelle",strxxxstelle);
logEvent(common + System.currentTimeMillis());
updateDoc.save(true,false);
}
catch(Exception e) {
e.printStackTrace();
}
}// Schliessen FillyyyenstellenInfo
public void logEvent(String eventToBeLogged)
{
try {
logCount++;
logItem.appendToTextList(eventToBeLogged);
if (logCount > 200)
{
logDocCount++;
logCount=0;
logDoc.save(true,false);
logDoc = dbCurrent.createDocument();
logDoc.replaceItemValue("Form","Log");
logDoc.replaceItemValue("Lauf","Lauf vom: " + cal.get(Calendar.DATE)+"."+(cal.get(Calendar.MONTH)+1)+"."+cal.get(Calendar.YEAR)+" " + cal.get(Calendar.HOUR_OF_DAY)+":"+cal.get(Calendar.MINUTE)+" Uhr " + logDocCount + ". Teil");
logDoc.replaceItemValue("Log","");
logItem = logDoc.getFirstItem("Log");
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}