2011年4月19日 星期二

下載 Java app engine datastore 上的 data 回 desktop

這篇主要紀錄 Java GAE application 開發者如何將 GAE datastore 裡的資料下載回本地端 ,
並且儲存成易讀的格式 (ex: 可以用 excel 開啓的 .csv 格式)的方法





step 1 : 下載 Google App Engine SDK for Python

由於 Google 並沒有提供 Java 版本的 downloader 程式給 Java 的 app engine developer ,
因此要先到 http://code.google.com/appengine/downloads.html 下載 "Google App Engine SDK in Python" 並解壓縮 , 裡頭有程式可以協助我們進行傳輸工作
( ps : 當然也需要先安裝好 Python 程式語言的解譯器囉!)

step 2 : 修改 web.xml

Java 版的 GAE 提供了一個名 remote_api 的 Servlet 來負責 Server 端的任務
因此我們必須將他 include 進我們的 application , 在 web.xml 中添加以下 code




<servlet>
        <servlet-name>remoteapi</servlet-name>
        <servlet-class>com.google.apphosting.utils.remoteapi.RemoteApiServlet</servlet-class>
</servlet>
    
<servlet-mapping>
        <servlet-name>remoteapi</servlet-name>
        <url-pattern>/remote_api</url-pattern>
</servlet-mapping>
    
<security-constraint>
        <web-resource-collection>
            <web-resource-name>remoteapi</web-resource-name>
            <url-pattern>/remote_api</url-pattern>
        </web-resource-collection>
        <auth-constraint>
        <role-name>admin</role-name>
        </auth-constraint>
</security-constraint>
step 3 : 產生下載格式設定檔

接下來要產生控制下載格式參數的設定檔 (bulkloader.yaml)
輸入以下指令 (假設我的applcation網址為 http://myWebApp.appspot.com)

# appcfg.py create_bulkloader_config --filename=bulkloader.yaml --url=http://myWebApp.appspot.com/remote_api

step 4 : 修改下載格式設定檔參數

打開新產生的 bulkloader.yaml


並找到 transformers: 這個段落 , 會看到類似下面的 code 



(kind 後面接的會是你的 application 的資料儲存單位的 class name , 在這個例子裡面是 
Message 
)



- kind: Message
  connector: csv # TODO: Choose a connector here: csv, simplexml, etc...
  connector_options:
    # TODO: Add connector options here--these are specific to each connector.
  property_map:
    - property: __key__
      external_name: key
      export_transform: transform.key_id_or_name_as_string

    - property: text
      external_name: text
      # Type: String Stats: 34 properties of this type in this kind.

在 connector 後面輸入要轉換的格式, 即完成設定 !

step 5 : 打包資料回本地端

透過 appcfg 執行下載指令 , 必須指明 設定檔 , 輸出檔 , 以及下載對象

appcfg.py download_data --config_file=bulkloader.yaml --filename=test.csv --kind=Message --url=http://myWebApp.appspot.com/remote_api

大功告成 , Google 對 Java developer 真的是差別待遇呀 !

沒有留言:

張貼留言