CENTER検索メインメニューコンテンツへスキップ検索:「サーバ連携」カテゴリーアーカイブサーバ連携PHPでCurlコードを動的生成サーバサイドのテクノロジーを利用して、Curlコードを動的に生成し、アプレットを実行することができます。ここではPHPの例を説明したいと思います。(もちろんASPやJSP・サーブレットでも同様のことが実現可能です。)サンプルコードは以下のようになります。MIMEタイプにtext/vnd.curlを指定します。Curlのコードを出力します。(PHPの場合は、echoを使います。アクセスしますと以下のような画面が表示されます。サーバ連携サーバ・データベース操作(MySQL、Oracle)Curlではデータベースサーバに接続し、RecordSetを生成することができる機能を持っています。Connectivity)と呼ばれており、下図のようにJDBC経由でCurlからOracleやMySQLなどのサーバサイドデータベースに接続することができます。この機能の操作方法を説明していきます。事前準備これを利用するには、以下のものが必要となります。OracleJDBCドライバこれらのセットアップ及びserver.xml等のセッティング方法は、以下のページを参照してください。サーブレットエンジンの構成RecordSetの作成まずは、CDBCを利用するために2つのパッケージをインポートします。CURL.DATA-ACCESS.CONNECTED}次にデータベースに接続するために、Connectionクラスを継承したBasicConnectionクラスのインスタンスを生成します。この際、BasicConnectionのコンストラクタの引数にCDBCサーバのURLを渡します。http://localhost:8080/cdbc-servlet/CdbcServlet}}単純にRecordSet(ここではConnectedRecordSetを継承したCDBC用クラスのBasicCeoonectedRecordSet)を生成するには、BasicConnectionのcreate-record-setメソッドを実行します。この引数には、データベース名とテーブル名(もしくはSQL文)を指定します。以下の例では、RecordGridに表示させています。“example”,”employee”}}SQL文の実行SQL文を実行する際、create-record-setを用いて、select文よりRecordSetを取得できます。employee“}}それ以外に、insert、update、delete、create、drop等のSQLを実行する際は、BasicConnection.executeメソッドを実行します。このメソッドは一度に複数のSQL文も実行することができます。データベースメタ情報の取得いくつかのデータベース・メタ情報を取得するConnectionクラスのメソッドを以下に記載します。操作できるデータベースの一覧を取得できます。操作できるテーブル一覧を取得できます。対象テーブルのカラム情報を取得できます。キーの一覧を取得できます。バイナリフォーマット通信など)が追加されました。それらの一部を紹介します。大量データを扱う場合に、パフォーマンスを向上させるための方法として、2つサポートしています。1つはHTTP圧縮機能です。これを用いますとサーバとの通信時に自動的に圧縮・解凍され、トラフィックが低減されます。利用するには、BasicConnectionのインスタンス生成時にcompress?キーワード引数にtrueをセットします。true}もう一つのパフォーマンス向上機能として、通信フォーマットのシリアル化があります。通常CDBCはXMLで通信を行いますが、通信及びパースの高速化を行うため、Curl独自バイナリフォーマットのシリアル化・デシリアル化を自動的に行うという機能がサポートされました。これは通常のXMLと比べ5分の1から10分の1程度のスピードアップします。(ただし、データ量やデータ内容などによりスピードアップ率が変わる可能性があります。)これを利用するには、BasicConnectionのインスタンス生成時にserialize?キーワード引数にtrueをセットします。下位互換のためデフォルトはfalseとなっていますが、基本的にはこのパラメータをtrueにすることをお勧めします。true}その他の機能として、非同期通信及びrealmを利用した認証があります。どちらもBasicConnectionのインスタンス生成時にキーワード引数として指定します。非同期通信の場合には、async?、realm認証の場合にはusernameとpasswordを指定することにより、この機能を利用することができます。JDBCで扱われるデータタイプのほとんどが、Curlのデータタイプに自動的にマッピングされますので、開発者は簡単にアプリケーションの開発を行うことができます。Curl6.0からサポートされた機能ですと、OracleのBLOBタイプをCurlのByteArrayにマッピングしてくれます。基本的なサーバ連携アプリケーションCurlはクライアントサイドに特化した言語のため、サーバーサイドの技術に依存しません。そのため、サーバーサイドとのインターフェースをあわせればどんなサーバーサイドの技術とも連携できます。ここではサーバーサイドの技術としてServletを利用し、HTTPでの通信を行う基本的なCurlの実装方法を紹介していきます。環境構築サンプルで使用する環境について説明します。※サンプルでは以下の環境を前提としていますが、CurlではHTTP通信ができれば問題ないので、独自でその他の環境を構築しても問題ありません。レスポンスとしてXMLを返す必要がありますので、その点だけ注意が必要になります。データベースサンプルではデータベースとしてAccessを使用するのでデータソースの登録が必要になります。[ユーザDSN]に、サンプルのMDBファイル[sampledb.mdb]を[SampleData]の名前で登録してください。サーバーサイドサンプルではサーバーサイドとしてServletを使用しますのでServletが動作する環境が必要になります。以下のものが動作するようにインストールおよび初期設定を行ってください。・JDKのインストール・Tomcatのインストールインストール後、Tomcatをインストールしたフォルダのwebappsフォルダに/sampleフォルダをコピー後、Tomcatを起動してください。以下のXMLが表示されれば、正常に起動しています。クライアントサイド任意のフォルダに/sample_curlフォルダをコピーしてください。Curlのアプレットをfile:で実行する場合、特権の設定が必要になるので、以下の設定を行ってください。・「スタート」-「プログラム」-「CurlRTE」-「Curlコントロールパネル」を選択します。・「セキュリティ」タブを選択し、「このコンピュータ」で「特権ディレクトリの追加」をクリックし、先ほどコピーしたフォルダのパスを入力します。<動作確認>/sample_curlフォルダ内の○○.curl(sample1.curl、sample2.curl)をダブルクリックしてブラウザにCurlのアプレットが表示されれば、正常に起動しています。この状態から検索ボタンを押下することによってDBからデータを取得し、結果が画面に表示されます。検索条件(name)に値(111)を入力し検索ボタンを押下すると以下のようになります。通信の流れ通信をする際の流れは以下の通りになります。Curlでリクエストデータを生成し、サーバサイドに対してHTTPリクエストを送信します。サーバーサイドでそのリクエストを受信し、ロジックを実行します。その後、クライアントサイドにレスポンス(XML)を返却し、クライアントサイドでそのレスポンスを解析およびデータオブジェクト(Curlのデータオブジェクト)を生成します。通信の流れを以下の図で示します。HttpForm.submit-openHttpForm内に配置されたコントロール(TextFieldやDropdownリストなど)のnameオプションにリクエストのパラメータ名を指定し、HttpForm.submit-openメソッドを使用することによりサーバーサイドにリクエストを送信することができます。このメソッドの戻り値がレスポンスになりますので、レスポンス処理にこの戻り値を渡し、レスポンスの解析を行います。“通信エラーが発生しました。“エラーが発生しました。HttpFile.http-read-openHttpFormを使用せずにリクエストを送信する方法もあります。この方法を使用することによってより柔軟な通信が可能になります。HttpFormDataインスタンスを生成し、このインスタンスに送信したいリクエスト情報を追加します。その後、HttpFile.http-read-openメソッドを使用することによりサーバーサイドにリクエストを送信することができます。このメソッドの戻り値がレスポンスになりますので、レスポンス処理にこの戻り値を渡し、レスポンスの解析を行います。“通信エラーが発生しました。“エラーが発生しました。DefaultHandlerを継承SAXParserを使用し、独自のXMLハンドラクラスのインスタンスをセットすることによりXMLの解析を行います。WSDKのエラボレーション使用WSDKで提供されているAPIを使用することでXMLを解析することもできます。Railsではバージョン1.2からRESTがサポートされました。これはPUT・GET・DELETE・PUTによるHTTPリクエストによりRailsにアクセスすることができます。これを利用し、CurlとRailsとの連携サンプルを紹介します。環境セットアップまずはMySQLをインストールし、以下のSQL文を実行することでテーブルとデータを作成します。VALUES(default,’amori’,’Akira’,’Mori’,’111-111-111′,0);次にRubyとRails2.0をインストールします。Rubyはワンクリックインストーラで簡単にインストールできます。(http://www.rubyonrails.org/)その後、以下のコマンドを実行し、Railsをインストールします。demo”コマンドによりdemoディレクトリを作成します。demodemoディレクトリが作成されましたら、その配下のディレクトリにあるconfig/database.ymlファイルを開き、データベースの設定を行います。以下のような設定にします。localhostさらに以下のコマンドを実行しますと簡単なRailsアプリケーションが出来上がります。Employee最後にWebサーバ(WEBrick)を起動します。これは3000ポートで立ち上がります。script/serverブラウザで以下のURLを開き、稼動確認ができます。http://localhost:3000/employees/また、RESTで稼動確認するためには以下のURLを開きます。RailsにアクセスRailsでは以下のようなHTTPアクセスでCRUD(Create/Read/Update/Delete)を実現できるようです。/employees/1※Curl6.0では、PUT、DELETEメソッドがサポートされていませんので、サンプルプログラム内ではGETやPOSTにて代用しています。(将来的にはサポートされる予定です。)そこで、簡単にアクセスできるレコードセットRailsRecordSetをサンプルとして作成してみましたので、それを用いて連携させてみることとします。RailsRecordSetクラスの入っているパッケージCOM.CURLAP.EXAMPLES.RAILSをimportします。次にRailsRecordSetを引数にRailsサーバのパス・エンティティ名・RecordFieldsを指定して生成します。String}}}この生成したRailsRecordSetをRecordGridコントロールに紐付けることにより、簡単に画面表示させることができます。“#ccffff”},また、RecordGrid内でのレコード追加・修正後、commitボタンを押下することにより、データベースへの更新を行うこともできます。Rails連携サンプルサーバ連携cometdを用いたリアルタイム通信/サーバ・プッシュWebアプリケーションではサーバからのデータ配信をクライアント側でリアルタイムに受信する方法が必要となるケースがあります。従来これは画面のリロードやポーリング等による実装がなされてきました。さらなるリアルタイム性を実現するために「Comet(コメット)」と呼ばれるHTTPセッションを接続し続けて、疑似的にサーバ・プッシュ(サーバ配信)を実装する手法がAjaxとともに多く使われるようになってきました。これをCurlで実装するための方法を記載していきたいと思います。当サンプルでは、BAYEUXプロトコル(1.0Draft1)というJSONフォーマットで定義されたプロトコルの実装であるcometdのクライアントサイドライブラリを用いて、サーバ・プッシュを実現できるようにしています。そこで、Javaの実装の一つであるJettyに搭載されているcometdを利用して、サンプルを説明していきたいと思います。ちなみにcometd/BAYEUXプロトコルの詳細については以下のサイトを参照してください。http://www.cometd.com/cometd準備及びサンプル実行1.以下のサイトからJetty6.1.7をダウンロードします。http://www.mortbay.org/2.上記でダウンロードしたzipファイルを展開します。3-1.Windowsの場合、Jettyを展開したディレクトリのbin/Jetty-Service.exeをダブルクリックし、Jettyを起動します。3-2.UNISの場合、jetty.shによりJettyサーバを起動します。4.サンプルpublish-stock-price.curlを実行しますと以下のような画面が表示されますので、「株価配信ボタン」を押下します。5.別ブラウザにてsubscribe-stock-price.curlを起動し、以下の画面を表示させ、「リアルタイム株価受信開始」ボタンを押下しますと、株価をリアルタイムで受信することができます。リアタイムアプリケーション・サンプルこれらのサンプルプログラムを元に、実装方法を説明していきます。我々は、cometdのCurlクライアントであるCometdClientクラスを用意しています。このクラスは以下のメソッドを用意しています。urlに対象のサーバを指定します。ここでは、http://localhost:8080/cometdを指定しています。