Archive for the ‘Google App Engine’ Category

GAE/J で opensocial-java-client の OpenSocialRequestValidator#getRequestUrl 使ってみたら

http://hogehoge.appspot.com:0

のような感じになった。ポートがおかしい。
# version : opensocial-20091229.jar

ソースを追いかけてみると、80, 443 でないポートの場合はポート番号をくっ付けるコードになっていた。
てことは、GAE がポート0を返しているのか。

とりあえずポート0番も無視するようにコードを書き換えると、意図した挙動になった。
もう少し検証したら Issue で投げてみてもいいかも。

いろいろ調べていたんだけど、GAE/J でアプリを作成するなら slim3 が良さそう。
以下、雑多なメモ

slim3 + Lift というのはどう? どちらもDatastore 操作は Enhancer だし、うまくやれば動くんでない?
これをやるなら Lift(scala) + slim3(java) を行き来することになりそう。
Scala のアノテーションが完璧になるのは 2.8 なので, もう少し待ちたい肝。
GAE/J は何でもない処理でもエラーが出る!なにこれ仕様なの?
memcacheの信頼性が低い。
memcache のインクリメントがatomic
memcache から引っ張るのと、Datastore から引っ張るのはそこまで速度変わらない
Datastoreは異なるテーブル間でjoinできない
10秒の壁、30秒の壁

さて、面白くなってきた

時間ができたときに Google App Engine for Java + Lift/Scala を調べたりしてるんだけど、
前回作ったプロジェクト作成コマンドがいつのまにかエラーが出るようになっていた。

# mvn archetype:create -U
-DarchetypeGroupId=net.liftweb
-DarchetypeArtifactId=lift-archetype-blank
-DarchetypeVersion=1.1-SNAPSHOT
-DremoteRepositories=http://scala-tools.org/repo-snapshots
-DgroupId=j2
-DartifactId=PROJECT_NAME

1.1-SNAPSHOT から 1.1-M7 にすることで動くようになった。
でもいつからエラーが出るようになったんだろう・・・

# mvn archetype:create -U -DarchetypeGroupId=net.liftweb
-DarchetypeArtifactId=lift-archetype-blank
-DarchetypeVersion=1.1-M7
-DremoteRepositories=http://scala-tools.org/repo-snapshots
-DgroupId=j2
-DartifactId=PROJECT_NAME

ちなみに 1.1-M7 の方が開発版ということもあって更新されている。
とりあえず M7版でやってみることにします。

1.1-M7 以外にも 1.1-scala2.7.7.RC1-SNAPSHOT, 1.1-scala2.7.7.RC2-SNAPSHOT なんてものあるみたい。

Google App Engine for Java に Scala で作られている Lift というフレームワークを載せてみた。

**Lift の導入
***Apache Maven

Lift は Apache Maven でプロジェクトを作成できる。最新版は 2.2.1
http://maven.apache.org/download.html

こちらは
C:\Program Files\Apache\Maven\2.2.1 にインストール。※インストーラでは無いのでコピー

インストールした後はパスを通す
set PATH=C:/Program Files/Apache/Maven/2.2.1/bin;%PATH%

***プロジェクト作成

Apache Maven が導入できたら、プロジェクト作成
Lift が GAE/J に対応しているのは 1.1 以降なので安定版である 1.0 は利用できない。
1.1-SNAPSHOT を利用する

PROJECT_NAME は適当に変更してください

# mvn archetype:create -U -DarchetypeGroupId=net.liftweb -DarchetypeArtifactId=lift-archetype-blank -DarchetypeVersion=1.1-SNAPSHOT -DremoteRepositories=http://scala-tools.org/repo-snapshots -DgroupId=j2 -DartifactId=PROJECT_NAME

***ビルド環境

Simple Build Tool を利用する
最新版は sbt-launcher-0.5.6.jar
http://code.google.com/p/simple-build-tool/

ダウンロードしたら、先ほど作成した PROJECT_NAME プロジェクトに入れる
PROJECT_NAME/pom.xml
PROJECT_NAME/src
PROJECT_NAME/sbt-launcer-0.5.6.jar

同ディレクトリに sbt.bat を作成する
set SCRIPT_DIR=%~dp0
java -Xmx512M -jar “%SCRIPT_DIR%sbt-launcher.jar” %*
と記述して保存。

詳しくはここ読んで。
http://code.google.com/p/simple-build-tool/wiki/Setup

sbt.bat を叩くとプロジェクトが作成される

# sbt
# set SCRIPT_DIR=PATH_TO_WORKDIRECTORY\PROJECT_NAME\
# java -Xmx512M -jar “PROJECT_NAME\sbt-launcher-0.5.6.jar”
Project does not exist, create new project? (y/N/s) : y
Name: Hello World
Organization []:
Version [1.0]: 1.0
Scala version [2.7.7]:
sbt version [0.5.6]:

# sbt compile
コンパイルをしたらエラーが出た。設定ファイル等が間違っているかもしれない
今回はプロジェクト作成にのみ利用した

sbt ではエラーになってしまったので、代わりに Maven を使う

src/main/webapp/WEB-INF/appengine-web.xml を作成する。内容は下記

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <application>PROJECT_NAME</application>
  <version>1</version>
  <system-properties>
    <property name="in.gae.j" value="true" />
  </system-properties>
  <sessions-enabled>true</sessions-enabled>
  <static-files>
    <exclude path="/**" />
  </static-files>
</appengine-web-app>

# mvn package
コンパイルできた。必要なライブラリは勝手にダウンロードされる

# dev_appserver target\PROJECT_NAME-1.0-SNAPSHOT
でローカル環境で実行される

# appcfg update target\PROJECT_NAME-1.0-SNAPSHOT
でアップロードされる

とりあえずひな形作成とローカル、ウェブサーバでの動作確認まではできた。

クラウド使う機会がありそうなので、まずは環境を導入してみました。
Googleの導入事例に沿ってのメモなので特に特筆すべき点とかはないです(^^;

*GAE/J (Google App Engine for Java) 導入メモ

**環境
windwos XP SP3
Mac OS X 10.5.8

**必要なものなど
Java5, または Java 6 (JDK5, JDK6)
Google App Engine for Java
eclipse (option)

**手順
***JDK6

http://java.sun.com/javase/downloads/widget/jdk6.jsp
Mac の場合は下記
http://developer.apple.com/java/download/

windows では
C:/Program Files/JDK/1.6.0_17 にインストールした。

インストールした後はパスを通す
set PATH=C:/Program Files/JDK/1.6.0_17/bin;%PATH%

下記のコマンドを叩いてバージョンを確認する。

# java -version
-> java version “1.6.0_17″
# javac -version
-> javac 1.6.0_17

***Google App Engine for Java (GAE/J)
GAE/J をインストールします。現在の最新バージョンは 1.2.6
http://code.google.com/intl/ja/appengine/downloads.html

>Eclipse と Google Plugin を使用している場合は、Eclipse のソフトウェア更新機能で
>App Engine SDK をインストールできます。「Google App Engine Java SDK」コンポーネントを
>まだインストールしていない場合は、上に示した場所からインストールしてください。

windows では
C:\Program Files\Google\AppEngine\SDK\Java\1.2.6 にインストールしました。

インストールした後はパスを通す
set PATH=C:/Program Files/Google/AppEngine/Java/1.2.6/bin;%PATH%

Mac では下記のように設定した
export GAEJROOT=$HOME/sdk/Google/AppEngine/Java/1.2.6
export GAEJBIN=$GAEJROOT/bin:$PATH

**デモ
各種パスが通っていれば下記のコマンドでアプリが起動する

windows:
# dev_appserver.cmd “C:/Program Files/Google/AppEngine/Java/1.2.6/demos/guestbook/war”

Mac:
# dev_appserver.sh $GAEJROOT/demos/guestbook/war

起動が確認できたら

http://localhost:8080/

Mac,winともに、これで最低限の環境構築が出来たはず。
次はプロジェクトを作ってみて、お目当ての Scala を動かしてみます