|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IBM Rational Application Developer 6.0を使用したIBM Workplace Collaboration Servicesアプリケーションのデバッグ |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Donal Riordan, IT Architect, IBM
レベル:初級 原文の掲載:2006年02月14日 更新日:2006年11月17日更新
開発中のIBM Workplace Collaboration Servicesアプリケーションでバグを見つけられなくても、心配することはありません。この記事で、IBM Rational Application Developer for WebSphere Software v6.0を使用したデバッグの方法を解説します。説明の前に、2つのバグが含まれるサンプル・アプリケーションをインポートし、Workplace Collaboration Servicesサーバー上で実行します。そして、Rational Application Developerを使用して、バグを検出し、修正します。 この記事で用いられるサンプル・アプリケーションは、本格的なWorkplace Collaboration Servicesコンポーネントではありません。これは単位を変換するシンプルなアプリケーションであり、Workplace Collaboration Servicesで実行されるアプリケーションのデバッグ方法を示すのに十分な機能を持っています。Workplace Collaboration Servicesコンポーネントの実際の開発方法については、この記事では触れません。 この記事は、Workplace Collaboration Servicesとそのアプリケーション、Rational Application Developer、およびJavaプログラミングに習熟されている方を対象に書かれています。 セットアップこの記事で扱うサンプル・アプリケーションは、IBM Workplaceソフトウェア開発キット(SDK)で利用できるIBM Workplace Collaboration Servicesアプリケーション用のCollaborative Component Wizardを使用して開発されました。このため、このサンプルを使用するには、Workplace Collaboration ServicesサーバーとRational Application Developerワークスペースの両方を適切にセットアップする必要があります。ワークスペースのセットアップ方法については、developerWorksの記事『Creating collaborative components for IBM Workplace Collaboration Services (US)』を参照してください。 ご使用になっているWorkplace Collaboration Servicesサーバーにコンポーネントをインストールする前に、Workplace SDKランタイム・ファイルがサーバーにインストールおよび設定されていない場合は、これらのファイルをインストールして設定します。インストールと設定の方法については、『Workplace SDK User's Guide (US)』を参照してください。このガイドには、サーバーでのWorkplace SDKランタイム・ファイルのセットアップ方法が記載されています。この操作は一度だけ実行する必要があります。 Workplace Collaboration Servicesで実行されているアプリケーションをデバッグするには、サーバーをデバッグ・モードで実行する必要があります。これをセットアップするには、まず、Workplace Collaboration Servicesサーバーの管理コンソールにログインします。ナビゲーション・ツリーで[サーバー]ノードを展開し、[アプリケーション・サーバー]をクリックします。次に、プロパティーを変更するために、メイン・ペインでWebSphere_Portalサーバーをクリックします(図1 参照)。 図1.管理コンソールでのアプリケーション・サーバーのリスト![]() [Debugging Service]項目が表示されるまでページを下にスクロールし、デバッグ・サービスのプロパティーを設定するために、この項目をクリックします。[デバッグ・サービス]ページで、[起動]オプションを選択してサービスを有効にし、使用したいポートを入力します(図2 参照)。デフォルトのポートを変更する場合は、後で必要となるので、ポート番号を記録しておいてください。 図2.管理コンソールでのアプリケーション・サーバーのデバッグ・サービスのプロパティー![]() 設定が完了したら、[OK]をクリックして変更をマスター構成に保存し、先へ進む前にサーバーを再起動します。 Rational Application Developerで、プロジェクト交換を使用して、この記事で用いるサンプル・アプリケーションをインポートします。これを行うには、[ファイル]-[インポート]-[プロジェクト交換]を選択し、measureconverter.zipファイルを選択します。次に、[すべて選択]をクリックし、サンプルをインポートするために[終了]をクリックします。この手順を正しく実行し、ワークスペースが適切に設定されていると、図3に示すように、[プロジェクト・エクスプローラー]ビューにプロジェクトが表示されます(関連するグループ・ノードを展開することが必要な場合もあります)。ビルド・エラーはないはずです。 図3.プロジェクトがインポートされたプロジェクト・エクスプローラー![]()
アプリケーションの実行インポートしたアプリケーションは、1つのポートレット・プロジェクトと複数の補助J2EEリソースで構成されています。このアプリケーションは、(さまざまな変換の中でも)特にマイルをキロメーターに、摂氏を華氏にそれぞれ変換する単純な単位変換機能を実装します。 アプリケーションを実行するには、最初に、ポートレットが使用するJ2EEリソースをデプロイします。これを行うには、MeasureConverterEARのコンテキスト・メニューから[デプロイ]を選択し、デプロイ用のMeasureConverterEARを準備します。 次に、EARのコンテキスト・メニューから[エクスポート]-[EARファイル]を選択し、エンタープライズ・アーカイブ(EAR)ファイルをサーバーに転送します。このEARファイルを一時的に保存する場所を選択し、[終了]をクリックします。 EARファイルをデプロイするには、サーバーの管理コンソールにログインし、[アプリケーション]を展開し、[Install New Application]をクリックします(図4 参照)。 図4.管理コンソールでのアプリケーションのオプションー![]() [参照]をクリックし、エクスポートしたEARファイルを選択し、[次へ]をクリックします。手順3の[Map modules to application servers]まで、デフォルト値をそのまま受け入れてウィザードを続行します。 このリスト・ボックスで、「server=WebSphere_Portal」が含まれる項目を選択します(図5 参照)。次に、すべてのオプションを選択し、[適用]をクリックします。ウィザードを再開し、すべてのデフォルト値を受け入れます。 図5.管理コンソールでのアプリケーションのインストール用のウィザード![]() アプリケーションをインストールした後は、変更をマスター構成に保存します。次に、[Enterprise Applications]のリストでEARファイルを検索し、これを選択して[開始]ボタンをクリックします。 これで、MeasureConverterEARがサーバーに正しくデプロイされたので、ポートレット・プロジェクトを実行できます。MeasureConverterPortletプロジェクトのコンテキスト・メニューで、[実行]-[サーバーで実行]を選択します。IBM Workplace Collaboration ServicesはWebSphere Portal上で実行されるため、最初の[サーバーの選択]ウィザードでは、ホスト名を入力し、[WebSphere Portal v5.0 Server Attach]サーバー・タイプを選択し、[次へ]をクリックします(図6 参照)。 図6.[サーバーの選択]ウィザードの[新規サーバーの定義]![]() ヒント:プロジェクトを実行するたびにこのダイアログ・ボックスが表示されるのを防ぐには、[プロジェクトのデフォルトとしてサーバーを設定(プロンプトなし)]オプションを選択します。 次のウィザード・パネルで、Workplace Collaboration Servicesサーバーとデバッグ・サービス(先ほど設定したもの)が使用するポートを入力し、[次へ]をクリックします。 ヒント:デバッグ・サービスでデフォルト設定を変更していない場合は、ウィザード・ページのデフォルトの設定に正しいポートが入力されています。 [WebSphere Portal Settings]ウィザード・パネルで、アプリケーションをWorkplace Collaboration Servicesで実行するときのデフォルト値を変更します(図7 参照)。最初に、ご使用になるWorkplace Collaboration Servicesサーバーへの基本URI(Uniform Resource Identifier)を変更します(通常は/lwpです)。同様に、[Default page]と[Personalized homepage]でも、URIを設定します(通常は、順番に/workplaceと/myworkplaceです)。最後に、[Enable WebSphere security]オプションが選択されていることを確認します。 次に、管理者アカウントのユーザーIDとパスワードを[WebSphere Portal Administrator]セクションに入力します。この情報は、[WebSphere Portal login]セクションにコピーされます。管理者以外のユーザーとしてポートレットを実行するときは、使用するユーザーIDとパスワードをここで入力します。設定が正しいことを確認し、[終了]をクリックします。 たとえば、ポータル・ユーザーは次のようにポータルにアクセスします。 図7.[サーバーの選択]ダイアログ・ボックスの[WebSphere Portal Settings]ページ![]() [終了]をクリックすると、Workplace Collaboration Servicesサーバーにポートレットがデプロイされ、ブラウザーが起動されます。PortletPreviewページに移動して、ポートレットを表示します。(Workplace Collaboration Servicesはデバッグ・モードで実行されているため、通常よりかなり動作が遅くなります。) ヒント:[ポータル]タブで作成されたサーバー設定を編集し、[Label Ordinal]フィールドをゼロに設定すると、最初に開くページはPortletPreviewページになります。 これまでの手順がすべて正しく実行された場合は、「This portlet is unavailable. If the problem persists, please contact the portal administrator」というエラー・メッセージが表示されます。図8を参照してください。 図8.MeasureConverterPortletエラー![]()
アプリケーションのデバッグこのポートレットには明らかにエラーがあるため、エラーをデバッグしなければなりません。MeasureConverterPortletプロジェクトからMeasureConverterPortletView.jspファイルを開き、[ソース]タブに切り替え、8行目にブレークポイントを挿入します。 PortletSession pSession = portletRequest.getPortletSession();
問題をデバッグするには、まず、サーバーに接続する必要があります。[サーバー]ビューでサーバーを右クリックし、表示されたメニューで[デバッグ]を選択します。Rational Application DeveloperがリモートのWorkplace Collaboration Servicesサーバーに接続され、[デバッグ]パースペクティブに切り替わります。ブラウザーで、PortletPreviewページに移動します。サーバーがこのページをレンダリングしている間に、設定したブレークポイントに到達し、制御がRational Application DeveloperのJavaデバッガーに渡されます。このデバッガーでは、JavaやJSP(JavaServer Pages)のコードの行に対して通常のステップオーバーやステップインを実行し、変数を調べたり、変更したりすることができます。 [F6]キーを使用してJSPのJavaコードを1行ずつステップオーバーしていくと、ポートレットが利用できなくなった原因が表示されます。
このコードでは、getFormText()メソッドがnullを返しています。これは、formText.length()がNull Pointer例外をスローすることを意味します。この部分のデバッグが終了したら、[サーバー]ビューでサーバーをもう一度右クリックし、[切断]を選択することによって、リモート・サーバーへの接続を終了します。 例外を発生させた問題を修正するために、MeasureConverterPortletSessionBean.javaを開き(このファイルを開くには、J2EEまたはWebパースペクティブへの切り替えが必要な場合があります)、次の行を変更します。
private String formText = null ;
修正後は、次のようになります。
private String formText = "" ;
変更を保存します。ポートレットを右クリックし、[実行]-[サーバーで実行]を選択し、ポートレットを再び実行します。この時点でポートレットは正しく表示されますが、修正しなければならないバグがもう1箇所残っています。入力値として「10km」を入力すると、「不正な入力である」と誤って指摘されます。 [サーバー]ビューで、サーバーのコンテキスト・メニューから[デバッグ]を選択し、もう一度サーバーに接続します。前回のブレークポイントがそのまま設定されている場合は、これによって同じ場所でブレークされます。ブレークポイントが設定されていない場合は、前と同じ方法で設定します。 JSPのJavaコードを再びステップスルーすると、入力値が「10km」として正しく取得されていることがわかります。さらに進めると、MeasureConverterDelegateクラスは6.2マイルに正しく変換していることがわかります。 問題は、次のif-elseブロックにあります。
これを次のように変更する必要があります。
再び、サーバーへの接続を終了し、変更を行って、ポートレットを再実行します。今回はコードが正しく実行され、バグがなくなりました(図9 参照)。 図9.再び、サーバーへの接続を終了し、変更を行って、ポートレットを再実行します。今回はコードが正しく実行され、バグがなくなりました(図9 参照)。![]()
まとめIBM Workplace Collaboration Servicesアプリケーションをデプロイし、IBM Rational Application Developerのデバッグ・ツールを使用してこのアプリケーションをデバッグしました。この記事では、Rational Application Developerのデバッグ機能をごく簡単に紹介したに過ぎません。このデバッグ機能は、WebSphere PortalとWorkplace Collaboration Servicesのどちらにも使用できます。ここではRational Application Developerを使用しましたが、IBM Rational Software Architectをまったく同じ方法で使用することもできます。また、JSPの内部でのみブレークポイントを設定しましたが、ポートレットやEJB(Enterprise Java Beans)のJavaコード内にもブレークポイントを設定できます。
ダウンロード
リソース学ぶ
筆者について(原文のまま)Donal Riordon is an IBM Sofware Engineer working on Portal server tools.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||