package siebog.radigost;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.LocalBean;
import javax.ejb.Singleton;
import com.datastax.driver.core.BoundStatement;
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.PreparedStatement;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Row;
import com.datastax.driver.core.Session;
@Singleton
@LocalBean
public class Cassandra {
private static final String KEYSPACE = "clientagents";
private static final String TABLE_STATES = "states";
private Cluster cluster;
private Session session;
private PreparedStatement stGet;
private PreparedStatement stSet;
@PostConstruct
public void postConstruct() {
cluster = Cluster.builder().addContactPoint("localhost").build();
session = cluster.connect(KEYSPACE);
stGet = session.prepare(String.format("SELECT state FROM %s WHERE aid = ?;", TABLE_STATES));
stSet = session.prepare(String.format("INSERT INTO %s(aid, state) VALUES(?, ?);",
TABLE_STATES));
}
@PreDestroy
public void preDestroy() {
session.close();
cluster.close();
}
public String getState(String aid) {
BoundStatement bound = stGet.bind(aid);
ResultSet set = session.execute(bound);
Row row = set.one();
return row == null ? "" : row.getString(0);
}
public void setState(String aid, String state) {
BoundStatement bound = stSet.bind(aid, state);
session.executeAsync(bound);
}
}