13 July 2009
ページ ツール |
Webテクノロジーの基本的な理解が必要です。
すべて
現在、あまりに多くの優れたAdobeテクノロジーが次々とリリースされているため、そこから紹介すべき新しい機能だけを取り上げるのは難しいのですが、Adobe ColdFusion 9とAdobe ColdFusion Builderを使用したSOAの再構築についての説明は、そのよい出発点となるでしょう。
このチュートリアルでは、ColdFusion 9を使う開発者が、様々な言語で作成され、複数のデバイスに配信される分散アプリケーションにサービスを提供する新しい機会について話します。その過程で、ColdFusion Builderを使用するとColdFusionを単独で使用するよりも生産性が向上することを、より良く理解できるようになります。
ここ数年、ソフトウェア業界では、1つのチャネルまたはプラットフォーム内でのソフトウェアの配信から、様々な方法でソフトウェアを利用する方向への動きが顕著になっています。その代表的な例がTwitterです。Twitterは、毎日推計5,000~10,000人の新しい登録者を獲得するマイクロブログサイトです。Twitterは、Webコミュニティでは当初から広く受け入れられ、歓迎されたものの、ブラウザーベースのサイトだけで、ここまでの人気を獲得したのではありません。Twitterは、アプリケーションプログラミングインターフェイス(API)経由でサービスを公開しています。そのため、開発者は、一般的なブラウザーベースWebアプリケーション、マッシュアップ、iPhone、Blackberry、その他のモバイルデバイス、幅広い人気のあるAdobe AIRベースのTweetDeckのようなデスクトップアプリケーションを通じて、開発したアプリケーションを社会に広めることができたのです。これをすべて可能にしているのが、サービス指向アーキテクチャ(SOA)によって提供されるインフラストラクチャです。Twitterは、機能をサービスとして公開することで飛躍的な成長を遂げましたが、これは開発者が、Flex、ColdFusion、.NET、Javaまたは任意のプラットフォームのその他の言語を使用して、コアインフラストラクチャ上で魅力的なアプリケーションを作成できることによります。
SOAは、Twitterだけでなく、多数の優れたアプリケーションの基盤となっています。これらのアプリケーションに共通しているのが、正しく記述されたAPIです。APIは、Webサービス経由で公開され、SOAP、RESTなどの定義済みのプロトコルを通して様々なアプリケーションに利用されます。Twitterの次に流行するすばらしいアプリケーションを開発する予定がないとしても、これをお読みになっているということは、プロジェクト成功の鍵として信頼性の高いソフトウェアの効率的な構築方法をお探しのはずです。ColdFusionは、これまで常にサービス層の高速アプリケーション開発(RAD)を可能にしてきました。ColdFusion 9を使用すると、サービスの作成が改善されるだけでなく、重要なインフラストラクチャが、Adobe Flexアプリケーションなどの広範囲のアプリケーションから利用されるサービスとして公開されるため、開発がますます容易になります。ColdFusionではサービス層を簡単に拡張でき、サービス層の拡張によりアプリケーションの同じコア機能を、JavaScript、Ruby、PHPまたはiPhone開発用のObjective Cなどの非Web言語を含め、言語に無関係に任意のプラットフォームに拡張できます。
ColdFusionを使用して独自のサービスを作成するには、ColdFusion Component(CFC)を作成し、CFCをWebサービスとして公開します。これらのサービスは、REST、SOAP、Flash RemotingとAMFなど、多数の方法で利用できます。ColdFusionでは、コードを組織化し、基礎となるJ2EEプラットフォームアーキテクチャを活用するための方法として、2002年にColdFusion MX 6にCFCを導入しました。CFCの導入により、一般的なオブジェクト指向デザインパターンの実装が可能になり、コードの再利用と保全性が促進されたほかに、リモート機能も追加されました。リモート機能により、開発者は、ColdFusion機能の定義のアクセスタイプをremoteとするだけで、公開されるサービスを簡単に作成できるようになりました。
2009年、アドビは新しい製品を公開し、既存製品の名称を変更して、製品の相互運用性をさらに向上させました(2006年の初めには、デザイナーがプログラム間でファイルを交換できるようにCreative Suite製品を改善しました)。これらの製品は、現在、Adobe ColdFusion Builderベータ版(ColdFusion IDE)とAdobe Flash Builder 4ベータ版(Flex/ActionScript IDE)として利用可能で、サービスの開発、構成、公開および利用における多数の手順を自動化できます。
ColdFusion Builderは、HomeSite+がDreamweaver MX 2004とパッケージされて以降に開発者用に導入された最初の新しいColdFusion IDEです。ColdFusion Builderは、Eclipseプラットフォームのトップに構築される強力なColdFusion IDEとして動作するだけでなく、以前にAdobe Flex Builder 3に含まれていたいくつかの機能(つまりCFCコード生成とActionScriptファイル生成)も引き継いでいます。
開発者は、ColdFusion Builderベータ版を使用して、アプリケーションで利用するためにデータベースからサービスをすばやく作成できます。ColdFusion Builderは必要なCFCを生成するだけでなく、Flexアプリケーションで使用する必要なAS3ファイルも生成できます。ColdFusion Builderをインストールするときにサンプルをインストールした場合、AS3ClassGenerator.zipという名前のファイルが <cfbuilder_install>/samples ディレクトリにあるはずです。このエクステンションをインストールするには、次のステップに従います。
このエクステンションは、データベーステーブルまたはCFCからAS3ファイルを作成できます。最初の例では、cfartgalleryデータベースのデータベーステーブルから直接AS3ファイルを生成します。cfartgalleryデータベースは、インストール中に選択した場合にColdFusionと一緒にインストールされます。実行するには、RDSを有効にした状態の開発ColdFusionサーバーに接続する必要があります。
注意:開発環境以外ではRDSを有効にしないでください。RDSは、悪意のあるユーザーによるファイルとデータベースへのアクセスを可能にするセキュリティリスクとなります。
注意:Eclipseを初めて使用する場合、Eclipseサイト*でパースペクティブ、ワークスペースなどについて学習できます。
RDS Dataviewは、ColdFusion Builderベータ版内で使用可能な、現在構成されているすべてのサーバーを一覧表示するツリービューです (ColdFusion Builderベータ版でServersビューを使用して新しいサーバーを構成できます)。
これで、Flexプロジェクト内でファイルの編集と使用を開始できます(図7を参照)。
私が多くのプロジェクトでそうしているように、複数の展開にわたるデータの持続性を処理するために、ColdFusionをサービス層として使用できます。アプリケーションがHTMLとJavaScript、Flex、ActionScript、JavaまたはiPhoneアプリケーション用のObjective Cのどれで作成されているかに関係なく、ColdFusion Builderベータ版は、オブジェクト関係マッピング(ORM)持続性サービスを、ORM用にHibernateを実装するColdFusion 9 betaに対して簡単に生成できます。
注意:ORMサービス層は前のバージョンのColdFusionでも作成できるので、ColdFusion 9ベータ版がない場合でも、ColdFusion Builderベータ版を使用してこれらのCFCからActionScriptファイルを生成できます。
次のステップに従って、ColdFusion Builderで特定のデータベーステーブル用のCFCを自動的に生成します。
3つのファイルがプロセスにより生成されます。
最初のファイルApplication.cfcには、2つの重要な命令が含まれています。最初の命令で、現在のアプリケーションのORMサポートを有効にすることをColdFusionサーバーに通知できます。2番目の命令は、CFCが使用するデータソースを指定するために、生成されたCFCによって使用されます。Application.cfcファイルにこの情報を保持すると、例えば、開発から生産環境に移動するときにデータソースが変わる場合、このデータソース名を1か所で編集するだけで済みます。
このプロセスによって生成された2番目のファイルは、ファイル名がART_view.cfmで、テーブル内のデータセットを読み込み、データを表形式で表示します(生成されたコードの説明およびその他のORM機能については、ColdFusion 9ベータ版ドキュメント*を参照してください)。このファイルをブラウザーで実行すると、CFMLを記述しなくても、データベーステーブルのすべてのレコードがCSSですぐにスタイリングできる状態にある、HTMLテーブルが表示されます(図10を参照)。
生成される3番目のファイルは、ART.cfcという名前のCFCです。このCFCは、ColdFusionのORM機能によって消費されるすべての必要なプロパティを備えています。ColdFusion 9ベータ版によって提供されるこの基本的なCFCと関連ORM機能は、サービス層にラップされ、様々なアプリケーションで使用するためにWebサービスとして公開できる場合があります。
前の例でActionScript Class Generatorをインストールしているので、CFCを右クリックして、Flexプロジェクトで使用するための関連ActionScriptクラスを生成できます。
データベーステーブルからクラスを直接生成するときに使用できない、2つの新しいオプションがあります(図11を参照)。最初は「Include CF-AIR Offline Metadata」です。これには、Adobe AIR SQLiteデータベースでデータオフラインを持続するための指示が含まれます。2番目はデータソースです。データソースは、CFCにこの情報が含まれていない場合にのみ必要です。ColdFusion 9ベータ版では、生成されたファイルをFlexアプリケーション内で使用できるため、データの持続性を高い信頼性で効果的に処理できます。ColdFusion Builderベータ版を使用することで、コード行を記述する必要がなくなりました。
実際には、ColdFusionの機能はしばしば、フロントエンドに代替テクノロジーを持つアプリケーションのバックエンドで使用されます。メール送信、PDFの作成などのこれらサーバーサイドの機能は通常、CFCでラップされ、分散アプリケーションへのサービスとして公開されます。ColdFusion 9ベータ版では、こうしたサーバーサイドの機能の多くをネイティブサービスとして公開し、CFScriptまたはCFMLの知識のない開発者がWebアプリケーションの開発と展開を促進できるようにしています。
Webアプリケーション内でのサーバーサイドテクノロジーのニーズの典型的な例は、メールの送信に対するものです。これまでに会ったほとんどすべてのWeb開発者は、連絡先フォームを作成したことがあり、全員に、フォームのコンテンツを解析し、電子メール経由で送信するためにサーバーサイドテクノロジーの決定を迫られた経験がありました。ColdFusion 9ベータ版を使用すると、クライアントサイド開発者が、ColdFusionコードを1行も記述することなく、すべてのフォームのコンテンツを送信するためにColdFusionサービスを呼び出すことができます。
始めに説明したように、優れたSOAの実装は、正しく記述されていなければなりません。ColdFusionも例外ではありません。CFCDocExplorerを使用すると、開発者は、ColdFusionサービス(CFaaS)Webサービスを構成するCFCを典型的なJavaDocスタイルで表示できます。この例については、http://localhost:8500/CFIDE/services/mail.cfcに移動してmail.cfcのドキュメントを参照してください(これは、ColdFusion 9ベータ版の単一サーバーインストールのデフォルトパスです。パスは異なる場合があります)。ColdFusion AdministratorまたはRDSパスワードでログインするよう求められる場合があります。
クライアントサイドJavaScriptからColdFusionサービス(CFaaS)でメールを送信することは、簡単な作業です。この例では、2つのファイルで呼び出しを構成します。1つは、HTMLフォーム経由でデータを収集するHTMLページです。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>ColdFusion 9 CFaaS Sample</title>
<script type="text/javascript" src="lib/js/yui/utilities.js"></script>
<script type="text/javascript" src="lib/js/mail.js"></script>
<style type="text/css">
form div {
width: 600px;
float: left;
clear: both;
padding: 5px;
}
input, textarea {
float: left;
clear: none;
}
textarea {
width: 300px;
height: 125px;
}
label {
width: 200px;
float: left;
clear: none;
text-align: right;
padding-right: 5px;
font-weight: bolder;
}
form div button {
margin: 0 0 0 205px;
}
</style>
</head>
<body>
<form id="frmMail" action="javascript:void(0);">
<div><label for="mailserver">Mail Server:</label><input type="text" id="mailserver" /></div>
<div><label for="serviceuser">CFaaS Service User:</label><input type="text" id="serviceuser" /></div>
<div><label for="servicepassword">CFaaS Service Password:</label><input type="password" id="servicepassword" /></div>
<div><label for="mailto">To:</label><input type="text" id="mailto" /></div>
<div><label for="mailfrom">From:</label><input type="text" id="mailfrom" /></div>
<div><label for="mailsubject">Subject:</label><input type="text" id="mailsubject" /></div>
<div><label for="mailcontent">Content:</label><textarea id="mailcontent">This is a test message
I am sending from JavaScript through CFaaS!</textarea></div>
<div><button onclick="mail.send();">Send Mail</button></div>
</form>
</body>
</html>
ユーザーが「Send Mail」をクリックすると、JavaScriptオブジェクトがプロセスをコントロールすることに注意してください(HTMLに直接書かれたJavaScript関数も機能しますが、mail.jsとして読み込まれます)。JavaScriptオブジェクトには、サービス呼び出しに含まれるフォームパラメーターを受け付けるsend()メソッドが含まれています。
mail = {
/**
* @description Sends mail via CFaaS
* @method send
* @public
* @return {void}
*/
send: function () {
// create a callback object
var callback = {
success: mail.successSend,
failure: mail.failureSend
}
// set up the params to pass the service
var postData = "method=send&&username=&password=&bcc=&cc=&type=&failto=&mailerid=&priority=&timeout=&usessl=&usetls=&wraptext=&replyto=&mimeattach=&charset=" +
"&server=" + escape(YAHOO.util.Dom.get('mailserver').value) +
"&serviceusername=" + escape(YAHOO.util.Dom.get('serviceuser').value) +
"&servicepassword=" + escape(YAHOO.util.Dom.get('servicepassword').value) +
"&from=" + escape(YAHOO.util.Dom.get('mailfrom').value) +
"&to=" + escape(YAHOO.util.Dom.get('mailto').value) +
"&subject=" + escape(YAHOO.util.Dom.get('mailsubject').value) +
"&content=" + escape(YAHOO.util.Dom.get('mailcontent').innerHTML);
// make the Ajax call
YAHOO.util.Connect.asyncRequest('POST', '../../CFIDE/services/mail.cfc', '', postData); },
successSend: function (o) {
alert('Your mail has been sent via ColdFusion 9 CFaaS!');
},
failureSend: function (o) {
alert('An error occurred while sending mail.');
}
}
さらに簡素化するために、このJavaScript呼び出しではYahoo! User Interface Library(YUI)を使用してAjax POSTをCFaaSにします。Ajaxをサポートするその他のJavaScriptライブラリも動作します。非同期要求の送信先URLは、ColdFusionがメールサービスの定義に使用するCFCのパスです。メールサービスのCFCDocExplorerドキュメントを参照すると、mail.cfcは、多量の引数を受け付ける1つのメソッドを公開します。必要なデータをHTMLフォームに入力し、「Send Mail」をクリックすると、JavaScriptオブジェクトのsend()メソッドが呼び出されます。send()メソッドは、現在の非同期呼び出しの認証に使用される2つのセキュリティ引数を含め、すべての必要な引数をCFaaSに通知します。これらの資格情報は、Security/User ManagerのColdFusion Administratorに定義されています。新しいユーザーを作成し、サービスユーザーのパスワードを定義します。
次に、ユーザーがアクセスできるサービスを定義する必要があります。この例では、「Mail Service」を選択する必要があります。適切なサービスを選択した後、「Add User」をクリックします。
Security/Allowed IP Addressesで許可されたIPアドレスを追加することも必要です(注意:アドレスが入力されていない場合、IPアドレス設定のデバッグの際の動作と異なり、ユーザーは公開サービスを呼び出すことができません)。上述の例は必ずしもセキュリティ保護されていないことに留意してください。CFaaS公開サービスを利用するアプリケーションを実装するときには必ず、個別の使用ケースを定義し、必要なセキュリティを含めるための手順を含めます。
例をテストするには、サンプルファイルの解凍場所であるCF Webルート内のmailtest.htmlに移動します。必要な情報を入力し、「Send Mail」ボタンをクリックします。成功アラートが表示されない場合、CFログをチェックして、ColdFusion Administratorでのメールサーバーが適切に構成されているか、確認が必要となる場合があります。
ColdFusion BuilderでServices Browserを調査して、ColdFusion 9内の次の公開サービスの詳細を確認します。
Adobe Flex開発者の場合、このリストの多くのColdFusionサービスを手早く簡単に利用するために使用可能な、ActionScript 3.0クラスについて調べてみてください。詳しくは、Developing ColdFusion 9 Applications: Flex and AIR Integration in ColdFusion*を参照してください。
優れたソーシャルアプリケーションの作成でも、社内向けイントラネットアプリケーションの開発でも、ColdFusion 9とColdFusion Builderを使用すると、配信方法、デバイスまたはColdFusionに関する専門知識に関係なく、サービス層の開発がかってないほど容易になります。RADプラットフォームとして、ColdFusion、Flexおよび関連するIDEは、Webおよびデスクトップアプリケーション開発の主力製品として際立っています。この記事では、ColdFusion BuilderとColdFusion 9の新機能を簡単に紹介したにすぎません。Adobe ColdFusionおよびSOAのパワーについて詳しくは、Adobe Developer Connection、ColdFusion Cookbook*およびFlex Cookbookの参照を強くお勧めします。
Tutorials & Samples |
ColdFusion Blogs |
More |
| 02/09/2012 | ColdFusion ORM book now in Kindle and EPUB format |
|---|---|
| 02/08/2012 | Adobe eSeminar on ColdFusion and Monitoring |
| 02/07/2012 | ColdFusion offer from Intergral |
| 02/05/2012 | CF101 Archive: October 2007 Every Beginner must Grow Up |
ColdFusion Cookbooks |
More |
| 07/27/2011 |
Passing a list with |
|---|---|
| 05/27/2011 | AUTOMATED SANITIZED Resultset with ColdFusion |
| 03/16/2011 | Using Metadata To Add Static Variables to ColdFusion Components |
| 03/10/2011 | Find an extension |