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 アプリケーションのデバッグを補助する開発環境が必要ですか
以下のようなフレームワークが候補としてあげられます。この中のいくつかはオープンソースのフレームワークであり、それらをサポートするコミュニティーのサポートを得る必要があることに注意してください。
- JavaScript 抽象化のためのブラウザー・ツールキットとウィジェット・ライブラリー:
- Dojo Toolkit
- IBM JavaServer Faces Client
- Google® Web Toolkit (Java™ 言語で AJAX アプリケーションを構築します)
- デバッグ・フレームワーク:
- サーバーサイド Java フレームワーク:
また、この前の質問でも取り上げたとおり、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 を使ったアクティビティーがあるかどうかを調べることができます。これは次のようなステップで行います。
- ビジネス・プロセスが Human Task コンポーネントを呼び出してアクティビティーを作成します。
- Web ページが Human Task API を使ってキュー上のアクティビティーにアクセスします。もちろん、何らかの非同期 AJAX リクエストをバックグラウンドで使って時々チェックを行い、ほとんどリアルタイムの通知に見えるようにすることも可能です。
- そうすると、ユーザーはアクティビティーにアクセスしてデータを入力でき、(おそらく Web サービスを呼び出すことで) アクティビティーを次のステップに進めることができます。
WebSphere Process Server の Human Task コンポーネントに関する資料としては、次のようなものがあります。
- SOA programming model for implementing Web services, Part 8: Human-based Web services
- Implementing two-way interactions between a business state machine and a human task using WebSphere Process Server
- Developing business processes that use IBM WebSphere Portal and WebSphere Process Server
質問: 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 のセキュリティーを高めるための参考となる記事として、下記を参照してください。
- WebSphere Application Server V6 advanced security hardening - Part 1: Overview and approach to security hardening
- WebSphere Application Server V6 advanced security hardening - Part 2: Advanced security considerations
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
J2EE の Model 2 アーキテクチャーでは、サーブレットは UI コントローラーであり、入力データを取得し、何らかのバックエンド・ビジネス・ロジックをコールし、そしてどの JSP に入力データを転送すべきかを決定することに責任を持ちます。JSP はページを描画します。しかし、アプリケーション・コントローラー (セッション・ファサード・レイヤー内部で実装されることがあります) という概念もあり、このコントローラーが下位レベル・タスクをコントロールして呼び出しを行い、そして何らかのタイプのレスポンスを構築します。
同様に、Web サービスとして公開されるアプリケーション・コントローラー (あるいはファサード) を考えてみてください。通常、Web サービスのフレームワークには何らかのフロント・サーブレットが含まれ、このサーブレットが、SOAP 入力を受け付け、その入力をバックエンド・サービスにマーシャリングし、そのレスポンスを受け取り、そして HTML マークアップの代わりに XML マークアップを生成することに責任を持ちます。
AJAX を利用することによって、サービスを直接ブラウザーから呼び出すことができます。こうしたサービスを、もし Struts のような model-view-controller フレームワークから呼び出してしまうと、図 2 に示すような MVC Bloat に陥ります。
図 2. MVC Bloat
しかし Web 2.0 のモデルでは、コントローラー・ロジックと描画ロジックの一部は、クライアントに移ります (図 3)。
図 3. 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 の構成方法については、下記の記事を参照してください。
- バージョン 6 で Service Integration Bus が JMS プロバイダーの場合
- バージョン 6 で WebSphere MQ が JMS プロバイダーの場合
- バージョン 5 の場合
リソース参照を使っている場合には、JNDI ルックアップを java:comp/env で事前修飾することを忘れないでください。
質問: 以下は、WebSphere Integration Developer v6.0.1 で自動生成された .wsdl ファイルのエラーを示したものです。
- cvc-attribute.3: The Value "of attribute 'name' on element 'definitions' is not valid with respect to its ,'NcName' (要素「definitions」に対する属性「name」の値が、その「NcName」に対して有効ではありません)。
- 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 の各氏に感謝いたします。
-
AJAX resource center
-
Build enterprise SOA AJAX clients with the Dojo toolkit and JSON-RPC
-
DWR が Ajax によるポートレット間メッセージングを簡単にする
-
Tutorial: Building AJAX portlets for WebSphere Portal
-
Using AJAX with WebSphere Portal
-
Tutorial: Using AJAX with WebSphere Commerce

Roland Barcia は IBM Software Services for WebSphere の Consulting IT Specialist です。彼は IBM WebSphere: Deployment and Advanced Configuration の共著者の 1 人です。彼について詳しくは、彼の ブログ を見てください。