@@ -48,44 +49,66 @@ public abstract class SentimentAnalysisService implements Runnable{
returnconnection;
}
/**
* This method reads the next unprocessed query from the database and marks it as processed.
* @return
*/
protectedPublicSentimentQuerygetNextQuery(){
PublicSentimentQueryqry=null;
synchronized(connectionLock){
try{
Statementstmt=getConnection().createStatement();
ResultSetres=stmt.executeQuery("select s.id as id, c.name as name from sentimentQuery AS s, company as c where s.processed = 0 and s.company = c.id limit 0,1");
Longid=null;
ResultSetres=stmt.executeQuery("select s.id as id, s.dateFrom as dateFrom, s.dateTo as dateTo, c.name as name from sentimentQuery AS s, company as c where s.processed = 0 and s.company = c.id limit 0,1");
if(res.next()){
qry=newPublicSentimentQuery();
id=res.getLong("id");
DatedateFrom=res.getDate("dateFrom");
DatedateTo=res.getDate("dateTo");
PublicCompanycompany=newPublicCompany();
company.setName(res.getString("name"));
qry.setCompany(company);
qry.setFrom(dateFrom);
qry.setTo(dateTo);
qry.setQueryId(res.getLong("id"));
}
res.close();
stmt.close();
//Mark as processed
if(id!=null){
if(qry!=null&&qry.getQueryId()!=null){
PreparedStatementpstmt=connection.prepareStatement("update sentimentQuery SET processed=? where id = ?");
pstmt.setBoolean(1,true);
pstmt.setLong(2,id);
pstmt.setLong(2,qry.getQueryId());
pstmt.executeUpdate();
pstmt.close();
logger.info("Query \""+qry+"\" marked as processed.");
}
}catch(SQLExceptione){
logger.error("Error while getting SentimentQuery or marking it as 'processed'.",e);
}
}
}// END of synchronized-block
returnqry;
}
/**
* This method writes the result back to the database.