熱門文章

2013年12月15日 星期日

[筆記] Google App Engine 的DataStore 與 BlobStore


在這裡筆記一下大四學的GAE相關東西

Java Datastore 

使用 Java Data Objects (JDO) 與  Java Persistence API (JPA)來存放資料


例如儲存一個會員資料表

在Client端設定結構

 @PersistenceCapable  
 public class UserData implements IsSerializable{  
      public UserData(){}  
   @PrimaryKey  
   @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)  
      private String account;  
      @Persistent  
      private String name;  
      @Persistent  
      private String password;  
      //以下方便Client端取用  
      public String getName() {  
           return name;  
      }  
      public void setName(String name) {  
           this.name = name;  
      }  
      public String getAccount() {  
           return account;  
      }  
      public void setAccount(String account) {  
           this.account = account;  
      }  
      public String getPassword() {  
           return password;  
      }  
      public void setPassword(String password) {  
           this.password = password;  
      }  
 }  

GreetingService.java 裡面宣告方法,這邊用新增project時就有的GreetingService.java

如果要自己創一個Service也行,記得到/war/WEB-INF/web.xml裡面宣告<servlet-name>與<servlet-mapping>

 @RemoteServiceRelativePath("greet")  
 public interface GreetingService extends RemoteService {  
      void addAccount(String account);  
 }  

記得新增PMF.java

 package com.example.hw3.client;  
 import javax.jdo.JDOHelper;  
 import javax.jdo.PersistenceManagerFactory;  
 public final class PMF {  
   private static final PersistenceManagerFactory pmfInstance =  
     JDOHelper.getPersistenceManagerFactory("transactions-optional");  
   private PMF() {}   
   public static PersistenceManagerFactory get() {  
     return pmfInstance;  
   }  
 }  

最後在Server端這邊呼叫PersistenceManager 來寫入

 @SuppressWarnings("serial")  
 public class GreetingServiceImpl extends RemoteServiceServlet implements  
           GreetingService {  
      @Override  
      public boolean addAccount(String account) {  
           // TODO Auto-generated method stub  
           PersistenceManager pm = PMF.get().getPersistenceManager();  
           Userdata u = new Userdata();  
           u.setAccount(account);  
           try {  
                pm.makePersistent(u);  
           }finally{  
                pm.close();  
           }  
      }  
}

回到Client端,呼叫greetingService

           greetingService.addAccount("Jack", new AsyncCallback<Void>() {  
                @Override  
                public void onFailure(Throwable caught) {  
                     // TODO Auto-generated method stub  
                }  
                @Override  
                public void onSuccess(Void result) {  
                     // TODO Auto-generated method stub  
                }  
           });  

去後台看的時候就會出現UserData的資料表囉

後臺在這


完成!

Blobstore Java API

https://developers.google.com/appengine/docs/java/blobstore/
這個API提供User儲存超大的檔案,很機車的是我照著example寫根本出不來,光是加入JSP

FILE 就一直error,之後就不加了,而是用FileUpload來產生FileChooser,另外如果沒事就不要

用這個API,難用死了 -3- ,DataStore比較好用可以直接Query

FileUpload 可以參考
http://www.gwtproject.org/javadoc/latest/com/google/gwt/user/client/ui/FormPanel.html
另外筆記一下在這邊的 TextBox 轉到網頁上會變成 type="text" ,所以POST的時候不用擔心拿不到TextBox 的內容,TextBox 記得setName(),在server那端用request.getParameter(Name); 即可收到。

說明文件的範例 web.xml 那邊

   <servlet>  
   <servlet-name>Upload</servlet-name>  
   <servlet-class>Upload</servlet-class>  
  </servlet>  

要改成

   <servlet>  
   <servlet-name>Upload</servlet-name>  
   <servlet-class>自己的路徑.server.Upload</servlet-class>  
  </servlet>  

不然照著example做絕對是錯的

另外Upload 與 Serve 是放在server端的

學校作業是做一個File System 檔案管理系統,這裡是做出來的範例

最大上傳限制目前為32MB



程式碼就不獻醜了...來信洽談

做完這個File System的感想就是 : 爽

網路上的資料超級少,尤其是java,大部分的東西都要自己嘗試看看才行,我大概前後花了24

小時在找資料與嘗試吧...。

沒有留言:

張貼留言