Google App Engine (GAE) 屬於 PaaS 層級,提供 Java 運行環境(Servlet/JSP/JDO/JPA)、郵件、圖像處理、Memcache 等服務,開發者專注業務邏輯,無需維護基礎設施。本文以電子書分享網站為例,示範 GAE/Java 開發全流程。
HelloWorld Servlet。https://localhost:8080 驗證。@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class File {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent private String username;
@Persistent private String useremail;
@Persistent private Date uploadDate;
@Persistent private String filename;
@Persistent private String description;
@Persistent private String mimeType; // pdf, ppt, chm...
@Persistent private Blob file; // GAE Datastore Blob
@Persistent private Set<Key> tags = new HashSet<Key>();
// getter/setter 略
}
<form method="post" action="upload" enctype="multipart/form-data">
<input name="efile" type="file">
<input name="filename" type="text" size=60>
<input name="tags" type="text" size=60> <!-- 空白分隔 -->
<textarea name="description" rows=5 cols=50></textarea>
<input name="username" type="text" size=60>
<input name="useremail" type="text" size=60>
<input type="submit" value="upload">
</form>
multipart/form-data,取得 File 物件與表單欄位。File 實體,設定 Blob、上傳時間、MIME 類型等。PersistenceManager pm = PMF.get().getPersistenceManager();
try {
pm.makePersistent(file);
} finally {
pm.close();
}
META-INF/jdoconfig.xml 指定 GAE Datastore 實作:
<jdoconfig>
<persistence-manager-factory name="transactions-optional">
<property name="javax.jdo.PersistenceManagerFactoryClass"
value="org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory"/>
<property name="javax.jdo.option.ConnectionURL" value="appengine"/>
<property name="datanucleus.appengine.autoCreateDatastoreTxns" value="true"/>
</persistence-manager-factory>
</jdoconfig>