Error: Forbidden
Your client does not have permission to get URL /hoge/ from this server.
エラーになります。(2012/05/30現在)
以前紹介しましたが、
通常、GAE/J(Slim3)でSSL通信を設定する場合、
・appengine-web.xmlファイルに「ssl-enabled」を有効にする
<ssl-enabled>true</ssl-enabled>
・web.xmlファイルに「security-constraint」を記述する、
<security-constraint>
<web-resource-collection>
<url-pattern>/hoge/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
の記述が必要になります。
この場合、
http://[GAEのドメイン]/hoge/
にアクセスすると、自動的にhttpsとなる仕様ですが、
GAEのドメインの部分を、独自ドメインを用意・設定してアクセスすると、
前述したエラーとなります。
Googleの説明によると
現在はテスト中らしいです。
Trusted Tester Features>SSL for Custom Domains
https://developers.google.com/appengine/docs/features?hl=ja
Slim3では、GAEのmodelに対して、
自動的に登録日等を設定出来るようなアノテーションがあります。
登録日:
@Attribute(listener = CreationDate.class)
更新日:
@Attribute(listener = ModificationDate.class)
とかですね。
使い方としてはmodelクラスのフィールドに
/** 登録日時 */
@Attribute(listener = CreationDate.class)
private Date createDate;
といった感じで記載します。
(その他別途setter、getterは必要です。)
そうすると、
Hoge.setCreateDate(new Date());
とかしなくても、Datastoreにputした時の日付が自動的にセットされます。
但し、一点落とし穴があります。(勝手に落ちているだけかもしれませんが)
というのも、正しく動作しない場合があります。
ここではそれぞれについて書いてみます。
まず正しく動作する場合
■正しい動作
1.登録
Key key = KeyFactory.createKey("Hoge","foo");
Hoge hoge = new Hoge();
hoge.setKey(key);
Datastore.put(hoge);
2.更新
Key key = KeyFactory.createKey("Hoge","foo");
Hoge hoge = Datastore.get(meta,key);
Datastore.put(hoge);
上記の例では、何も追加せずに更新しておりますが、
最小限でやるとこうなります。
Keyの生成は登録時は必須ではありませんが、今回の解説の便宜上やっています。
正しい動作の場合、ちゃんと上記のやり方で登録日と更新日が登録されます。
それでは次にそうじゃない場合について記載します。
■そうじゃない動作
1.登録
Key key = KeyFactory.createKey("Hoge","foo");
Hoge hoge = new Hoge();
hoge.setKey(key);
Datastore.put(hoge);
2.更新
Key key = KeyFactory.createKey("Hoge","foo");
Hoge hoge = new Hoge();
hoge.setKey(key);
Datastore.put(hoge);
更新でなんでそんな事しているんだとか言われそうですが、
元々登録されていたデータはどうでもよくて、
とにかくKeyだけを同じにして上書きしてやろう
という時に出てくる発想です。
勿論上記の例ではKey以外に何もパラメータを設定していないので、
バカみたいな処理を行っていますが、Datastoreに対しての読み込みコストを削減したい場合は、
有りうる手法なのではないかと思います。
ですが、
この場合、登録日(createDate)は更新時点の日付になってしまいます。
Slim3の内部処理を確認していないので、あくまで結果論となりますが、
いくらKeyが同じでも、オブジェクトを新規に生成した場合は
@Attribute(listener = CreationDate.class)
は、初回登録以降も更新され続けます。
気を付けて下さい。
自動的に登録日等を設定出来るようなアノテーションがあります。
登録日:
@Attribute(listener = CreationDate.class)
更新日:
@Attribute(listener = ModificationDate.class)
とかですね。
使い方としてはmodelクラスのフィールドに
/** 登録日時 */
@Attribute(listener = CreationDate.class)
private Date createDate;
といった感じで記載します。
(その他別途setter、getterは必要です。)
そうすると、
Hoge.setCreateDate(new Date());
とかしなくても、Datastoreにputした時の日付が自動的にセットされます。
但し、一点落とし穴があります。(勝手に落ちているだけかもしれませんが)
というのも、正しく動作しない場合があります。
ここではそれぞれについて書いてみます。
まず正しく動作する場合
■正しい動作
1.登録
Key key = KeyFactory.createKey("Hoge","foo");
Hoge hoge = new Hoge();
hoge.setKey(key);
Datastore.put(hoge);
2.更新
Key key = KeyFactory.createKey("Hoge","foo");
Hoge hoge = Datastore.get(meta,key);
Datastore.put(hoge);
上記の例では、何も追加せずに更新しておりますが、
最小限でやるとこうなります。
Keyの生成は登録時は必須ではありませんが、今回の解説の便宜上やっています。
正しい動作の場合、ちゃんと上記のやり方で登録日と更新日が登録されます。
それでは次にそうじゃない場合について記載します。
■そうじゃない動作
1.登録
Key key = KeyFactory.createKey("Hoge","foo");
Hoge hoge = new Hoge();
hoge.setKey(key);
Datastore.put(hoge);
2.更新
Key key = KeyFactory.createKey("Hoge","foo");
Hoge hoge = new Hoge();
hoge.setKey(key);
Datastore.put(hoge);
更新でなんでそんな事しているんだとか言われそうですが、
元々登録されていたデータはどうでもよくて、
とにかくKeyだけを同じにして上書きしてやろう
という時に出てくる発想です。
勿論上記の例ではKey以外に何もパラメータを設定していないので、
バカみたいな処理を行っていますが、Datastoreに対しての読み込みコストを削減したい場合は、
有りうる手法なのではないかと思います。
ですが、
この場合、登録日(createDate)は更新時点の日付になってしまいます。
Slim3の内部処理を確認していないので、あくまで結果論となりますが、
いくらKeyが同じでも、オブジェクトを新規に生成した場合は
@Attribute(listener = CreationDate.class)
は、初回登録以降も更新され続けます。
気を付けて下さい。
起業準備の傍ら、気分転換にGoogle App Engineで写真共有サイトを作ってみました。
スマホ、PC、携帯、iPad、iPhoneで動作確認しましたが、
iPadとiPhoneはそれぞれの都合でファイルの取り込みが出来ないようです。(見る事だけは出来ます。)
フォトシェア-期間限定写真共有サイト-
http://found-photoshare.appspot.com/
3Mbyteまでのサイズであればアップロードできるので、興味があれば試してみて下さい。
でもアクセス殺到すると、サーバの特性上1日停止します。
また、現在は登録から約1週間過ぎるとアカウントと写真、全て削除されます。
(削除期間はアクセス数に応じて3日くらいに変更する可能性があります。)
ちょっとした写真共有のみにお使い下さい。
気軽な写真共有サイトがないなーと思って作ったので、
会員登録みたいなのはありません。
今後GAEのサーバを使っていこうかなという事で、
負荷テストやその他諸々も兼ねての公開なので、
これ以上品質を上げていこうというのはあまり考えていません。
スマホ、PC、携帯、iPad、iPhoneで動作確認しましたが、
iPadとiPhoneはそれぞれの都合でファイルの取り込みが出来ないようです。(見る事だけは出来ます。)
フォトシェア-期間限定写真共有サイト-
http://found-photoshare.appspot.com/
3Mbyteまでのサイズであればアップロードできるので、興味があれば試してみて下さい。
でもアクセス殺到すると、サーバの特性上1日停止します。
また、現在は登録から約1週間過ぎるとアカウントと写真、全て削除されます。
(削除期間はアクセス数に応じて3日くらいに変更する可能性があります。)
ちょっとした写真共有のみにお使い下さい。
気軽な写真共有サイトがないなーと思って作ったので、
会員登録みたいなのはありません。
今後GAEのサーバを使っていこうかなという事で、
負荷テストやその他諸々も兼ねての公開なので、
これ以上品質を上げていこうというのはあまり考えていません。