package siebog.agents.test.wc; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import javax.annotation.PostConstruct; import javax.ejb.PostActivate; import javax.ejb.Remote; import javax.ejb.Stateful; import org.jboss.ejb3.annotation.Clustered; import org.slf4j.LoggerFactory; import org.slf4j.Logger; import siebog.agents.Agent; import siebog.agents.XjafAgent; import siebog.interaction.ACLMessage; import siebog.interaction.Performative; @Stateful @Remote(Agent.class) public class WordCounter extends XjafAgent { private static final Logger LOG = LoggerFactory.getLogger(WordCounter.class); private static final long serialVersionUID = 1L; private ArrayList<String> lines; private ArrayList<Integer> wordCounts; private int iii; @Override protected void onMessage(ACLMessage msg) { // LOG.info("Agent {} processing lines at {}.", myAid.getName(), getNodeName()); // if (lines == null) { // lines = readLines(msg.content); // wordCounts = new ArrayList<Integer>(lines.size()); // } LOG.info("onMessage of {}", myAid.getName()); processLine(); } private void processLine() { // int processed = wordCounts.size(); // if (processed < lines.size()) { // int wc = getWordCount(lines.get(processed)); // wordCounts.add(wc); if (++iii < 3) doNextLine(); // } else { // LOG.info("Agent {} counter: {}", myAid.getName(), wordCounts); // } } private int getWordCount(String line) { return line.split("\\s+").length; } private void doNextLine() { try { Thread.sleep(1000); } catch (InterruptedException e) { return; } ACLMessage msg = new ACLMessage(Performative.INFORM); msg.receivers.add(myAid); msm().post(msg); } private ArrayList<String> readLines(String fileName) { ArrayList<String> lines = new ArrayList<>(); try (BufferedReader in = new BufferedReader(new FileReader(fileName))) { String line; while ((line = in.readLine()) != null) lines.add(line); } catch (IOException ex) { throw new IllegalArgumentException(ex); } return lines; } }