Hi Mahsa,

You have these imports:
        import com.beoui.geocell.GeocellManager;
        import com.beoui.geocell.model.BoundingBox;
        import com.beoui.geocell.model.CostFunction;
        import com.beoui.geocell.model.GeocellQuery;
        import com.beoui.geocell.model.Point;

So, one obvious question since you are getting NoClassDefFoundError:
com/beoui/geocell/model/Point is: Did you put the appropriate JAR file
in WEB-INF/lib or if these classes are not in a JAR, did you put them
in WEB-INF/classes directory?

Stephen Johnson

On Jul 13, 1:13 pm, Mahsa <mahsa.ghafour...@gmail.com> wrote:
> Hello,
>
> I am developing a simple GIS cloud application using Google App Engine
> & Geomodel. In this application, I would like to store latitude and
> longitude of points from user, & later on query them using boundingbox
> & proximity queries. I am experiencing problem while trying to access
> the server through a browser. I appreciate it if someone help me with
> this regard.
>
> I am using Eclipse, and here is what I did:
>
> 1) Created a Web application project enabling only Google App Engine
> (1.3.4)(as Google SDK)
>
> 2) Created a simple jsp file in "war" folder to get latitude &
> longitude from user
>
> 3) Created two java classes, UseGeocell and ObjectToSave. UseGeocell
> class is similar to the code 
> inhttp://code.google.com/p/javageomodel/source/browse/trunk/geocell/src...
> ObjectToSave is 
> exactlyhttp://code.google.com/p/javageomodel/source/browse/trunk/geocell/src...
>
> 4)In my Servlet I defined an object of type UseGeocell and called
> testHowToSaveGeocellsInDatabase function in order to save latitude &
> longitude that are obtained from the input
>
> Here is my code:
>
> My UseGeocell class:
>
> package edu.pitt.Test8_Geomodel_GAE;
>
>         import java.util.ArrayList;
>         import java.util.List;
>         import java.util.logging.Level;
>         import java.util.logging.Logger;
>
>         import javax.jdo.PersistenceManager;
>
>         import junit.framework.Assert;
>         import junit.framework.TestCase;
>
>         import com.beoui.geocell.GeocellManager;
>         import com.beoui.geocell.model.BoundingBox;
>         import com.beoui.geocell.model.CostFunction;
>         import com.beoui.geocell.model.GeocellQuery;
>         import com.beoui.geocell.model.Point;
>
>         /**
>          * Unit test also used to explain how to use Geocell class.
>          *
>          * @author Alexandre Gellibert <alexandre.gellib...@gmail.com>
>          *
>          */
>         public class UseGeocell extends TestCase {
>
>             private final Logger log = Logger.getLogger("com.beoui.utils");
>             public ObjectToSave obj;
>
>             /**
>              * First step is to save your entities.
>              * In database, you don't save only latitude and longitude of
> your point but also geocells around this point.
>              */
>             public void testHowToSaveGeocellsInDatabase(double lat, double
> lon) {
>                 // Incoming data: latitude and longitude (Bordeaux for
> instance)
>                 //double lat = 44.838611;
>                 //double lon = -0.578333;
>
>                 // Transform it to a point
>                 Point p = new Point(lat, lon);
>
>                 // Generates the list of GeoCells
>                 List<String> cells = GeocellManager.generateGeoCell(p);
>
>                 // Save your instance
>                 obj = new ObjectToSave();
>                 obj.setLatitude(lat);
>                 obj.setLongitude(lon);
>                 obj.setGeocells(cells);
>
>                 //objDao.save(obj);
>
>                 // Just checking that cells are not empty
>                 Assert.assertTrue(cells.size() > 0);
>
>                 // Show in the log what cells are going to be saved
>                 log.log(Level.INFO, "Geocells to be saved for Point("+lat
> +","+lon+") are: "+cells);
>             }
>
>             /**
>              * Second step, now entities are in database, we can query on
> them.
>              * Here is the example of a bounding box query.
>              *
>              */
>             public void testHowToQueryOnABoundingBox(double latSW, double
> lonSW, double latNE, double lonNE) {
>                 // Incoming data: latitude and longitude of south-west and
> north-east points (around Bordeaux for instance =) )
>                 //double latSW = 44.8;
>                 //double lonSW = -0.6;
>
>                // double latNE = 44.9;
>                // double lonNE = -0.7;
>
>                 // Transform this to a bounding box
>                 BoundingBox bb = new BoundingBox(latNE, lonNE, latSW, lonSW);
>
>                 // Calculate the geocells list to be used in the queries
> (optimize list of cells that complete the given bounding box)
>                 List<String> cells = GeocellManager.bestBboxSearchCells(bb,
> null);
>
>                 // OR if you want to use a custom "cost function"
>                 List<String> cells2 = GeocellManager.bestBboxSearchCells(bb,
> new CostFunction() {
>
>                     @Override
>                     public double defaultCostFunction(int numCells, int
> resolution) {
>                         if(numCells > 100) {
>                             return Double.MAX_VALUE;
>                         } else {
>                             return 0;
>                         }
>                     }
>                 });
>
>                 // Use this in a query
>                 // In Google App Engine, you'll have something like below. In
> hibernate (or whatever else), it might be a little bit different.
> //                    String queryString = "select from ObjectToSave where
> geocellsParameter.contains(geocells)";
> //                    Query query = pm.newQuery(query);
> //                query.declareParameters("String geocellsParameter");
> //                query.declareParameters("String geocellsP");
> //                List<ObjectToSave> objects = (List<ObjectToSave>)
> query.execute(cells);
>
>                 // Just checking that cells are not empty
>                 Assert.assertTrue(cells.size() > 0);
>                 Assert.assertTrue(cells2.size() > 0);
>
>                 // Show in the log what cells shoud be used in the query
>                 log.log(Level.INFO, "Geocells to use in query for
> PointSW("+latSW+","+lonSW+") ; PointNE("+latNE+","+lonNE+") are:
> "+cells);
>             }
>
>             /**
>              * To test proximity search, you have to give your base query and
> it will be enhanced with geocells restrictions.
>              *
>              */
>             // TODO configure persistent manager to run a real test
>             public void testHowToQueryWithProximitySearch(double lat, double
> lon) {
>                 Point center = new Point(lat, lon);
>                 PersistenceManager pm = null;// here put your persistent
> manager
>                 List<Object> params = new ArrayList<Object>();
>                 params.add("John");
>                 GeocellQuery baseQuery = new GeocellQuery("lastName ==
> lastNameParam", "String lastNameParam", params);
>
>                 List<ObjectToSave> objects = null;
>                 try {
>                     objects = GeocellManager.proximityFetch(center, 40, 0,
> ObjectToSave.class, baseQuery, pm);
>                     Assert.assertTrue(objects.size() > 0);
>                 } catch (Exception e) {
>                     // We catch exception here because we have not configured
> the PersistentManager (and so the queries won't work)
>                 }
>             }
>
>         }
>
> My servlet:
>
> package edu.pitt.Test8_Geomodel_GAE;
>
> import java.io.IOException;
> import javax.servlet.http.*;
>
> @SuppressWarnings("serial")
> public class Test8_Geomodel_GAEServlet extends HttpServlet {
>         public void doGet(HttpServletRequest req, HttpServletResponse resp)
>                         throws IOException {
>
>                 doPost(req, resp);
>         }
>
>         public void doPost(HttpServletRequest req, HttpServletResponse resp)
>                 throws IOException {
>                 String lat = req.getParameter("txtlatitude");
>                 String lon = req.getParameter("txtlongitude");
>
>                 double latitude = Double.parseDouble(lat);
>                 double longitude = Double.parseDouble(lon);
>
>                 UseGeocell gc = new UseGeocell();
>
>                 gc.testHowToSaveGeocellsInDatabase(latitude, longitude);
>
>                 resp.sendRedirect("/main.jsp");
>
>         }
>
> }
>
> My jsp file:
>
> <%@ page contentType="text/html;charset=UTF-8" language="java" %>
> <%@ page import="java.util.List" %>
> <%@ page import="javax.jdo.PersistenceManager" %>
> <%@ page import="com.google.appengine.api.users.User" %>
> <%@ page import="com.google.appengine.api.users.UserService" %>
> <%@ page import="com.google.appengine.api.users.UserServiceFactory" %>
>
> <%@ page import="javax.jdo.PersistenceManager" %>
>
> <%@ page import=
> "edu.pitt.Test8_Geomodel_GAE.Test8_Geomodel_GAEServlet" %>
> <%@ page import= "edu.pitt.Test8_Geomodel_GAE.UseGeocell" %>
>
> <html>
>         <head><title>Geomodel GAE Project_helloo2</title></head>
>         <body bgcolor="#ffffff" background="background.gif">
>
>                 <table border="0" width="700">
>                         <tr>
>                                 <td width="150"> &nbsp; </td>
>                                 <td width="50">
>                                         <h1>Enter a point:</h1>
>                                 </td>
>                         </tr>
>                         <tr>
>                                 <td width="150"> &nbsp; </td>
>                                 <td width="550">
>
>                                         <form action="/test8_geomodel_gae" 
> method="post">
>                                         <br>Latitude:
>                                                 <input type="text" 
> name="txtlatitude" size="25">
>                                         <br>Longitude:
>                                                 <input type="text" 
> name="txtlongitude" size="25">
>                                         <br>
>                                                 <input type="submit" 
> value="Submit">
>                                         </form>
>                                 </td>
>                         </tr>
>
>                 </table>
>   </body>
> </html>
>
> My web.xml file:
>
> <?xml version="1.0" encoding="utf-8"?>
> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> xmlns="http://java.sun.com/xml/ns/javaee";
> xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd";
> xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd";
>  version="2.5">
>         <servlet>
>                 <servlet-name>Test8_Geomodel_GAE</servlet-name>
>                 <servlet-
> class>edu.pitt.Test8_Geomodel_GAE.Test8_Geomodel_GAEServlet</servlet-
> class>
>         </servlet>
>         <servlet-mapping>
>                 <servlet-name>Test8_Geomodel_GAE</servlet-name>
>                 <url-pattern>/test8_geomodel_gae</url-pattern>
>         </servlet-mapping>
>         <welcome-file-list>
>                 <welcome-file>main.jsp</welcome-file>
>         </welcome-file-list>
> </web-app>
>
> The code is compiled and run successfully. However, when in the
> browser, when I submit latitude & longitude I receive an error as
> follow:
>
> HTTP ERROR 500
>
> Problem accessing /test8_geomodel_gae. Reason:
>
>     com/beoui/geocell/model/Point
>
> Caused by:
>
> java.lang.NoClassDefFoundError: com/beoui/geocell/model/Point
>         at
> edu.pitt.Test8_Geomodel_GAE.Test8_Geomodel_GAEServlet.doPost(Test8_Geomodel_GAEServlet.java:
> 45)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:713)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
>         at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:
> 511)
>         at org.mortbay.jetty.servlet.ServletHandler
> $CachedChain.doFilter(ServletHandler.java:1166)
>         at
> com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:
> 51)
>         at org.mortbay.jetty.servlet.ServletHandler
> $CachedChain.doFilter(ServletHandler.java:1157)
>         at
> com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:
> 43)
>         at org.mortbay.jetty.servlet.ServletHandler
> $CachedChain.doFilter(ServletHandler.java:1157)
>         at
> com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:
> 122)
>         at org.mortbay.jetty.servlet.ServletHandler
> $CachedChain.doFilter(ServletHandler.java:1157)
>         at
> org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:
> 388)
>         at
> org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:
> 216)
>         at
> org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:
> 182)
>         at
> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:
> 765)
>         at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:
> 418)
>         at
> com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:
> 70)
>         at
> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
> 152)
>         at com.google.appengine.tools.development.JettyContainerService
> $ApiProxyHandler.handle(JettyContainerService.java:349)
>         at
> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
> 152)
>         at org.mortbay.jetty.Server.handle(Server.java:326)
>         at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:
> 542)
>         at org.mortbay.jetty.HttpConnection
> $RequestHandler.content(HttpConnection.java:938)
>         at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
>         at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
>         at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
>         at
> org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:
> 409)
>         at org.mortbay.thread.QueuedThreadPool
> $PoolThread.run(QueuedThreadPool.java:582)
>
> I am not sure what I am doing wrong. I really appreciate it if someone
> help me with this issue.
>
> Thanks.

-- 
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.

Reply via email to