CodeZine(コードジン)

特集ページ一覧

Google Web ToolkitでSQL AnywhereのWebサービスを利用する

GWTを使ったアプリケーションの作成

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2007/02/26 00:00

ダウンロード ソースコード (7.4 KB)

SQL AnywhereのHTTPサーバ機能を利用するためのセットアップ方法と、GWTの使用方法、さらにSQL AnywhereにWebアプリケーションをデプロイする方法を説明します。また、SQL Anywhereサーバへの接続を監視するWebアプリケーションの作成手順も紹介します。

目次

はじめに

 SQL Anywhereはデータベースサーバとして有名ですが、それだけではありません。SQL Anywhereサーバに、データベースクエリの結果セットをWebページまたはWebサービスを介して提供できるHTTPサーバの機能があることはあまり知られていません。Google Web Toolkit(GWT)は、AJAXアプリケーションの作成を簡易化するJavaソフトウェア開発フレームワークです。開発者は、ブラウザ間の違いを意識せずに、使い慣れた環境でおなじみのツールを使ってJavaアプリケーションを作成することができます。GWTには、Javaクラスから各ブラウザ対応のJavaScriptとHTMLを生成するコンパイラが含まれています。

 GWTは便利で使いやすく、SQL Anywhereにも対応しています。本稿では、SQL AnywhereのHTTPサーバ機能を利用するためのセットアップ方法と、GWTの使用方法、さらにSQL AnywhereにWebアプリケーションをデプロイする方法を説明します。また、SQL Anywhereサーバへの接続を監視するWebアプリケーションの作成手順も紹介します。SQL Anywhereでのセキュリティやエラー処理についての説明は省きます。

 本稿は、SQL AnywhereやGWTの経験がない方でもお読みいただけますが、JavaとSQLの知識があることを前提としています。

ソフトウェアを入手する

 GWTのWebサイトからGWTをダウンロードしましょう。本稿の執筆時点で入手可能な最新バージョンはビルド1.1.10だったので、今回はこのバージョンを使いました。

 SQL Anywhereはバージョン10を使いましたが、バージョン9でもかまいません。バージョン10.0.0ビルド2719以上、または9.0.2ビルド3385以上が必要です。それ以前のバージョンにはGWTの動作を妨げるバグがありました。アップデートはSQL Anywhereのデベロッパーサイトからダウンロードすることができます。EBFのリンクに従ってください。SQL Anywhereをお持ちでない場合は、SQL AnywhereのWebサイトから無料の評価版をダウンロードすることができます。

 最後に、SunのJava 2 Runtime Environment 1.4.2以上も必要です。JREはSunのWebサイトからダウンロードすることができます。本稿では最新バージョンのJava 5を使いました。また、Javaソースを編集するためのエディタも必要です。

GWTを使ってアプリケーションを作成する

 本稿では、DBConsoleの接続部のような外観と振る舞いのWebアプリケーションを作成します。DBConsoleはSQL Anywhereを監視するアプリケーションで、SQL Anywhereに付属しています。

 GWTには、シェルアプリケーションを自動的に生成するツールが用意されています。このツールは「applicationCreator」という名前で、インストールしたGWTの最上位のディレクトリに入っています。このディレクトリをパスに追加するか、ツールを実行するときにapplicationCreatorをパスに含める必要があります。まず、プロジェクト用のディレクトリを作成します。ここでは「w:x」を使っているので、この「w:x」を実際に使用するプロジェクトディレクトリに置き換えてください。applicationCreatorを実行するときは、クラスの修飾名を指定する必要があります。パッケージ名の後ろには必ず「.client」を付けます。ここでは、アプリケーションを「com.iAnywhere」というパッケージに入れました。アプリケーションの名前は「Console」です。

アプリケーションの作成
アプリケーションの作成

 アプリケーションを作成すると、アプリケーションをビルドしてホストモードで実行するためのスクリプトも作成されます。

アプリケーションをビルドする

 デフォルトのコンパイルで生成されるJavaScriptは読みにくいので、読みやすくするために「Console-compile.cmd」を編集し、コマンドラインの- outの前に-style DETAILEDを追加します。

 アプリケーションをビルドするには、コマンドラインで「Console-compile.cmd」を実行します。

アプリケーションをホストモードで実行する

 ホストモードでは、アプリケーションはGWTシェルで実行され、アプリケーションの実行環境となるブラウザが起動されます。ビルドした新規アプリケーションをホストモードで実行するには、コマンドラインで「Console-shell.cmd」を実行します。次の2つのダイアログが表示されます。

GWTシェル
GWTシェル
生成した新規アプリケーションをGoogleのブラウザで実行した場合
生成した新規アプリケーションをGoogleのブラウザで実行した場合

データベースを作成してSQL Anywhereサーバを起動する

 Webアプリケーションで使うサービスやストアドプロシージャ、またはWebアプリケーションで使用するデータを保管するためには、データベースが必要です。既存のSQL Anywhereデータベースを使うことも、新規にデータベースを作成することもできます。データベースを作成するには、コマンドラインでdbinit console.dbを実行します。これで、SQL Anywhereデータベースとして初期化される「console.db」というファイルが作成されます。このデータベースファイルは、データベースファイル名をディレクトリパスで修飾しない限り、dbinitの実行先のディレクトリに作成されます。ここでは、プロジェクトディレクトリのルートである「w:x」にデータベースを置きました。

 サーバを起動するには、コマンドラインに次のコードを入力します。

dbsrv10 -xs HTTP(port=80) console.db

 これで、データベースサーバが起動します。データベースアプリケーションがデータベースに接続するには、正しい認証情報を持っていることが必要です。これは、SQL Anywhereサーバの管理下にあるその他のデータベースに接続する場合も同様です。.xsオプションを指定すると、SQL AnywhereはWebプロトコルをリスンします。ここでは、ポート80のHTTP要求が対象となります。

 SQL Anywhereは、特定の要求に応答するために作成されたWebサービスを必要とします。例えば、fooというWebサービスを作成した場合は、次のURLを指定してこのWebサービスにアクセスします。

HTTP://localhost/foo

 ただし、ページの生成中はうまくいきません。GWTは多くのファイルを生成します。こうしたファイルの中には、「Console-compile.cmd」でプロジェクトをリビルドするたびに名前が変わるものもあります。SQL Anywhereのデフォルトでは、要求されるファイルごとに異なるサービスを用意することが期待されますが、この問題には回避策があります。「root」というWebサービスを作成するのです。このrootサービスは、一致するサービスがないすべての要求を処理します。

 rootサービスのソースは次のとおりです。

CREATE SERVICE "root" TYPE 'RAW'
AUTHORIZATION OFF USER "DBA" URL ON
AS call RootPage(:url);

 このサービスは非常に単純です。認証を無効にし、すべての呼び出しにDBA権限を使います。さらに、呼び出しているURLを取得してRootPageストアドプロシージャに渡します。RootPageは要求をディスパッチする処理を行います。

 RootPageは、GWTの出力生成先ディレクトリをURLの前に付加し、そのURLを使用してファイルを読み取り、要求側に返します。RootPageは各ファイルのファイル拡張子を認識し、適切なコンテンツタイプを設定します。ここでは「w:\x\www\」を使いました。「www」ディレクトリは、Console-compileが生成ファイルをデフォルトで書き込む場所です。このディレクトリは、実際にプロジェクトをビルドする場所に置き換えてください。

CREATE PROCEDURE "DBA"."RootPage"( url_part varchar(250) )
RESULT( HTML_doc XML )
BEGIN
   declare root_page long varchar;
   set root_page = xp_read_file( 'w:\x\www\'
                 + HTTP_decode( url_part ) );

   IF COMPARE( '.html', LOWER( RIGHT( url_part, 5 ) ) ) = 0 OR
      COMPARE( '.htm', LOWER( RIGHT( url_part, 4 ) ) ) = 0 THEN
      CALL dbo.sa_set_http_header( 'Content-Type', 'text/HTML' );
   ELSEIF COMPARE( '.js', LOWER( RIGHT( url_part, 3 ) ) ) = 0 THEN
      CALL dbo.sa_set_http_header( 'Content-Type',
                                   'text/javascript' );
   ELSEIF COMPARE( '.css', LOWER( RIGHT( url_part, 4 ) ) ) = 0 THEN
      CALL dbo.sa_set_http_header( 'Content-Type', 'text/css' );
   ELSEIF COMPARE( '.xml', LOWER( RIGHT( url_part, 4 ) ) ) = 0 THEN
      CALL dbo.sa_set_http_header( 'Content-Type', 'text/xml' );
   ELSEIF COMPARE( '.gif', LOWER( RIGHT( url_part, 4 ) ) ) = 0 THEN
      CALL dbo.sa_set_http_header( 'Content-Type', 'image/gif' );
   ELSEIF COMPARE( '.jpe', LOWER( RIGHT( url_part, 4 ) ) ) = 0 OR
      COMPARE( '.jpeg', LOWER( RIGHT( url_part, 5 ) ) ) = 0 OR
      COMPARE( '.jpg', LOWER( RIGHT( url_part, 4 ) ) ) = 0 THEN
      CALL dbo.sa_set_http_header( 'Content-Type', 'image/jpeg' );
   END IF;
   select "root_page";
END;

 Webサービスとストアドプロシージャの作成および維持にはDBISQLまたはSybase Centralを使用できます。DBISQLとSybase CentralはSQL Anywhereに付属のツールです。今回の例では、Sybase Centralの方が効率的であることが分かりました。

 Windowsでは、DBISQLとSybase Centralは[スタート]メニューから起動できます。起動したら、作成した新規データベースに接続する必要があります。新規データベースのデフォルトのユーザーIDは「dba」で、デフォルトのパスワードは「sql」です。他に既に使用しているSQL Anywhereデータベースがある場合は、そのデータベースの名前も指定する必要があります。ここでは、「console」を使います。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:japan.internet.com翻訳記事

もっと読む

著者プロフィール

  • japan.internet.com(ジャパンインターネットコム)

    japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.com や EarthWeb.c...

  • Rob Close(Rob Close)

    SQL Anywhereエンジニアリングチームのシニア開発者。SQL Anywhere向け管理ツールを担当するチームのJavaリーダー的存在。SQL Anywhereの次期バージョンや技術記事の投稿に関わっていないときは、カナダ、オンタリオ州南部で養蜂の仕事をしている。

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5