BigTableã«ç¹åããSlim3DataStoreã®ä½¿ãæ¹[GoogleAppEngine][Slim3][Java]
Google App Engineã®ãµã³ãã«ã§ã¯BigTableãæ±ãä¾ã§JDO/JPAãå©ç¨ãã¦ãã¾ãããSlim3DataStoreã®æ¹ã使ãæããé«éã§ãã
ä¾ãã°Exampleã¨ããååã®ãã¼ãã«ããã£ãã¨ãã«JDOã§ã®æä½ã¯ãExampleãPMFã¯ã©ã¹ãããåæã§æ¸ãã¨
PersistenceManager pm = PMF.get().getPersistenceManager(); List<Example> examples; try { Query query = pm.newQuery(Example.class); try{ examples = (List<Example>) query.execute(); //以ä¸examplesãå©ç¨ããå¦çãæ¸ãã }finally{ query.closeAll(); } } finally { pm.close(); }
ã¨ããããã«ã¡ã³ãã¯ãµã¤ã§ãããªã®ã§Slim3DataStoreã使ãã¨ç°¡åã§ãã
- ä½¿ãæ¹
- ã¨ããããGAEããã¸ã§ã¯ããç«ã¡ä¸ãã¾ããããEclipseã®ãã©ã°ã¤ã³ãå©ç¨ãã¦ç«ã¡ä¸ããåæã§è©±ããããã¾ãã
- Slim3æ¬å®¶ããhttp://sites.google.com/site/slim3appengine/ã¨ã£ã¦ãã¾ãããã¡ã¤ã«ãè§£åããã¨slim3-brankã¨ãããã©ã«ããåºæ¥ã¾ãã"slim3-blank>war>WEB-INF>lib"ã®ä¸ã®slim-X.X.X.jar(ãã¼ã¸ã§ã³ãç°ãªãã¾ããç§ã®ã¯1.0.1)ã"ããã¸ã§ã¯ãå>war>WEB-INF>lib"å ã«çªã£è¾¼ã¿ã¾ãããããã追å ãããjarãã¡ã¤ã«ã®ä¸ã§å³ã¯ãªãã¯>ãã«ããã¹>ãã«ããã¹ã«è¿½å ã§è¿½å ãã¾ãã
-
- 次ã«WEB-INF以ä¸ã®web.xmlã«
<filter> <filter-name>datastoreFilter</filter-name> <filter-class>org.slim3.datastore.DatastoreFilter</filter-class> </filter> <filter-mapping> <filter-name>datastoreFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> </filter-mapping>
ã追å ãã¦ãã ãããä»åã¯ãã¼ã¿ã¹ãã¢ã¨ãã¦å©ç¨ããã ããªã®ã§ãã£ã«ã¿ã¼ã¯ããã ããã追å ãã¾ããããSlim3ã«ã¯è²ã ãã£ã«ã¿ã¼ãããããã§ãã
-
- 次ã«ããã¸ã§ã¯ãç´ä¸ã«ãã©ã«ããä½ãã¾ããååã¯é©å½ã§çµæ§ã§ããç§ã¯"lib"ã¨ãã¾ããããã®ä¸ã«ãã¦ã³ãã¼ãããslim3-blankãã©ã«ãã®"slim3-blank>lib>slim3-gen-X.X.X.jar"ã追å ãã¾ãã
- ããã¸ã§ã¯ãã®ååä¸ã§å³ã¯ãªãã¯ãã"Javaã³ã³ãã¤ã©ã¼>注éå¦ç"ã®é ç®ã§"ããã¸ã§ã¯ãåºæã®è¨å®ãå¯è½ã«ãã"ã«ãã§ãã¯ãå ¥ãã"çæãããã½ã¼ã¹ã»ãã£ã¬ã¯ããª"ãããã©ã«ãã§ã¯".apt_generated"ã«ãªã£ã¦ããã¨æãã®ã§"generated"ã«ãã¾ãã
- "注éå¦ç>ãã¡ã¯ããªã¼ã»ãã¹"ã§ã"ããã¸ã§ã¯ãåºæã®è¨å®ãå¯è½ã«ãã"ã«ãã§ãã¯ããããå ç¨ã®"ããã¸ã§ã¯ãå>lib>slim-gen.X.X.X.jar"ã追å ãã¾ããã³ã¬ã§çµããã§ãã
- 使ã£ã¦ã¿ã
Example.java
import org.slim3.datastore.Attribute; import org.slim3.datastore.Datastore; import org.slim3.datastore.Model; import com.google.appengine.api.datastore.Key; @Model public class Example { @Attribute(primaryKey = true) private Key internalKey; private String message; private String permalink; public Example() { } public Example(String permalink, String message) { this.message = message; this.permalink = permalink; this.internalKey = createKey(permalink); } public Key getInternalKey() { return this.internalKey; } public void setInternalKey(Key key) { this.internalKey = key; } public String getMessage() { return this.message; } public void setMessage(String message) { this.message = message; } public String getPermalink() { return permalink; } public void setPermalink(String permalink) { this.permalink = permalink; } public static Key createKey(String permalink) { if (permalink == null) { throw new IllegalArgumentException(); } return Datastore.createKey(Example.class, permalink); } }
ãããªããã°ã©ã ãæ¸ããä¿åããã¨"generated"ãã£ã¬ã¯ããªã«ã"com/example/ExampleMeta.java"ã¨ãããã¡ã¤ã«ãèªå使ããã¾ãã
SlimSample.java
import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slim3.datastore.Datastore; import com.google.appengine.api.datastore.Key; import com.sun.org.apache.bcel.internal.generic.ARRAYLENGTH; @SuppressWarnings("serial") public class SlimSample extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.setContentType("text/plain"); resp.getWriter().println("Hello, world"); resp.setCharacterEncoding("utf-8"); Example sample = new Example("voiceActor", "æ²¢åã¿ãã"); Datastore.put(sample); } }
ãããå®è¡ããã¨Exampleã¨ãããã¼ãã«ãçæãã
ID/Name | message | permalink |
name=voiceActor | æ²¢åã¿ãã | voiceActor |
ã¨ãã¼ã¿ã追å ããã¦ããã¨æãã¾ãã
Key parentKey = Datastore.createKey(Example.class, "voiceActor"); Example example = new Example(); example.setMessage("æ²¢åã¿ãã"); example.setInternalKey(parentKey);
ã¨ãã¦ãæ¸ãã¾ãããExample.javaã®ä¸ã«å¼æ°ããã³ã³ã¹ãã©ã¯ã¿ã¨createKeyã¡ã½ãããæ¸ãã¦ããã®ã§ç°¡æ½ã«æ¸ããã¨ãã§ãã¾ãã
ã¾ããKeyã§è¦ªåé¢ä¿ãæå®ã§ãã¾ãã
Key parentKey = Datastore.createKey(Example.class, "voiceActor"); Key childKey = Datastore.createKey(parentKey, Example.class, "hirano"); Example example = new Example(); example.setInternalKey(childKey); example.setMessage("å¹³éç¶¾"); Datastore.put(example);
ã¨æ¸ããã¨ã§voiceAcotor>hiranoã¨ããé¢ä¿ãæå®ã§ãã¾ããvoiceActor以ä¸ã«"sawashiro"ã"sanada"ãªã©ã次ã çªã£è¾¼ãã§è¡ã£ã¦ã
List<Example> list = Datastore.query(Example.class,parentKey).asList(); for(Example example : list){ resp.getWriter().println(example.getMessage()); System.out.println(example.getMessage()); }
ã¨æ¸ãã¨voiceActorã®åè¦ç´ ãå ¨ã¦åã£ã¦ãããã¨ãã§ãã¾ãã
ãããã«ã説æã§ããã使ã£ã¦ã¿ãã¨ä½¿ããããã«ã³ã£ãããã¾ãã
以ä¸ã®ãµã¤ãæ§ãåèã«ããã¦ããã ãã¾ãã
http://songofcloud.gluegent.com/2009/11/slim3-datastore2.html
http://sites.google.com/site/slim3documentja/