Commit 62df4993 authored by Georg Abenthung's avatar Georg Abenthung
Browse files

Writing query results works.

No related merge requests found
Showing with 57 additions and 21 deletions
+57 -21
......@@ -10,6 +10,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.sql.Statement;
import java.util.Date;
import at.ac.tuwien.infosys.aic13.publicdto.PublicCompany;
import at.ac.tuwien.infosys.aic13.publicdto.PublicSentimentQuery;
......@@ -48,44 +49,66 @@ public abstract class SentimentAnalysisService implements Runnable{
return connection;
}
/**
* This method reads the next unprocessed query from the database and marks it as processed.
* @return
*/
protected PublicSentimentQuery getNextQuery(){
PublicSentimentQuery qry = null;
synchronized(connectionLock){
try {
Statement stmt = getConnection().createStatement();
ResultSet res = 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");
Long id = null;
ResultSet res = 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 = new PublicSentimentQuery();
id = res.getLong("id");
Date dateFrom = res.getDate("dateFrom");
Date dateTo = res.getDate("dateTo");
PublicCompany company = new PublicCompany();
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){
PreparedStatement pstmt = 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 (SQLException e) {
logger.error("Error while getting SentimentQuery or marking it as 'processed'.", e);
}
}
}// END of synchronized-block
return qry;
}
/**
* This method writes the result back to the database.
* @param result
*/
protected void writeResult(PublicSentimentQueryResult result){
synchronized(connectionLock){
}
try {
PreparedStatement pstmt = connection.prepareStatement("insert into sentimentQueryResult values (?,?,?)");
pstmt.setLong(1, result.getQueryId());
pstmt.setInt(2, result.getNumberOfTweets());
pstmt.setDouble(3, result.getSentimentValue());
pstmt.executeUpdate();
pstmt.close();
} catch (SQLException e) {
logger.error("Error while writing SentimentQueryResult (77K1PG).", e);
}
}// END of synchronized-block
logger.info("SentimentQueryResult written to DB (7ZS89Q): "+result);
}
@Override
......
package at.ac.tuwien.infosys.aic13.cloudscale.service.impl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import at.ac.tuwien.infosys.aic13.cloudscale.service.SentimentAnalysisService;
import at.ac.tuwien.infosys.aic13.cloudscale.workers.DummyWorker;
import at.ac.tuwien.infosys.aic13.publicdto.PublicSentimentQuery;
import at.ac.tuwien.infosys.aic13.publicdto.PublicSentimentQueryResult;
public class SentimentAnalysisServiceDummyImpl extends SentimentAnalysisService {
private static final Logger logger = LoggerFactory.getLogger(SentimentAnalysisServiceCloudScaleImpl.class);
@Override
public void runSentimentAnalysis(){
SentimentAnalysisRunner runner = new SentimentAnalysisRunner();
......@@ -28,6 +23,7 @@ public class SentimentAnalysisServiceDummyImpl extends SentimentAnalysisService
// Creating and starting a worker... this runs through AOP eaving n cloudscale.
DummyWorker worker = new DummyWorker();
PublicSentimentQueryResult publicResult = worker.doTheAnalysisStuff(publicQuery);
publicResult.setQueryId(publicQuery.getQueryId());
writeResult(publicResult);
}
......
......@@ -11,8 +11,6 @@ public class DummyWorker {
@DestructCloudObject
public PublicSentimentQueryResult doTheAnalysisStuff(PublicSentimentQuery query){
System.out.println("Doing query for "+query+ "("+query.getCompany().getName()+") (2WDR8S).");
// Do sentiment analysis...
try {
Thread.sleep(Utils.getRandom(250, 5000));
} catch (InterruptedException e) {
......
......@@ -85,7 +85,7 @@ public class DefaultController {
}
SentimentQuery qry = new SentimentQuery();
Date now = new Date();
qry.setFrom(Utils.getDateMinusHours(now, 5));
qry.setFrom(Utils.getDateMinusHours(now, 24));
qry.setTo(now);
// This is the model Attribute used for the Create Query Form.
......
......@@ -40,13 +40,13 @@ public class SentimentQuery implements DTO {
private Company company;
@Column(name="dateFrom")
@Temporal(TemporalType.TIMESTAMP)
@DateTimeFormat(pattern="dd.MM.yyyy HH:mm")
@Temporal(TemporalType.DATE)
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date from;
@Column(name="dateTo")
@Temporal(TemporalType.TIMESTAMP)
@DateTimeFormat(pattern="dd.MM.yyyy HH:mm")
@Temporal(TemporalType.DATE)
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date to;
@Column(name="processed")
......
......@@ -12,6 +12,7 @@ public class PublicSentimentQuery implements Serializable{
*/
private static final long serialVersionUID = -7420009167323797625L;
private Long queryId;
private PublicCompany company;
private Date from;
private Date to;
......@@ -49,6 +50,14 @@ public class PublicSentimentQuery implements Serializable{
public void setTo(Date to) {
this.to = to;
}
public Long getQueryId() {
return queryId;
}
public void setQueryId(Long queryId) {
this.queryId = queryId;
}
......
......@@ -8,6 +8,7 @@ public class PublicSentimentQueryResult implements Serializable{
*
*/
private static final long serialVersionUID = 5340533061979605521L;
private Long queryId;
private Integer numberOfTweets;
private Double sentimentValue;
......@@ -32,4 +33,12 @@ public class PublicSentimentQueryResult implements Serializable{
public void setSentimentValue(Double sentimentValue) {
this.sentimentValue = sentimentValue;
}
public Long getQueryId() {
return queryId;
}
public void setQueryId(Long queryId) {
this.queryId = queryId;
}
}
......@@ -3,6 +3,7 @@
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment