Ciao a tutti! Sono nuova, quindi comincio con il presentarmi: piacere Monica!
Premetto che sono alle prime armi con Java.
Per la mia problematica parto col dire cosa uso:
- pgAdmin III (Database)
- Eclipse (programmazione)
- Chat (OpenFire)
- gestionale via web
Ed ecco il mio problema :
Ho creato un programma che si collega a:
- un database (utilizzo pgAdmin III) di un gestionale che funziona via web;
- una chat (OpenFire)
In poche parole, il mio programma deve mandare alla chat un messaggio dove avvisa che ci sono delle notifiche nel gestionale che non sono state lette, ovvero sono arrivati messaggi nuovi. In pratica deve funzionare come il social network Facebook, dove si ricevono le notifiche ogni volta che un qualcuno ci manda un messaggio e, una volta letto, non si riceve più la notifica di quel messaggio poiché lo abbiamo letto.
Attualmente il mio programma manda alla chat un messaggio dove vengono fatte vedere tutte le notifiche lette e non lette di un dato giorno (e se voglio anche l'ora) che decido io nella Run Configuration di Eclipse (in Arguments), quindi il mio programma attualmente non funziona nel modo corretto poiché le notifiche dei messaggi già letti non devo più riceverle nella chat mentre invece le ricevo ancora...
Se può servire, il codice da me scritto è:
package net.(azienda).(gestionale).xmpp;
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import net.(azienda).(gestionale).(gestionale).Utility;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import java.util.Date;
public class XmppInfinity {
/*
* <root>
* <urlDb>jdbc:postgresql://localhost/test?user=fred&password==true</urlDb>
* <xmpp username="" password="" server="" port="" option1="" option2=""/>
*
* <query sql="" target=""/>
*
* </root>
*
* Parsing parameter failed, Missing required options: mode, s, port, u, p, targetJID, message
* usage: sms - simple message sender, version 0.1
* -message <message> message to send
* -mode <mode> u - simple message to user, c - message to chatroom
* -p <password> password to login at chatserver
* -port <port> port of chatserver
* -s <server> hostname of chatserver
* -targetJID <targetJID> JID (Jabber ID) to talk to (user or chatroom)
* -u <username> user name to login at chatserver
*
*
*
*
*
*
*
*
*/
public static void main(String[] args) {
final String URLDB ="urlDb";
final String QUERY ="query";
final String QUERYSQL ="sql";
final String LASTRUN ="%%lastrun%%";
final String QUERYTARGET ="target";
final String QUERYMESSAGE ="message";
final String SERVER="server";
final String PORT="port";
final String USERNAME="username";
final String USERPASSWORD="password";
final String OPTION1="option1";
final String OPTION2="option2";
final String XMPP="xmpp";
String server="";
String port="";
String username="";
String userPassword="";
String option1="";
String option2="";
String lastrun="";
String filename = args[0];
File fileConf = new File(filename);
if(!fileConf.exists()) {
System.out.println("Il file dei parametri non esiste");
System.exit(1);
}
Document fileConfDoc =null;
try {
fileConfDoc = Utility.file2Document(fileConf);
} catch (Exception e) {
System.out.println(e.getMessage());
return;
}
lastrun=args[1];
server=((Element) fileConfDoc.getElementsByTagName(XMPP).item(0)).getAttribute(SERVER);
port=((Element) fileConfDoc.getElementsByTagName(XMPP).item(0)).getAttribute(PORT);
username=((Element) fileConfDoc.getElementsByTagName(XMPP).item(0)).getAttribute(USERNAME);
userPassword=((Element) fileConfDoc.getElementsByTagName(XMPP).item(0)).getAttribute(USERPASSWORD);
option1=((Element) fileConfDoc.getElementsByTagName(XMPP).item(0)).getAttribute(OPTION1);
option2=((Element) fileConfDoc.getElementsByTagName(XMPP).item(0)).getAttribute(OPTION2);
Connection connection = null;
String url=fileConfDoc.getElementsByTagName(URLDB).item(0).getTextContent();
try {
connection = DriverManager.getConnection(url);
} catch (SQLException e) {
System.out.println("ConnectionPoolAdapter.getConnection getMessage: " + e.getMessage() + " getSQLState: " + e.getSQLState() + " getErrorCode: " + e.getErrorCode());
}
NodeList query = fileConfDoc.getElementsByTagName(QUERY);
for (int i = 0; i < query.getLength(); i++) {
Element riga=(Element) query.item(i);
String sql=riga.getAttribute(QUERYSQL);
sql=sql.replaceAll(LASTRUN,lastrun);
String targetId=riga.getAttribute(QUERYTARGET);
System.out.println("query: "+sql+"\ntarget: "+targetId);
Statement st=null;
ResultSet rs=null;
String message="";
try {
st = connection.createStatement();
rs= st.executeQuery(sql);
while (rs.next()) {
message+=rs.getString(QUERYMESSAGE);
}
if(message.trim().length()>1) {
String[] props= {option1,option2,"-s",server,"-port",port,"-u",username,"-p",userPassword,"-targetJID",targetId+"@"+server, "-message","'"+message+"'"};
String parametri="";
for (int j = 0; j < props.length; j++) {
parametri+=props[j];
}
System.out.println("parametri: "+parametri);
com.starwit.xmpp.MainClass.main(props);
}else {
System.out.println("Non ho trasmesso nulla");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}[/i]
Come potete vedere ho creato e utilizzato il
lastrun ma, come già detto, il programma attualmente non va correttamente poiché ogni volta che faccio partire il programma nella chat ricevo tutte le notifiche della giornata, ovvero dei messaggi letti e non letti, mentre nella chat devo vedere solo le notifiche dei messaggi appena ricevuti ovvero non letti.
Qualcuno di voi sa aiutarmi a riguardo? Io non so più dove battere la testa!
Grazie!