解决Google App Engine中的DatastoreNeedIndexException异常
做了一个简单的一对一(OneToOne)关系的JPA测试,在本地Eclipse中没有问题,但部署到GAE后,添加数据成功而在显示数据的时候却报500错误。幸好GAE控制台有详细错误日志:
/oneone.jsp
java.lang.ClassCastException: com.google.appengine.api.datastore.DatastoreNeedIndexException cannot be cast to javax.servlet.ServletException
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:754)
at org.apache.jsp.oneone_jsp._jspService(oneone_jsp.java:100)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
看来是忘记给datastore指定,参看GAE的文档Queries And Indexes,赶紧在WEB-INF添加datastore-indexes.xml,再把本地自动生成的index(在WEB-INF/appengine-generated/datastore-indexes-auto.xml中)的内容复制进去,如下:
xmlns=”http://appengine.google.com/ns/datastore-indexes/1.0“
autoGenerate=”true”>
source=”auto” />
重新部署到GAE中,运行正常。
测试地址:http://shoopmanga.appspot.com/oneone.jsp