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 google-appengine-j...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
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;
	}
}

Reply via email to