Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
GAE/J&Slim3を業務で利用してみて困ったこと、とか     第13回勉強会@岡山        2012/04/21
自己紹介● 名前 : 佐藤 勇輔● 出身 : 埼玉県● 年齢 : 27歳(84生)● 勤務先 : 某S社プログラマ(入社3年目)  ○ Java & SAStruts(Seasar2)  ○ GAE/J & Slim3   ● Twitter/...
本発表について 本発表は、案件を通して経験し、困ったことと実際に対応した内容・方法をご報告させて頂きます。ここで紹介させて頂く内容や方法が  ”必ず正しい”とは限りませんので、ご了承ください。 
発表予定● GAE/J● Datastore● Slim3  
そんな装備で大丈夫か・・・
大丈夫だ、問題ない。             JavaとSeasarを             知っているから             GAE/JとSlim3は             問題ない。
目次1. 製造   a. Datastoreとアプリとしての制約  b. Datastoreからデータ一括取得とカーソル   c. repackagedパッケージ2. 単体テスト   a. JUnitとWeb Applicationのタイムゾー...
1.製造
1-a.Datastoreとアプリとしての制約● Datastoreに設定できる制約:@Attribute  ○   主キー(primaryKey = true)  ○   インデックスを付けない(unindexed = true)  ○   ...
弊社の基本設計書● DB設計書            ● UI設計書 ○ 論理名/物理名          ○ 画面入力項目 ○ 型                  ■ 画面項目名 ○ アノテーション            ■ 桁数   ■ ...
1-b.Datastoreからデータ一括取得とカーソル● Datastoreへのアクセスしよう!    → できるだけ少なくしたい    → 必要なデータを一括取得        1000件/回を超えるとパフォーマンス悪化        ・処理...
1-c.repackagedパッケージ● ユーザのバスワードをBase64で暗号化しよう! ○ GAE SDKのバージョンがアップ(1.6.2) ○ EclipseのGAEプラグインがバージョンアップ      これまでコンパイルできていたソー...
1-c.repackagedパッケージ● ユーザのバスワードをBase64で暗号化しよう! ○ GAE SDKのバージョンがアップ ○ EclipseのGAEプラグインがバージョンアップ      これまでコンパイルできていたソースが、    ...
2.単体テスト
2-a.JUnitとWeb Applicationのタイムゾーン● お知らせ掲示板を作ってみよう!  ○ 【要件】設定した期間の間、お知らせ情報を表示する  ○ たまたま0時を過ぎたときに動作テストを実施    ■ 出るはずが出ない!and 消...
2-a.JUnitとWeb Applicationのタイムゾーン● お知らせ掲示板を作ってみよう!  ○ 【要件】設定した期間の間、お知らせ情報を表示する  ○ たまたま0時を過ぎたときに動作テストを実施    ■ 出るはずが出ない!and 消...
2-b.テストデータとModelRef● 外部キー未設定のテストをしてみよう! ○ assertNull(model.getModelRef());   ■ 失敗する!!   ■ ModelRefを宣言する際にnewしている。。。     ○ ...
ModelRefhttp://code.google.com/p/slim3/source/browse/trunk/slim3/src/main/java/org/slim3/datastore/ModelRef.java
3.結合テスト
3-a.GAE環境でのテスト● 結合テストをGAE無料環境でやろう! ○ 管理画面から初期データ登録 ○ 10人程度で実施(Datastoreの読み書き)     ・サーバ応答がない・・・     ・Datastoreの書き込み回数が無料上限へ...
3-b.Indexのワナ● 改訂が入りインデックスを追加しなきゃ! ○ 既存データあり ○ 1KINDに複数のインデックスあり     ・改訂後のアプリをデプロイした     ・「Deployment completed successfull...
一番いいのを頼む
オススメ図書● オープンソース徹底活用  Slim3 on Google App Engine for Java  ○ WebアプリのアーキテクチャであるMVCモデルの説明  ○ Bigtable&Datastoreに関するAPIの説明
質疑応答&アドバイス● 質疑応答    ○ Not Null制約の実際の実装方法は?      →画面入力値については、必須入力チェックで。       マスターデータ参照については、システムエラー。    ○ ユニークについての実装方法は? ...
20120421中国gtug
20120421中国gtug
20120421中国gtug
20120421中国gtug
Upcoming SlideShare
Loading in …5
×

20120421中国gtug

920 views

Published on

20120421 第13回中国GTUG@岡山 発表資料

  • Be the first to comment

  • Be the first to like this

20120421中国gtug

  1. 1. GAE/J&Slim3を業務で利用してみて困ったこと、とか 第13回勉強会@岡山 2012/04/21
  2. 2. 自己紹介● 名前 : 佐藤 勇輔● 出身 : 埼玉県● 年齢 : 27歳(84生)● 勤務先 : 某S社プログラマ(入社3年目) ○ Java & SAStruts(Seasar2) ○ GAE/J & Slim3  ● Twitter/Facebook : o310yusuke● Gmail : yusuke310● 岡山Javaユーザ会:http://okajug.appspot.com/
  3. 3. 本発表について 本発表は、案件を通して経験し、困ったことと実際に対応した内容・方法をご報告させて頂きます。ここで紹介させて頂く内容や方法が  ”必ず正しい”とは限りませんので、ご了承ください。 
  4. 4. 発表予定● GAE/J● Datastore● Slim3  
  5. 5. そんな装備で大丈夫か・・・
  6. 6. 大丈夫だ、問題ない。 JavaとSeasarを 知っているから GAE/JとSlim3は 問題ない。
  7. 7. 目次1. 製造 a. Datastoreとアプリとしての制約 b. Datastoreからデータ一括取得とカーソル c. repackagedパッケージ2. 単体テスト a. JUnitとWeb Applicationのタイムゾーン b. テストデータとModelRef3. 結合テスト a. GAE環境でのテスト b. Indexのワナ
  8. 8. 1.製造
  9. 9. 1-a.Datastoreとアプリとしての制約● Datastoreに設定できる制約:@Attribute ○ 主キー(primaryKey = true) ○ インデックスを付けない(unindexed = true) ○ 自動設定(listener = クラス名) ○ 暗号化(cipher = true)  ● Datastoreに設定できない制約 ○ Not Null制約 ○ 文字数、桁数制限 アプリとして実装する必要あり。
  10. 10. 弊社の基本設計書● DB設計書 ● UI設計書 ○ 論理名/物理名 ○ 画面入力項目 ○ 型 ■ 画面項目名 ○ アノテーション ■ 桁数 ■ 主キー ■ 表示フォーマット ■ バージョン ■ インデックス可否 ○ アプリ制約 ■ 桁数 ■ Not null ■ インデックスのソート順
  11. 11. 1-b.Datastoreからデータ一括取得とカーソル● Datastoreへのアクセスしよう! → できるだけ少なくしたい → 必要なデータを一括取得  1000件/回を超えるとパフォーマンス悪化  ・処理速度の遅延 ・メモリ使用率の上昇 カーソルの利用 ・1000件/回以下で取得を繰り返す ・1000件/回以下となるようページング
  12. 12. 1-c.repackagedパッケージ● ユーザのバスワードをBase64で暗号化しよう! ○ GAE SDKのバージョンがアップ(1.6.2) ○ EclipseのGAEプラグインがバージョンアップ これまでコンパイルできていたソースが、 突然コンパイルエラーに!! Twitterでつぶやいてみた
  13. 13. 1-c.repackagedパッケージ● ユーザのバスワードをBase64で暗号化しよう! ○ GAE SDKのバージョンがアップ ○ EclipseのGAEプラグインがバージョンアップ これまでコンパイルできていたソースが、 突然コンパイルエラーに!! <GAE SDK> ・Base64を含むパッケージがrepackagedへ <GAEプラグイン> ・repackagedパッケージがErrorへ <GAEプラグイン> repackagedパッケージをWorningに(一時しのぎ)
  14. 14. 2.単体テスト
  15. 15. 2-a.JUnitとWeb Applicationのタイムゾーン● お知らせ掲示板を作ってみよう! ○ 【要件】設定した期間の間、お知らせ情報を表示する ○ たまたま0時を過ぎたときに動作テストを実施 ■ 出るはずが出ない!and 消えるはずが出る!? ・期間設定は時刻を0時で登録 ・システム日付取得処理はJavaのCalendarを利用 ・日付判定はJavaのDateを利用 ・JUnitでは動作確認済み
  16. 16. 2-a.JUnitとWeb Applicationのタイムゾーン● お知らせ掲示板を作ってみよう! ○ 【要件】設定した期間の間、お知らせ情報を表示する ○ たまたま0時を過ぎたときに動作テストを実施 ■ 出るはずが出ない!and 消えるはずが出る!? ・期間設定は時刻を0時で登録 ・システム日付取得処理はJavaのCalendarを利用 ・日付判定はJavaのDateを利用 ・JUnitでは動作確認済み ・JUnitのタイムゾーン:JST ・WebApplicationのタイムゾーン:UTC(JST+9)
  17. 17. 2-b.テストデータとModelRef● 外部キー未設定のテストをしてみよう! ○ assertNull(model.getModelRef()); ■ 失敗する!! ■ ModelRefを宣言する際にnewしている。。。   ○ assertNull(model.getModel().getKey()) ○ assertNull(model.getModel().getModel()) ■ 成功する ■ ModelRefに外部キーが設定されているかの判断 → ModelRefのKeyを確認!
  18. 18. ModelRefhttp://code.google.com/p/slim3/source/browse/trunk/slim3/src/main/java/org/slim3/datastore/ModelRef.java
  19. 19. 3.結合テスト
  20. 20. 3-a.GAE環境でのテスト● 結合テストをGAE無料環境でやろう! ○ 管理画面から初期データ登録 ○ 10人程度で実施(Datastoreの読み書き) ・サーバ応答がない・・・ ・Datastoreの書き込み回数が無料上限へ ・GAEの再起動は日本時間16時 ・日本時間16時まで応答なし ・何も作業できず。。。 ・別アカウントで同じアプリをデプロイ ・テスト開始前に課金しておく
  21. 21. 3-b.Indexのワナ● 改訂が入りインデックスを追加しなきゃ! ○ 既存データあり ○ 1KINDに複数のインデックスあり   ・改訂後のアプリをデプロイした ・「Deployment completed successfully」が  出たから動作確認してみた ・Exception。。。 ・追加したインデックスが「building」 ・約5時間ほど継続 ・削除しようとしたが、Javaでは無理(?) ・時間帯によってbuidingの時間はまちまち
  22. 22. 一番いいのを頼む
  23. 23. オススメ図書● オープンソース徹底活用 Slim3 on Google App Engine for Java ○ WebアプリのアーキテクチャであるMVCモデルの説明 ○ Bigtable&Datastoreに関するAPIの説明
  24. 24. 質疑応答&アドバイス● 質疑応答 ○ Not Null制約の実際の実装方法は? →画面入力値については、必須入力チェックで。  マスターデータ参照については、システムエラー。 ○ ユニークについての実装方法は? →入力された結果と一致するデータが  既に登録されているか検索し、チェックする。● アドバイス ○ Not Null制約はアノテーションで実装するといいかも  

×