顯示具有 Google App Engine 標籤的文章。 顯示所有文章
顯示具有 Google App Engine 標籤的文章。 顯示所有文章

2010年12月7日 星期二

GAE/J - Appstats(測量App的效能)

Appstats主要是用來測量App在Google App Engine上的效能表現。做法很簡單只要掛上Google提供的Appstats的Filter即可使用。
  • 在web.xml中加入
<filter>
        <filter-name>appstats</filter-name>
        <filter-class>com.google.appengine.tools.appstats.AppstatsFilter</filter-class>
        <init-param>
            <param-name>logMessage</param-name>
            <param-value>Appstats available: /appstats/details?time={ID}</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>appstats</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

  • 連線到http://xxx.appspot.com/appstats/

  • 限制只有管理者可以連線,需在web.xml加入以下的code
<servlet>
        <servlet-name>appstats</servlet-name>
        <servlet-class>com.google.appengine.tools.appstats.AppstatsServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>appstats</servlet-name>
        <url-pattern>/appstats/*</url-pattern>
    </servlet-mapping>

    <security-constraint>
        <web-resource-collection>
            <url-pattern>/appstats/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>


2010年1月17日 星期日

Google App Engine(GAE) - 使用Java Persistence API(JPA)

1. 在src\META_INF下建立persistence.xml。

    
        org.datanucleus.store.appengine.jpa.DatastorePersistenceProvider
        
            
            
            
        
    


2. 取得EntityManagerFactory。
EntityManagerFactory emf = Persistence
   .createEntityManagerFactory("transactions-optional");


2010年1月7日 星期四

Google App Engine(GAE) - 使用Google帳號進行驗證

1. 利用UserService取得利用Google帳號登入的連結。
UserService userService = UserServiceFactory.getUserService();
//Login.do即為使用者登入後要redirect的位置
//loginUrl即為登入連結,只要使用者連結此網址即可利用Google帳號進行登入
String loginUrl = userService.createLoginURL("/Login.do"); 

2. 利用HttpServletRequest取得登入使用者的帳號。
    String email = request.getUserPrincipal().getName();

3. 利用UserService取得登出連結。
UserService userService = UserServiceFactory.getUserService();
//login.jsp即為使用者登出後要redirect的位置
//logoutUrl即為登出連結,只要使用者連結此網址即可登出Google帳號
String logoutUrl = userService.createLogoutURL("/login.jsp");


2009年11月24日 星期二

Google App Engine(GAE) - 檔案上傳

1. GAE的檔案上傳需使用Apache的FileUpload的套件

2. 範例程式如下:
ServletFileUpload upload = new ServletFileUpload();
        FileItemIterator iterator = upload.getItemIterator(request);
        while (iterator.hasNext()) {
            FileItemStream item = iterator.next();
            //判斷是否為一般Form的文字資料,還是檔案
            if (item.isFormField()) {
                if (item.getFieldName().equals("icon.name")) {
                    InputStream i = item.openStream();
                    byte[] b = new byte[i.available()];
                    i.read(b);
                    icon.setName(new String(b));
                }
            } else {
                InputStream i = item.openStream();
                byte[] b = new byte[i.available()];
                i.read(b);
                icon.setFile(new Blob(b));
            }
        }


2009年11月23日 星期一

Google App Engine 實作

  1. UrPosition:與朋友分享自己目前的所在位置,可以透過web介面看到所有朋友在Google Map上的位置。
  2. 單字搜尋:單字搜尋引擎,你可以只要輸入部分的字元即可,例如你想要查詢所有包含"dis"的單字。那你只要輸入dis即可,系統會將所有有包含"dis"的單字都列出來。
  3. 線上白板:為了方便儲存一些文字訊息所寫出來的一個小程式,你可以提個一個名稱以建立一個新的白板,或是利用已建立的名稱來對這個白板的內容做一個維護。






2009年11月19日 星期四

Google App Engine(GAE) - 在GAE上使用Struts2

1. 建立一個Listener實作ServletContextListener, HttpSessionListener, HttpSessionAttributeListener
public class InitListener implements ServletContextListener, HttpSessionListener, HttpSessionAttributeListener {

   public InitListener() {
   }

   public void contextInitialized(ServletContextEvent sce) {
      OgnlRuntime.setSecurityManager(null);
   }
}



2. 修改web.xml,加入此listener
<listener>
   <listener-class>tw.nicky.listener.InitListener</listener-class>
</listener>


3. 支援:Tiles、後端驗證、@InputConfig、@SkipValidation

4. 不支援:Struts2 FileUpload


Google App Engine(GAE) - 利用Remote api上傳大量資料到DataStore

1. 安裝Google App Engine(Python) 目前只有python版本支援Remote api。

2. 安裝Python 2.5,目前Google App Engine只支援到2.5版。

3. 建立app.yaml檔。

application: app-name #你的app名稱
version: 2 #你的app版本
runtime: python
api_version: 1

handlers:

- url: /remote_api

script: $PYTHON_LIB/google/appengine/ext/remote_api/handler.py
login: admin


4. 上傳此app.yaml檔到你的App Engine。(youdir是存放app.yaml的目錄)
    C:\Program Files\Google\google_appengine\appcfg.py update yourdir/

5. 撰寫上傳資料的程式。
from google.appengine.ext import db
from google.appengine.tools import bulkloader

class PersonData(db.Model): #PersonData為kind Name()
    id = db.StringProperty()
    age = db.StringProperty()
    name = db.StringProperty()
    address = db.StringProperty()
    email = db.StringProperty()

class Loader(bulkloader.Loader):
    def __init__(self):
        bulkloader.Loader.__init__(self, 'PersonData',
                                   [('id', str),
                                   ('age', str),
                                   ('name', lambda x: unicode(x, 'utf-8')) #有中文字部分需設定為UTF8編碼
                                   ('address', lambda x: unicode(x, 'utf-8'))
                                   ('email', str)
                                   ])

loaders = [Loader]


6. 製作資料CSV檔(資料欄位以半形逗號隔開)。
1,43,劉的華,台北市信義區,gae@gmail.com

1,41,張學有,台北市信義區,gae@gmail.com


7. 將資料上傳到App Engine(config_file:上傳資料的程式 filename:資料CSV檔 kind:需與程式內的kind name一致)。
    C:\Program Files\Google\google_appengine\appcfg.py upload_data --config_file=Loader.py --filename=PersonData.csv --kind=PersonData


2009年11月18日 星期三

Google App Engine(GAE) - Eclipse plugin安裝步驟

1. 執行Eclipse Software Update。


2. 選擇Available Software按下Add Site。

 

3. 在Location輸入 http://dl.google.com/eclipse/plugin/3.4。

 

4. 勾選你要安裝的plug in,並按下Install按鈕。

 

5. 選擇你要安裝的Plugin。

 

6. 安裝完成之前,工具列會多出三個按鈕分別是建立Goole App Engine專案、建立Google Web Toolkit專案及上傳程式碼到Google App Engine上。