連携ソースの使用可能化

連携ソースを使用可能にするには、次の手順を実行します。

  1. 「プロジェクト・エクスプローラー」ビューで、ポートレットまたは「ポートレット・デプロイメント記述子」を 選択する。ポートレット・プロジェクト・フォルダーの下の「ポートレット・デプロイメント記述子」ノードを展開すると、ポートレットが表示されます。
  2. 目的のポートレットを右クリックし、ポップアップ・メニューから「連携」 > 「ソースを使用可能にする」を選択する。 「連携ソースを使用可能にする」ダイアログが開きます。 もう 1 つの方法として、JSP ページを開き、メニューから「ページ」 > 「連携」 > 「ソースを使用可能にする」と選択します。
  3. 次のフィールドに値を入力する。
    データ型
    ソース・ポートレットによって転送されるデータのデータ型名を指定します。 または、公開したいデータ型がすでに宣言済みの場合は、「ブラウズ」ボタンをクリックして「データ型の選択」ダイアログを開き、 公開したい WSDL データ型を選択します。 WSDL ファイル内のデータ型と名前空間が、各フィールドに示されます。指定した値が、WSDL ファイルの <types> エレメントでデータ型を宣言するために使用されます。
    名前空間
    この型の名前空間を指定します。たとえば http://www.yourco.com/c2a です。 指定した値は WSDL ファイルに保管され、 出力プロパティーを指定するために名前空間として使用されます。
    バインド先 (Bound to)
    パラメーター値がどこにバインドされるかを指定します。 現在、この属性は、次の値の 1 つだけを指定できます。
    • 要求パラメーター: これは、値が PortletRequest オブジェクト内のパラメーターとしてバインドされることを指定します。 これは、boundTo 属性が省略される場合のデフォルト値です。 出力パラメーターの場合、通常、デフォルトとして別の値が指定されなければならないことに注意してください。WebSphere® Portal による PortletRequest 実装では、アクションの処理中にパラメーターを設定できません。
    • 要求属性: これは、値が PortletRequest オブジェクト内の属性としてバインドされることを指定します。
    • セッション: これは、値が PortletSession オブジェクトにバインドされることを指定します。

    また、ソース・ポートレットを使用可能にする場合、付属の Click-to-Action インターフェースを使用せずに、この属性を使用することもできます。

    次の例は、サンプル素材集からの「連携ポートレット」アプリケーション・サンプル内の OrderDetailPortlet.java の actionPerformed() メソッドを示します。 このポートレットは、actionPerformed() メソッド内のプロパティー・ブローカーに TRACKING_ID パラメーターを渡します。 このパラメーターは、ポートレットの WSDL ファイル (この例では OrderDetail.wsdl) のバインディング・セクション内の出力パラメーターに対応します。

    OrderDetailPortlet.java
    OrderDetailPortlet.java
    
    
    ...
    	private static final String PREFIX = ""; //$NON-NLS-1$
    	public static final String ACTION_NAME = PREFIX + "actionName"; //$NON-NLS-1$
    	public static final String ORDER_DETAILS = PREFIX + "orderDetails"; //$NON-NLS-1$
    	public static final String ORDER_ID_ENTRY = PREFIX + "orderIdEntry"; //$NON-NLS-1$
    	public static final String ORDER_ID = PREFIX + "orderId"; //$NON-NLS-1$
    	public static final String ORDER_DETAIL_BEAN = PREFIX + "orderDetailBean"; //$NON-NLS-1$
    	public static final String ORDER_DETAIL = PREFIX + "orderDetail"; //$NON-NLS-1$
    	public static final String TRACKING_ID = PREFIX + "trackingId"; //$NON-NLS-1$
    ...
    	public void actionPerformed(ActionEvent event) {
    		String actionName = event.getActionString();		PortletRequest request = event.getRequest();		//An action causes the state to be modified
    		ShippingUtils.setLastModified(request);		if (getPortletLog().isDebugEnabled()) {
    			getPortletLog().debug(Messages.getString("OrderDetailPortlet_action_entry")); //$NON-NLS-1$
    		}		if (actionName.equals(ORDER_DETAILS)) {
    			request.getPortletSession().setAttribute(
    				ACTION_NAME,
    				ORDER_DETAILS);
    			request.getPortletSession().setAttribute(
    				ORDER_ID,
    				request.getParameter(ORDER_ID));			/*
    			 *  We do this as tracking id is an out param in the C2A WSDL file
    			 *  We write the tracking id in the request so it can be published by
    			 *  the broker in the same event cycle
    			 */
           OrderDetail od = ShippingDB.getOrderDetail(request.getParameter(ORDER_ID));
                request.getPortletSession().setAttribute(ORDER_DETAIL, od);
           request.setAttribute(TRACKING_ID, od.getTrackingId());
    			
            }  else if (actionName.equals(ORDER_ID_ENTRY)) {
    			request.getPortletSession().setAttribute(
    				ACTION_NAME, ORDER_ID_ENTRY);
    		}
    	}
    ...
    OrderDetail.wsdl (プロパティー・ブローカーは、要求属性からトラッキング ID パラメーターを受信します。)
    ...
    <binding 
        name="OrderDetailBinding" 
        type="tns:OrderDetail_Service">
      <portlet:binding></portlet:binding>
      <operation name="order_Detail">
        <portlet:action name="orderDetails" type="simple" caption="Order.Details" description="Get.details.for.specified.order.id"/>
        <input>
          <portlet:param name="orderId" partname="order_Id" caption="order.id"/>
        </input>
        <output>
          <portlet:param name="trackingId" partname="tracking_Id" boundTo="request-attribute" caption="tracking.id"/> 
        </output>
      </operation>
    </binding>
    
    ...
    ソース・ポートレット (必須)
    連携ソースとして使用可能にするコンクリート・ポートレットを指定します。

    たとえば、次の値を指定できます。 「連携ソースを使用可能にする」ダイアログ

  4. 「OK」をクリックする。「プロジェクト・エクスプローラー」ビューに、連携可能ポートレットが、ソース・ポートレット・アイコン (連携ソース・ポートレット・アイコン) と一緒に表示されます。

「連携ソースを使用可能にする」アクションは、次のタスクを実行します。

  1. プロパティー・ブローカー・クラスを参照するサーブレット・クラス・エントリーを追加するために、web.xml を変更します。
    <servlet-class>com.ibm.wps.pb.wrapper.PortletWrapper</servlet-class>
    <init-param>
          <param-name>c2a-application-portlet-class</param-name>
       <param-value>servlet-class</param-value>
    </init-param>
  2. WSDL ファイルからプロパティー・ブローカーにアクションを公開する各コンクリート・ポートレットに構成パラメーターを追加し、 各国語リソース・ファイルのベース名を指定するように、portlet.xml を変更します。
    <config-param>
        	<param-name>c2a-action-descriptor</param-name>
        <param-value>WSDL file</param-value>
    </config-param>
    <config-param>
        	<param-name>c2a-nls-file</param-name>
        <param-value>resource bundle name</param-value>
    </config-param>
  3. プロパティー・ブローカーが使用するために、追加ライブラリー pbportlet.jar をポートレット・プロジェクト内の /WEB-INF/lib にインポートします。
  4. 次のセクションを使用して、指定した WSDL ファイルを作成します。
    <definitions>
    ルートとして振る舞います。
    <types>
    データ型は、XML スキーマ・データ型 (XSD) を使用して宣言されます。
    <message>
    出力メッセージ。
    <portType>
    操作の要約コレクションを定義します。<output>。
    <binding>
    セクションをポートレット・アクション呼び出しのための連携バインディング拡張として識別するために、常に <portlet:binding> に拡張されます。
関連概念
連携ポートレットの開発
関連タスク
既存のポートレットを連携可能にする
Faces アクションを使用した連携ソースの使用可能化
連携ターゲットの使用可能化
Click-to-Action encodeProperty の挿入
Click-to-Action encodeProperties の挿入
Click-to-Action encodeProperty の編集
Click-to-Action encodeProperties の編集
関連情報
Web サービス記述言語 (WSDL) 1.1
WebSphere Portal Information Center
XML スキーマ・パート 2: データ型

(C) Copyright IBM Corporation 2002, 2004. All Rights Reserved. (C) Copyright IBM Japan 2005