google app engineとその影響(補足)
TRANSCRIPT
Google App Engine
2009/11/13
Java
ex:id
ex:2ch
WEB+DB PRESS
Google App EngineAmazon EC2
Amazon EC2
Google App Engine
Google App Engine
key-value-store
ProtocolBuffersProtocol Buffers Google
RDBRDB:
GAE:
Google App Engine
JDOAPI
JDO
GAE
API(low level API)
GAE
JDO
PersistenceManagerFacoryGoogle
public final class PMF { private static final PersistenceManagerFactory pmfInstance = JDOHelper.getPersistenceManagerFactory("transactions-optional");
private PMF() {}
public static PersistenceManagerFactory get() { return pmfInstance; }}
@PersistenceCapable(identityType = IdentityType.APPLICATION)public class Member { @PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) private Key id;
@Persistent // @javax.jdo.annotations.Unique unique private String screenName;
@Persistent private String name;
makePersistent
// PersistenceManager pm = PMF.get().getPersistenceManager(); Member m = new Member(screenName, name); try{ pm.makePersistent(m); }finally{ pm.close(); }
PersistenceManager pm = PMF.get().getPersistenceManager();try{ Query q = pm.newQuery(Member.class); q.setUnique(true); q.setFilter("screenName == pScreenName"); q.declareParameters("String pScreenName"); Member m = (Member)q.execute(screenName); if(m != null){ message = m.getName() + ""; }else{ message = screenName + ""; }}finally{ pm.close();}
Low Level API
Java Mail
API
/_ah/mail/
HTML
http://d.hatena.ne.jp/nowokay/20091024
Commons FileUpload
DBBlob
Image img = ImagesServiceFactory.makeImage(uploadBlob.getBytes());Transform tr = ImagesServiceFactory.makeResize(48, 48);ImagesService ims = ImagesServiceFactory.getImagesService();Image smallImg = ims.applyTransform(tr, img, ImagesService.OutputEncoding.PNG);blob = new Blob(smallImg.getImageData());
TaskQueue
30
queue
URLCRON
Queue queue = QueueFactory.getDefaultQueue(); queue.add(TaskOptions.Builder.url("/queue/tweet") .param("tweet", t.getId().toString()) .countdownMillis(0));
memcache
JCacheLow Level API
JCache
Cache ch; try { CacheManager cm = CacheManager.getInstance();
CacheFactory cf = cm.getCacheFactory(); Map conf =
Maps.newHashMap(); ch = cf.createCache(conf); } catch
(CacheException ex) { throw new ServletException(ex); } String
contents; if(ch.containsKey(USERLIST)){ contents = (String)
ch.get(USERLIST) + "
read"; }else{ String contents = ch.put(USERLIST, contents); }
GoogleUser
UserService us = UserServiceFactory.getUserService();
if(request.getUserPrincipal() == null){ String url =
us.createLoginURL("/loggedin.jsp"); out.printf("", url); }else{
User u = us.getCurrentUser(); out.printf("%s
", u.getNickname()); }
Jetty
TomcatServletResponseWrapper
http://d.hatena.ne.jp/nowokay/20091027
GAE
Java
PHPAzure
Python
RubyJRubyCPU
JRubyGAE
Java
HTML5
DB
JavaScript
GUI
Java
JavaScript
JavaJavaScriptGWT
PythonJavaScriptPyjamas
PHPJavaScriptPHP GWT
Android
iPhone
HTML5
Java
JavaScript
Android
Python
Webrequestresponse
RDBMS
key-value-store