Appengine部署JPA
Google App Engine and JPAhttp://www.vogella.com/blog/2011/01/10/google-app-engine-jpa/
在google app engine中使用JPA http://www.1zhang.com/group/viewthread.php?tid=5188
1.创建的时候,会自动增加jpa的jar.
2.src/META-INF/persistence.xml
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
Xml代码 <?xml version="1.0" encoding="UTF-8" ?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="transactions-optional"> <provider>org.datanucleus.api.jpa.PersistenceProviderImpl</provider> <properties> <property name="datanucleus.NontransactionalRead" value="true" /> <property name="datanucleus.NontransactionalWrite" value="true" /> <property name="datanucleus.ConnectionURL" value="appengine" /> </properties> </persistence-unit> <persistence-unit name="eventual-reads-short-deadlines"> <provider>org.datanucleus.store.appengine.jpa.DatastorePersistenceProvider</provider> <properties> <property name="datanucleus.NontransactionalRead" value="true" /> <property name="datanucleus.NontransactionalWrite" value="true" /> <property name="datanucleus.ConnectionURL" value="appengine" /> <property name="datanucleus.appengine.datastoreReadConsistency" value="EVENTUAL" /> <property name="javax.persistence.query.timeout" value="5000" /> <property name="datanucleus.datastoreWriteTimeout" value="10000" /> </properties> </persistence-unit> </persistence> |
3.Pojo
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Java代码 package com.gae.pandy.pojo; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class Todo { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long todoId; private String summary; public String getSummary() { return summary; } public void setSummary(String summary) { this.summary = summary; } } |
4.service
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Java代码 package com.gae.pandy.service; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; public class EMFService { private static final EntityManagerFactory emfInstance = Persistence .createEntityManagerFactory("transactions-optional"); private EMFService() { } public static EntityManagerFactory get() { return emfInstance; } } |
5.servlet
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
Java代码 package com.gae.pandy.controller; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.Query; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.gae.pandy.pojo.Todo; import com.gae.pandy.service.EMFService; @SuppressWarnings("serial") public class PersistsServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { this.doPost(req, resp); } public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { Todo todo = new Todo(); todo.setSummary("This is my todo"); EntityManager em = EMFService.get().createEntityManager(); List<Todo> todos = null; try { em.persist(todo);//增加到数据库 Query q = em.createQuery("select t from Todo t"); todos = new ArrayList(q.getResultList()); } finally { em.close(); } resp.setContentType("text/plain"); if (todos != null) { resp.getWriter().println( "Hello, JPA. We have " + todos.size() + " number of entries."); } else { resp.getWriter().println("Should not happen"); } } } |
6.web.xml
|
1 2 3 4 5 6 7 8 9 |
Xml代码 <servlet> <servlet-name>PersistsServlet</servlet-name> <servlet-class>com.gae.pandy.controller.PersistsServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>PersistsServlet</servlet-name> <url-pattern>/PersistsServlet</url-pattern> </servlet-mapping> |
