ラベル Google の投稿を表示しています。 すべての投稿を表示
ラベル Google の投稿を表示しています。 すべての投稿を表示

2009/04/10

Google App EngineでH2 Database Engine使ってみた

巷で話題になっているけど、Google App EngineでJavaがサポートされたことで、GroobyやJRuby、Scalaも動かせるようになりました。
Googleがそんなステキなことをしてくれていた陰で、H2はH2 Database Engine 1.1.111をリリースしています。

その変更履歴にこんな1文が。
Version 1.1.111 (2009-04-10)
* In-memory databases can now run inside the Google App Engine.
Google App Engineで、DBにはGoogle App Engine Datastoreを使わないといけなかった(?)んだけど、JavaサポートのおかげでRDBのH2(in-memory)も使えるようになっていたみたい。
ということで、さっそくお約束のHello Worldを試してみました。

まずはweb.xmlにDBの起動/接続設定とHelloWorldServletの定義を追記します。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
<listener>
<listener-class>org.h2.server.web.DbStarter</listener-class>
</listener>

<context-param>
<param-name>db.url</param-name>
<param-value>jdbc:h2:mem:HelloWorld</param-value>
</context-param>
<context-param>
<param-name>db.user</param-name>
<param-value>sa</param-value>
</context-param>
<context-param>
<param-name>db.password</param-name>
<param-value>sa</param-value>
</context-param>

<servlet>
<servlet-name>helloworld</servlet-name>
<servlet-class>net.air_life.gae.HelloWorldServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloworld</servlet-name>
<url-pattern>/helloworld</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>


JDBC URLにjdbc:h2:mem:というように、memを指定してメモリオンリーデータベースとして動作するようにします。
memを指定しないとDBファイルを作ろうとして、下記のような例外が発生します。
org.h2.jdbc.JdbcSQLException: General error: java.security.AccessControlException: access denied (java.io.FilePermission /HelloWorld.data.db read) [50000-111]
次にDBにアクセスするHelloWorldServletを作ります。
package net.air_life.gae;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;

import javax.servlet.http.*;

@SuppressWarnings("serial")
public class HelloWorldServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
resp.setContentType("text/plain");

try {
Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection("jdbc:h2:mem:HelloWorld", "sa", "sa");
ResultSet rs = conn.createStatement().executeQuery("select 'Hello World on Google App Engine for Java'");
while (rs.next()) {
resp.getWriter().print(rs.getString(1));
}
rs.close();
conn.close();
} catch (Exception e) {
resp.getWriter().print(e.getMessage());
}
}
}
あとはデプロイして、アクセスするとHello Worldが表示されます。
だいぶ適当ですが、まずはこれくらいに。

2009/01/29

Google Apps登録+ドメイン新規購入時のenom問題

Google Appsの登録+ドメインの新規購入をしたところ、ちょっと問題に遭遇した。遭遇した問題は↓
Google Appsのダッシュボードを確認すると「お客様のドメインは準備中です」、「お支払いは、保留中です。」という表示のまま数日経過しており、ドメイン登録が完了していない。
また、Google Appsでドメインを購入する際のレジストラとなるenomeでxxx.xxxドメインを検索すると登録可能な状態となってしまっている。
ユーザー側では、対処しようがないのでGoogleに問い合わせをして対応していただいたので、同様の問題に遭遇してしまった方のためにも、その方法を記しておく。

1. サポートに連絡するため http://www.google.co.jp/support/a/bin/request.py にアクセスする。
2. [管理] - [請求に関する質問]を選択して、続行。
3. [管理] - [お支払い] - [その他] - [問題を報告(テキストリンクでわかりにくい)]を選択。
4. お問い合わせフォームが表示されるので、「カスタマー PIN」や遭遇した問題を入力して、送信。

そうすると、後日、↓のような返信が届くので指示に従うことにする(私はまだ削除されてから5日経過待ち)
ご不便をおかけしましたことをお詫び申し上げます。問題を調査しましたところ、eNom.com でのドメインのお申し込みでエラーが発生しておりました。購入費用に対する払い戻しを完了いたしました。

xxx.xxx で再度 Google Apps を使用するには、Google のシステムから既存のアカウントを削除する必要がありますので、削除の手続きを行いました。これにより、アカウントに関連付けられたデータはすべて削除されます。5 日間後にアカウントが完全に削除されますので、その後再度作成するには 2 つのオプションがあります。

- ドメイン登録事業者からドメインを直接購入することができます。 購入後、http://www.google.com/a/ にアクセスし、Google Apps のエディションを選択してください。ドメイン名を入力するよう促すメッセージが表示されると、[既存のドメイン名を使用する
] を選択して、申し込みプロセスを続行します。申し込みが完了すると、ドメインの所有権を確認して、ドメインのサービスを有効にする必要があります。

- Google のドメイン登録パートナー GoDaddy.com でドメイン名を登録していただけます。登録するには、http://www.google.com/a/ にアクセスし、Google Apps Standard Edition を選択してください。ドメイン名を入力するよう促すメッセージが表示されると、[ドメイン名を購入する] を選択して、申し込みプロセスを続行します。

次のページで、「powered by [登録業者]」というテキストが表示されます。GoDaddy.com が選択されていることを確認します。選択されていない場合、「powered by」の横にある [ヘルプ] をクリックし、[GoDaddy.com] を選択します。