エキスパートに聞く: Roland Barcia が AJAX と WebSphere について答える

WebSphere コンサルタントの Roland Barcia が、WebSphere® 上で AJAX 技術を使った Web 2.0 アプリケーションの構築に関する質問に答えます。

Roland Barcia, Certified IT Specialist, EMC

Photo: Roland BarciaRoland Barcia は IBM Software Services for WebSphere の Consulting IT Specialist です。彼は IBM WebSphere: Deployment and Advanced Configuration の共著者の 1 人です。



2006年 10月 25日

はじめに

WebSphere コンサルタントの Roland Barcia が、WebSphere® 上で AJAX 技術を使った Web 2.0 アプリケーションの構築に関する質問に答えます。彼は、AJAX クライアントから WebSphere アプリケーションを呼び出す方法についての質問に答えます (AJAX クライアントには、WebSphere Process Server や WebSphere Enterprise Service Bus、そして WebSphere Application Server があります)。また取り上げる話題としては、一般的なデータ・トランスポート形式 (REST や JSON-RPC、SOAP など)、ツール (Eclipse AJAX Toolkit や Rational ツール)、あるいは AJAX ツールキット (例えば Dojo Toolkit や DWR) などがあります。また、AJAX 技術と IBM の SOA プラットフォームとの統合についても解説します。

質問: IBM は、AJAX サーバーサイド・コンポーネント・フレームワークをどのようにサポートしていますか。

回答: Web 2.0 は IBM® にとって非常に重要です。IBM は Web 2.0 を、SOA (service-oriented architecture) エンタープライズへの入口として、SOA というパズルを解く上で重要な部分と考えています。サーバーサイドという観点では、IBM は今後数ヶ月の間にいくつかの技術をリリースする予定です。こうした技術を利用すると、一般的な Web 2.0 プロトコル (REST や JSON) でサービスを呼び出すことができるようになります。この技術は WebSphere 製品スタックの中で使われます。そうした製品としては、WebSphere Portal の他に、WebSphere Process Server や WebSphere Enterprise Server Bus などの WebSphere Business Integration 製品群があります。また、Web 2.0 サーバーサイド・コンポーネントが、PHP など他のプログラミング言語でも利用できるようになります。

最後に、Web 2.0 は主要プラットフォームとなるものです。IBM は Web 2.0 の上に、セキュリティーなど、エンタープライズ・レベルの要求に応えるものを構築します。セキュリティーは AJAX ベースのアプリケーションにとって大きな懸念事項です。また IBM は業界標準を定義するための協力活動として、Open AJAX Alliance コミュニティーとの連携を行っています。

質問: どの AJAX ツールキットを使うのが最も適切ですか。WebSphere Developer Studio Client で AJAX を使えますか。使えるとしたら、どのように使うのですか。

回答: 「最適な」ツールキットは、あなたが何を必要とするかによって異なります。私が好きなフレームワークはありますが、あなたが何を必要としているのか、私にはわかりません。まず、次のような点について自問してみてください。

  • 非同期呼び出しの抽象化を可能とする JavaScript フレームワークが必要ですか
  • 事前ビルドされた種類豊富なウィジェットと、自分で独自のウィジェットを作れる必要がありますか
  • XML または JSONとして送信される AJAX リクエストのマーシャリングを処理するサーバーサイド・フレームワークが必要ですか
  • AJAX アプリケーションのデバッグを補助する開発環境が必要ですか

以下のようなフレームワークが候補としてあげられます。この中のいくつかはオープンソースのフレームワークであり、それらをサポートするコミュニティーのサポートを得る必要があることに注意してください。

また、この前の質問でも取り上げたとおり、IBM は間もなく Web 2.0 の機能をリリースします。

AJAX ベースのフレームワークの大部分は、JavaScript をベースにしています。そのため、JavaScript ベースのフレームワークをWebSphere Developer Studio Client for iSeries で使うことができます。ただし、Eclipse Toolkit は最近のバージョンの Eclipse をベースにしているため、動作しません。上にあげた、ブラウザー・デバッグ・ツールのいずれかを使うことを検討する必要があります。

質問: WebSphere Process Server のアクティビティーから、外部 Web アプリケーションを同期コールとして呼び出すことはできますか。この Web アプリケーションを、(ビジネス・プロセスの) そのアクティビティー・ステップでユーザーに表示し、その Web アプリケーション・ステップを完了することでそのアクティビティーを完了し、(ビジネス・プロセスの) 次のステップに進むのです。もし呼び出せるのであれば、どうすればこの動作を実現できるでしょう。

回答: あなたのご質問は、ヒューマン・タスクをサポートするのかどうかということだと思います。答えは「イエス」です。Web アプリケーションにページを更新させ、Human Task Manager API を使ったアクティビティーがあるかどうかを調べることができます。これは次のようなステップで行います。

  1. ビジネス・プロセスが Human Task コンポーネントを呼び出してアクティビティーを作成します。
  2. Web ページが Human Task API を使ってキュー上のアクティビティーにアクセスします。もちろん、何らかの非同期 AJAX リクエストをバックグラウンドで使って時々チェックを行い、ほとんどリアルタイムの通知に見えるようにすることも可能です。
  3. そうすると、ユーザーはアクティビティーにアクセスしてデータを入力でき、(おそらく Web サービスを呼び出すことで) アクティビティーを次のステップに進めることができます。

WebSphere Process Server の Human Task コンポーネントに関する資料としては、次のようなものがあります。

質問: RAD (Rational Application Developer) V6.0 でシステム・プロパティーを設定するにはどうするのでしょう。ただし、WebSphere Application Server (以下、Application Server と呼びます) ではシステム・プロパティーを設定したくありません。

回答: あなたが何をしたいのか、よくわかりません。Eclipse ワークベンチを実行中に JVM にシステム・プロパティーを追加したいのでしょうか。そうであれば、RAD を起動する際に、-vmargs を使ってコマンド・パラメーターを入力することができます。詳しくは The Eclipse runtime options を参照してください。

それとも、テスト対象の J2SE アプリケーションにシステム・プロパティーを設定したいのでしょうか。他にどのような JVM (例えばクライアント・アプリケーション) を起動するにしても、IBM ランチャー (Run で呼び出されます) ではさまざまなタイプの Java アプリケーションを設定でき、また通常は Environment タブがあります。

それとも、WebSphere Application Server V6 Test Server にシステム・プロパティーを設定したいのでしょうか。それならば、WebSphere の admin コンソールから行う必要があります。これは、RAD の Application Server V6 のテスト環境が完全な WebSphere Application Server であるためです。

質問: AJAX ベースのリクエスト (サーブレットからの、XML データに対するリクエスト) のセキュリティーを管理するための、適切な方法について助言してください。アプリケーションはポートレットとして開発されています。(これは今後、Portlet 2.0 仕様とリソース・リクエストが利用できるようになった時に対応されます。)

回答: まず、J2EE のセキュリティー・ロールを使ってサーブレットをセキュアにする必要があります。こうすることによって、認証されたブラウザーしか入り込めなくなります。AJAX にとって、セキュリティーはどれも難しい問題です。AJAX は新しくもあり、古いものでもあります。Web を扱う他のアプリケーションの場合と同じく、「古い」問題への対応が必要です。WebSphere のセキュリティーを高めるための参考となる記事として、下記を参照してください。

AJAX は「古い」概念に基づいていますが、古いだけではなく、新しく強力な、そして複雑な技術であることを認識する必要があります。そのため実際に使う場合には、古い概念に基づていても、新たな脆弱性が見つかる可能性もあります。つまり、AJAX を使うことによって質的な変化が起きることがあります。例えば、ブラウザーから XML リクエストが送られることが多くなるため、XML による脅威のリスクが高まります。このためのソリューションとしては、XML の脅威への対応に特化した、DataPower などの SOA アプライアンスがあります。これに関する詳しい情報は、「Comment lines: Bill Hines: The (XML) threat is out there」を参照してください。

さらに、レスポンス・ハンドラーの中に挿入された悪意の JavaScript によって、クライアントが脅威にさらされます。使用するブラウザーが、信頼できるサーバー・サイトの JavaScript しか実行しないように確認する必要があります。例えば、Mozilla® は署名されたスクリプトの実行しか許しません。

Web 2.0 サイトを検討する場合には、次のすべてについて考慮する必要があります。

  • JavaScript を使用すれば、非常に多種類のハッキングが可能です (そして実際にハッキングが行われてきました)。
  • 状態をクライアントに保持すると、リスクが高まります。その状態は保護されているでしょうか。
  • コードがクライアント上にあると、リスクが高まります。システムの動作を判断されてしまわないでしょうか。ブラウザーの中にビジネス・ロジックを入れすぎると、深刻なリスクとなる恐れがあり、ビジネス手順を公開してしまうことになりかねません。
  • ブラウザーが悪意のコードを実行するように、簡単に細工できてしまわないでしょうか。
  • ブラウザーの中の JavaScript によって、社内ネットワークから会社をハッキングすることさえ可能です。
  • サーバーサイドでは、他にも次のような懸念事項があります。
    • 数多くの、粒度の細かなサービスをインターネットで公開すると、攻撃面を増やすことになります。
    • サーバーへの SQL や XML 注入

AJAX と Web 2.0 のセキュリティーに関しては、未知の要素が多数あります。すべての脅威の可能性を発見できるまでには、時間の経過と、技術の成熟が必要だと思います。詳しいことについては、AJAX and security を参照してください。

質問: AJAX は Model 2 プログラミング・モデルを破り、非プレゼンテーション・ロジックを Web ページに含めるという、古き悪き時代に私達を引き戻すことになりませんか。AJAX は単に、本物のデスクトップ GUI アプリケーションの機能を試して真似るだけの、その場しのぎの解決策ではありませんか。

回答: 答えは、「状況によって異なります」。1 歩戻って、Model 2 を見てみましょう。Model 2 は MVC パターンを J2EE プログラミングで実装したものです。下記の図 1 は Model 2 を説明したものです。

図 1. Model 2
Model 2

J2EE の Model 2 アーキテクチャーでは、サーブレットは UI コントローラーであり、入力データを取得し、何らかのバックエンド・ビジネス・ロジックをコールし、そしてどの JSP に入力データを転送すべきかを決定することに責任を持ちます。JSP はページを描画します。しかし、アプリケーション・コントローラー (セッション・ファサード・レイヤー内部で実装されることがあります) という概念もあり、このコントローラーが下位レベル・タスクをコントロールして呼び出しを行い、そして何らかのタイプのレスポンスを構築します。

同様に、Web サービスとして公開されるアプリケーション・コントローラー (あるいはファサード) を考えてみてください。通常、Web サービスのフレームワークには何らかのフロント・サーブレットが含まれ、このサーブレットが、SOAP 入力を受け付け、その入力をバックエンド・サービスにマーシャリングし、そのレスポンスを受け取り、そして HTML マークアップの代わりに XML マークアップを生成することに責任を持ちます。

AJAX を利用することによって、サービスを直接ブラウザーから呼び出すことができます。こうしたサービスを、もし Struts のような model-view-controller フレームワークから呼び出してしまうと、図 2 に示すような MVC Bloat に陥ります。

図 2. MVC Bloat
MVC Bloat

しかし Web 2.0 のモデルでは、コントローラー・ロジックと描画ロジックの一部は、クライアントに移ります (図 3)。

図 3. Web 2.0 のモデル
Web 2.0 のモデル

この場合、Struts や JSF のような Model View フレームワークは、(従来の Model 2 アーキテクチャーを使って) ページを最初に描画します。しかしそこから先では、UI コントローラーのロジックの一部はクライアントに移されます。

ビジネス・ロジックとセキュアなデータは、サーバー上で維持管理すべきだということを忘れないでください。AJAX によって、はるかにスケーラブルでステートレスな中間階層が可能になります。しかし私は、セキュリティーに関する懸念事項がいくつか解消されるまで、しばらくの間は混在状態が続くと思っています (この前の、セキュリティーに関する質問を参照してください)。セキュリティーに対して最適化された、Data Power などの SOA Appliance によって、そうしたビジョンへの動きが早まることでしょう。

質問: 私は 4 ステップのインストール・プロセスで WebSphere Process Server をインストールしようとしています。IBM WebSphere Integration Developer は問題なくインストールできましたが、3 番目のステップ (installation of WebSphere Application Server Network Deployment and WebSphere Process Server) になると即座に、下記のログのようなエラー・メッセージが出てしまいます。私は WAS_SRC=%~1 と WID_TARGET_DIR=%~2 の値を取得できるように、手動で wps_install.bat ファイルを更新しようとしましたが、その努力は失敗しました。ランチパッドは 3 番目のインストール・ステップを呼び出すことができず、ログ・ファイルには次のようなエラーが出ています。

(Sep 16, 2006 9:06:11 AM), Install, com.ibm.wstools.CustomExec, err, Error when 
getting Resource Path: java.io.IOException: File does not exist: c:\software\
wpsinstall\disk5\external\WBI\extref.tmp

(Sep 16, 2006 9:06:11 AM), Install, com.ibm.wstools.CustomExec, err, Error when
changing permission of files: ServiceException: (error code = 399; message = 
"/wps_install.bat does not exist"; severity = 0)

(Sep 16, 2006 9:06:11 AM), Install, com.ibm.wstools.CustomExec, err, IO Error 
when Execute commands: java.io.IOException: CreateProcess: /wps_install.bat  
C:\WID\WebSphere error=2

回答: こうした問題の場合は、PMR を開き、IBM のサポートに助けを求めます。Troubleshooting installations and updates to WebSphere Integration Developer を調べてみてください。一般的に、これと同じような問題が見られるのは、ディスク・スペースが足りない場合、マシンに対する適切なパーミッションを持っていない場合、あるいはネットワーク・インストール・ディレクトリーからインストールを実行したような場合です。一般的には、WebSphere Integration Developer のインストールが終了すれば wps_install.bat を単独で実行することができます。

質問: JMS の pointtopoint キュー・メッセージングを行っていますが、次のようなエラーが出てしまいます。

javax.naming.NameNotFoundException: Context: blrkec32515d/nodes
/blrkec32515d/servers/server1, name: jms/QCF: First component in name 
QCF not found.  Root exception is
org.omg.CosNaming.NamingContextPackage.NotFound: IDL:omg.org
/CosNaming/NamingContext/NotFound:1.0
 at org.omg.CosNaming.NamingContextPackage.NotFoundHelper.read
 (NotFoundHelper.java:84)
 at com.ibm.WsnOptimizedNaming._NamingContextStub.resolve_complete_info
 (Unknown Source)
 at com.ibm.ws.naming.jndicos.CNContextImpl.cosResolve
 (CNContextImpl.java:3491)
 at com.ibm.ws.naming.jndicos.CNContextImpl.doLookup
 (CNContextImpl.java:1519)
 at com.ibm.ws.naming.jndicos.CNContextImpl.doLookup
 (CNContextImpl.java:1480)
 at com.ibm.ws.naming.jndicos.CNContextImpl.lookupExt
 (CNContextImpl.java:1187)
 at com.ibm.ws.naming.jndicos.CNContextImpl.lookup
 (CNContextImpl.java:1067)
 at com.ibm.ws.naming.util.WsnInitCtx.lookup(WsnInitCtx.java:132)
 at javax.naming.InitialContext.lookup(InitialContext.java:360)
 at PointToPoint.<init>(PointToPoint.java:41)
 at PointToPoint.main(PointToPoint.java:109)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke
 (NativeMethodAccessorImpl.java:79)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke
 (DelegatingMethodAccessorImpl.java:41)
 at java.lang.reflect.Method.invoke(Method.java:386)
 at com.ibm.websphere.client.applicationclient.launchClient.createContainer
 AndLaunchApp(launchClient.java:627)
at com.ibm.websphere.client.applicationclient.launchClient.main(launchClient.
java:422)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
 java:79)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor
 Impl.java:41)
 at java.lang.reflect.Method.invoke(Method.java:386)
 at com.ibm.ws.bootstrap.WSLauncher.main(WSLauncher.java:105)

回答: WebSphere Application Server は、組み込みの Service Integration Busや WebSphere MQ を含めて、数多くの JMS プロバイダーをサポートしています。質問からは、どの JMS を使っているのか明確にわかりません。WebSphere での JMS の構成方法については、下記の記事を参照してください。

リソース参照を使っている場合には、JNDI ルックアップを java:comp/env で事前修飾することを忘れないでください。

質問: 以下は、WebSphere Integration Developer v6.0.1 で自動生成された .wsdl ファイルのエラーを示したものです。

  1. cvc-attribute.3: The Value "of attribute 'name' on element 'definitions' is not valid with respect to its ,'NcName' (要素「definitions」に対する属性「name」の値が、その「NcName」に対して有効ではありません)。
  2. cvc-datatype-valid.1.2.1: "is Not a valid value for 'NcName' (「NcName」に対する有効な値ではありません)。

以下は .wsdl ファイルの内容です。

<?xml version="1.0" encoding="UTF-8"?>

<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:ns="http://QuoteBusinessIntegration/com/satyam/aupl/components/
humantask/AcceptQuoteHT" xmlns:ns0="http://QuoteBusinessIntegration/com/
satyam/aupl/comonent/interfaces/
BusinessRules" xmlns:plnk="http://schemas.xmlsoap.org/ws/2004/03/partner-link/"
xmlns:tns="http://www.QuoteBusinessIntegration.process/AutoQuoteCGBS67378
/AutoQuoteCGBSArtifacts"
xmlns:wsdl0="http://QuoteBusinessIntegration/com/satyam/aupl/component
/interfaces/CreditScoreBridge"
xmlns:wsdl1="http://QuoteBusinessIntegration/com/satyam/aupl/component
/interfaces/QuoteBridge"
xmlns:wsdl2="http://QuoteBusinessIntegration/com/satyam/aupl/component
/interfaces/InsuredInfoBridge"
xmlns:wsdl3="http://QuoteBusinessIntegration/com/satyam/aupl/process
/AutoQuoteCGBSInterface" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
name="" targetNamespace="http://www.QuoteBusinessIntegration.process
/AutoQuoteCGBS67378/
AutoQuoteCGBSArtifacts">

  <plnk:partnerLinkType name="CreditScoreBridgePLT">

    <plnk:role name="CreditScoreBridgeRole">

      <plnk:portType name="wsdl0:CreditScoreBridge"/>

    </plnk:role>

  </plnk:partnerLinkType>

回答: definitions 節には属性 name="" を含めることができますが、この属性は、なくしてしまうか (私はこちらを好みます)、あるいは値を持つ必要があります。


謝辞

この記事を準備するにあたって協力くださった、Joseph Sharpe、Keys Botzum、Robert Peterson、Tom Kristek、そして Russell Butek の各氏に感謝いたします。


参考文献

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=WebSphere, Open source, SOA and web services
ArticleID=277995
ArticleTitle=エキスパートに聞く: Roland Barcia が AJAX と WebSphere について答える
publish-date=10252006