Hi all, I am returning the results from a poll with a simple results
servlet that queries the database two times. For some reason, the
results servlet is causing drastic CPU usage and I can't figure out
why. Can someone look in here and see if there is something extremely
obvious that is causing CPU usage to go overboard?
I attached the java file...
--
You received this message because you are subscribed to the Google Groups
"Google App Engine for Java" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-appengine-java?hl=en.
package net.creativelift.snappypoll;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import java.util.logging.Logger;
import javax.jdo.PersistenceManager;
import javax.jdo.Query;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ResultsServlet extends HttpServlet
{
private static final Logger log = Logger.getLogger(VoteServlet.class.getName());
private PersistenceManager pm;
private String poll_id;
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException
{
poll_id = req.getParameter("poll_id");
pm = PMF.get().getPersistenceManager();
List<Vote> votes = getVotes();
resp.setContentType("text/xml");
PrintWriter out = resp.getWriter();
try
{
Poll poll = getPoll();
int[] countArray = groupedVotes(votes,poll.getAnswers().length);
out.println("<?xml version=\"1.0\"?>");
out.println("<Poll>");
out.println("<question>" + poll.getQuestion() + "</question>");
out.println("<answers>");
int index = 0;
for (String answer : poll.getAnswers())
{
out.println("<answer>");
out.println("<copy>");
out.println(answer);
out.println("</copy>");
out.println("<votes>" + countArray[index] + "</votes>");
out.println("</answer>");
index += 1;
}
out.println("</answers>");
out.println("</Poll>");
}
catch(IndexOutOfBoundsException e)
{
out.println("<?xml version=\"1.0\"?>");
out.println("<Poll />");
}
pm.close();
}
private Poll getPoll() throws IndexOutOfBoundsException
{
Query query = pm.newQuery(Poll.class);
query.setFilter("poll_id == pollID");
query.declareParameters("String pollID");
List<Poll> polls = (List<Poll>) pm.newQuery(query).execute(poll_id);
Poll poll = polls.get(0);
return poll;
}
private List<Vote> getVotes()
{
Query query = pm.newQuery(Vote.class);
query.setFilter("poll_id == pollID");
query.declareParameters("String pollID");
List<Vote> votes = (List<Vote>) pm.newQuery(query).execute(poll_id);
return votes;
}
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException
{
/*String poll_id = req.getPathInfo().substring(1,req.getPathInfo().length());
RequestDispatcher newView = req.getRequestDispatcher( "/results.jsp?poll_id=" + poll_id );
try
{
newView.include( req, resp );
}
catch(ServletException e)
{
System.out.println("oops");
}*/
resp.setContentType("text/xml");
PrintWriter out = resp.getWriter();
out.println("<?xml version=\"1.0\"?>");
out.println("<Poll />");
}
private int[] groupedVotes(List<Vote> votes,Integer answersAmount)
{
int[] countArray = new int[answersAmount];
for(Vote vote : votes)
{
countArray[vote.getAnswer()] += 1;
}
return countArray;
}
}