Good morning.
I explain my situation.
I have a java application that performs a process of inserting and executing procedures, the program works well if I execute it from my machine.
The detail is that I put it on a server and create a crontab to run every 15 minutes, after 1 hour I check my server and the process is 4 times.
Here is my java code:
package applicationserver.appPortal;
import java.util.*;
import java.sql.*;
import oracle.sql.*;
import java.util.ResourceBundle;
import oracle.jdbc.OracleDriver;
public class ReplicaRemesas extends applicationserver.classes.Template
{
String qry = "";
public static String lista="";
ResourceBundle bundlep;
//Función que inicia el proceso
@Override
public void run()
{
try
{
this.setParams(); //Función parametros
while (true){
this.checkActive();
this.checkHour2(); //Verifica la hora en que debe estar activa
this.checkPendings();
}
}
catch (Exception e) {
System.out.println(e.getMessage());
}
}
// Indica la definición de parametros
@Override
public void setParams()
{
this.setAppName("ReplicaRemesas"); //Nombre de la Aplicacion
this.dhEasy.setResourceName(this.getResource()); //Asigna parametros de properties
//this.bundlep = ResourceBundle.getBundle(this.getIdeaCMX()); //Parametros de Portal
//this.setMilliseconds(900000); //3Min (1Minuto->60000 milisegundos)
this.setMilliseconds(180000); //3 minutos;
this.setHourI(900); //Hora de inicio 9:00 am
this.setHourT(100); //Hora de termino 1:00 am
//this.setMailHeader("Carga Pagina Clientes!!"); //Encabezado de Correo
}
//Verifica que tiene pendientes
private void checkPendings(){
String valor="";
try{
String urlProd = "jdbc:oracle:thin:@192.168.0.233:1521:pam";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection connProd = DriverManager.getConnection(urlProd, "Movil", "noesqwerty7");
if(!connProd.isClosed() || connProd!=null){
Statement stmtProd = connProd.createStatement();
String query="select COUNT(*) AS TOTAL from bloques_remesas where estatus='PENDIENTE' ";
ResultSet rs2 = stmtProd.executeQuery(query);
while(rs2.next()){
valor = rs2.getString("TOTAL");
}
if(valor.equals("0")){
System.out.println("Inactivo");
}else {
inserta();
replica();
templated();
updateMovil();
cleanTemp();
}
connProd.close();
}
else {
sleep(this.getMilliseconds());
}
System.out.println("TerminaCuenta pendientes");
}catch(Exception e){
System.out.println("Error " + e);
}
}
public static void inserta(){
try{
DriverManager.registerDriver(new OracleDriver());
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.249:1521:easy", "app", "q4e0pz12");
List<String> list = new ArrayList<String>();
CallableStatement stmt = conn.prepareCall("BEGIN p_array_test(?); END;");
String cadena="\"";
String urlProd = "jdbc:oracle:thin:@192.168.0.233:1521:pam";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection connProd = DriverManager.getConnection(urlProd, "Movil", "noesqwerty7");
Statement stmtProd = connProd.createStatement();
String qry ="SELECT * FROM BLOQUES_REMESAS WHERE ESTATUS='PENDIENTE'";
ResultSet rs2 = stmtProd.executeQuery(qry);
while(rs2.next()){
list.add(rs2.getString("remesa"));
lista += rs2.getString("remesa")+",";
}
System.out.println(list);
lista = lista.substring(0, lista.length()-1);
System.out.println("lista normal global> " + lista);
ArrayDescriptor arrDesc =ArrayDescriptor.createDescriptor("T_VARCHAR2_ARRAY", conn);
Array array = new ARRAY(arrDesc, conn, list.toArray());
stmt.setArray(1, array);
stmt.execute();
conn.commit();
conn.close();
connProd.close();
}catch(Exception e){
System.out.println("Error " + e);
}
}
public static void replica(){
try{
DriverManager.registerDriver(new OracleDriver());
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.249:1521:easy", "app", "q4e0pz12");
CallableStatement stmt = conn.prepareCall("BEGIN NCTE_REPLICA(); COMMIT; END;");
stmt.execute();
conn.commit();
conn.close();
System.out.println("Termina Replica");
}catch(Exception e){
System.out.println("Error "+ e);
}
}
public static void templated(){
try{
DriverManager.registerDriver(new OracleDriver());
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.249:1521:easy", "app", "q4e0pz12");
CallableStatement stmt = conn.prepareCall("BEGIN TEMPLATED_REPLICA(); COMMIT; END;");
stmt.execute();
conn.commit();
conn.close();
System.out.println("Termina templated");
}catch(Exception e){
System.out.println("Error "+ e);
}
}
public static void updateMovil(){
try{
String urlProd = "jdbc:oracle:thin:@192.168.0.233:1521:pam";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection connProd = DriverManager.getConnection(urlProd, "Movil", "noesqwerty7");
Statement stmtProd = connProd.createStatement();
String qry="update bloques_remesas set estatus='PROCESADO' where remesa in ("+lista+")";
ResultSet rs2 = stmtProd.executeQuery(qry);
connProd.commit();
connProd.close();
System.out.println("Termina updateMovil");
}catch(Exception e){
System.out.println("Error " + e);
}
}
public static void cleanTemp(){
try{
String urlProd = "jdbc:oracle:thin:@192.168.0.249:1521:easy";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection connProd = DriverManager.getConnection(urlProd, "app", "q4e0pz12");
Statement stmtProd = connProd.createStatement();
String qry="DELETE FROM APP.STRINGS";
ResultSet rs2 = stmtProd.executeQuery(qry);
connProd.commit();
connProd.close();
System.out.println("Terminado clean");
}catch(Exception e){
System.out.println("Error " + e);
}
}
}
My crontab on the server:
*/15 * * * * java -jar "/var/tmp/AppPortal.jar" ReplicaRemesas
I do not know if I have to put the sleep in after my checkPendings method finishes the process.
I hope you can help me.
Greetings.