10.1.2 Struts ADFアプリケーションの10.1.3への自動移行について

10.1.2ワークスペースまたは10.1.2プロジェクトをJDeveloper 10.1.3で開くと、struts-config.xmlおよびstruts-config.xmlに関連付けられているダイアグラムが10.1.3に移行します。当初のStruts構成ファイル(struts-config.xml)は、ファイルの移行前にstruts-config.xml_1012という名前で同じディレクトリに保存されます。Oracle ADFの機能を使用しないStrutsアプリケーションでは、struts-config.xmlを移行する必要はありません。関連するダイアグラム・ファイルstruts-config.oxd_strutsは自動的に移行されます。

ADFアプリケーションのstruts-config.xmlは、10.1.2で使用したカスタム・コードを示す追加情報を使用して、一部(具体的にはDataActionおよびDataPageアクション要素)をstruts-config.xml 10.1.3書式に変換することで、10.1.2から10.1.3に移行されます。10.1.3ランタイムは、アプリケーションによる10.1.2実装の使用を検出し、10.1.2で使用したライフサイクルと同じライフサイクルを使用して処理します。

10.1.3 ADFのライフサイクルを利用する場合は、アプリケーションを更新してください。詳細は、「10.1.2からADFページ・ライフサイクルへの変換」を参照してください。

このトピックでは、次の項目について説明します。

変更される(または変更されない)機能の概要

Struts構成ファイルの次の要素は、ADFによる修正がなかったため変更されません。

ADFによってカスタマイズされたStruts構成ファイルの要素については、アクション要素とデータ・フォームBeanのみが移行されます。

ADF Strutsアプリケーションの移行時に発生する変更の詳細

次の各項では、10.1.2 Strutsアプリケーションの特定要素を10.1.3に移行する方法の詳細を説明します。

単純なDataActionおよびDataPage

カスタム・クラスが指定されていない単純なDataActionは完全に移行されます。10.1.3での追加変更は不要です。

たとえば、次のような10.1.2の典型的なDataPageの<action>定義があるとします。

<action path="/home" 
        className="oracle.adf.controller.struts.actions.DataActionMapping"
        type="oracle.adf.controller.struts.actions.DataForwardAction"
        name="DataForm" parameter="/index.jsp" unknown="true">
  ...
</action>    

これは、次のように移行されます。

<action path="/home" 
        className="oracle.adf.controller.v2.struts.actions.DataActionMapping"    
        type="oracle.adf.controller.v2.struts.actions.DataForwardAction"
        name="DataForm" parameter="/index.jsp" unknown="true">
   ...
</action>    

同様に、次のような10.1.2の典型的なDataActionの<action>定義があるとします。

<action path="/home" 
        className="oracle.adf.controller.struts.actions.DataActionMapping"
        type="oracle.adf.controller.struts.actions.DataAction"
        name="DataForm" unknown="true">
  ...
</action>    

これは、次のように移行されます。

<action path="/home" 
        className="oracle.adf.controller.v2.struts.actions.DataActionMapping"    
        type="oracle.adf.controller.v2.struts.actions.DataAction"
        name="DataForm" unknown="true">
  ...
</action>    

ユーザー定義クラスがあるDataPage

次のような、カスタムDataPageクラスに基づく10.1.2の典型的な<action>定義があるとします。

<action path="/departments" 
        className="oracle.adf.controller.struts.actions.DataActionMapping"
        type="somecompany.someapp.CustomDataAction" 
        paramter="/todo.jsp" name="DataForm">
</action>    

これは、次のように移行されます。

<action path="/departments" 
        className="oracle.adf.controller.v2.struts.actions.DataActionMapping"
        type="oracle.adf.controller.v2.struts.actions.DataForwardAction"
        name="DataForm" paramter="/todo.jsp" unknown="false">    
  <set-property property="v1ActionClass" value="somecompany.someapp.CustomDataAction"/>
</action>    

ADF10.1.3(v2)ランタイムは、10.1.2(v1)ライフサイクルを使用してこのDataPageを実行します。

type属性に指定したクラスがStrutsアクション・クラスから直接導出されているアクション、およびclassName属性にADFクラス名(oracle.adf.controller.struts.actions.DataActionMapping)を使用しているアクションは、移行されません。

ユーザー定義クラスがあるDataAction

次のような、カスタムDataPageクラスに基づく10.1.2の典型的な<action>定義があるとします。

<action path="/departments" 
        className="oracle.adf.controller.struts.actions.DataActionMapping"
        type="somecompany.someapp.CustomDataAction" 
        name="DataForm">
</action>    

これは、次のように移行されます。

<action path="/departments" 
        className="oracle.adf.controller.v2.struts.actions.DataActionMapping"
        type="oracle.adf.controller.v2.struts.actions.DataAction"
        name="DataForm" unknown="false">
  <set-property property="v1ActionClass" value="somecompany.someapp.CustomDataAction"/>
</action>    

ADF10.1.3(v2)ランタイムは、10.1.2(v1)ライフサイクルを使用してこのDataActionを実行します。

type属性に指定したクラスがStrutsアクション・クラスから直接導出されているアクション、およびclassName属性にADFクラス名(oracle.adf.controller.struts.actions.DataActionMapping)を使用しているアクションは、移行されません。

DataPageにドロップされたカスタム・メソッド

ADF 10.1.2(v1)のStruts構成ファイル(struts-config.xml)に、次のようなメタデータがあるとします。

<action path="/department" 
        className="oracle.adf.controller.struts.actions.DataActionMapping"    
        type="oracle.adf.controller.struts.actions.DataForwardAction"    
        name="DataForm" 
        parameter="/department.jsp" 
        unknown="false"> 
  <set-property property="methodName" value="departmentUIModel.setCurrentRowWithKeyValue1"/>    
  <set-property property="resultLocation" value="${requestScope.methodResult}"/>    
  <set-property property="numParams" value="1"/>    
  <set-property property="paramNames[0]" value="${param.department}"/>
</action>      

これは、次のように移行されます。

<action path="/department" 
        className="oracle.adf.controller.v2.struts.actions.DataActionMapping"    
        type="oracle.adf.controller.v2.struts.actions.DataForwardAction"    
        name="DataForm" 
        parameter="/department.jsp"
        unknown="false">
</action>     

さらに、ページ(pageNamePageDef.xml)のページ定義ファイルには、アクションに対して次のエントリが追加されます。

<pageDefinition id=departmentUIModel> 
  <parameters>
    <parameter id="setCurrentRowWithKeyValue1_param1" value="${param.department}"/>
  </parameters>
  <executables>
  ...    
    <invokeAction id="setCurrentRowWithKeyValue1Ref" Binds="setCurrentRowWithKeyValue1"
                    Refresh="prepareModel" RefreshCondition="${requestScope['/department'].execute}"/>
  ...
  </executables>  
  <bindings>  
  ...    
    <action id="setCurrentRowWithKeyValue1" IterBinding="DeptView1Iterator"
            InstanceName="AppModuleDataControl.departmentUIModel"
            DataControl="AppModuleDataControl" RequiresUpdateModel="false"
            Action="98">
      <NamedData NDName="rowKey"
                 NDValue="${bindings.setCurrentRowWithKeyValue1_param1}" NDType="java.lang.String"/>
    </action>
  </bindings>  
</pageDefinition> 
    

RefreshCondition="${requestScope['/department'].executeは、下位互換性を維持する場合にのみ必要です。ユーザー独自のアプリケーションには使用しないでください。

DataActionにドロップされたカスタム・メソッド

ADF 10.1.2(v1)のStruts構成ファイル(struts-config.xml)に、次のようなメタデータがあるとします。

<action path="/executeQuery" 
        className="oracle.adf.controller.struts.actions.DataActionMapping" 
        type="oracle.adf.controller.struts.actions.DataAction" 
        name="myFormBean">
  <set-property property="modelReference" value="executeQueryUIModel"/>
  <set-property property="methodName" value="executeQueryUIModel.setBindVars"/>
  <set-property property="resultLocation" value="${requestScope.methodResult}"/>
  <set-property property="numParams" value="2"/>
  <set-property property="paramNames[0]" value="${param.salary}"/>
  <set-property property="paramNames[1]" value="${param.deptno}"/>
  <forward name="success" path="/searchResult.do"/>
</action>    

この場合、struts-config.xmlのStrutsアクション(/executeQuery)は、次のように移行されます。

<action path="/executeQuery"
        className="oracle.adf.controller.v2.struts.actions.DataActionMapping"
        type="oracle.adf.controller.v2.struts.actions.DataAction" name="myFormBean">
  <forward name="success" path="/searchResult.do"/>
</action>    

10.1.3のページ定義ファイルのexecuteQueryUIModelは、次のように移行されます。

<pageDefinition xmlns="http://xmlns.oracle.com/adfm/uimodel"
                id="executeQueryUIModel" Package="view" FindMode="false"
                EnableTokenValidation="true">
   <parameters>
      <parameter id="setBindVars_param_0" value="${param.salary}"/>
      <parameter id="setBindVars_param_1" value="${param.deptno}"/>
   </parameters>
   <executables>
      <invokeAction id="setBindVarsRef" Binds="setBindVars"
                    Refresh="prepareModel"/>
   </executables>
   <bindings>
      <methodAction id="setBindVars" IterBinding="" RequiresUpdateModel="false"
                    DataControl="AppModuleDataControl"
                    InstanceName="AppModuleDataControl.dataProvider"
                    MethodName="setBindVars"
                    ReturnName="AppModuleDataControl.methodResults.AppModuleDataControl_dataProvider_setBindVars_result">
         <NamedData NDName="Arg0" NDType="java.lang.Double" NDValue="${bindings.setBindVars_param_0}"/>
         <NamedData NDName="Arg1" NDType="java.lang.Integer" NDValue="${bindings.setBindVars_param_1}"/>
      </methodAction>
   </bindings>
</pageDefinition>    

DataFormフォームBean

10.1.2(v1)の設計時に作成されたDataFormフォームBean(ADF固有の暗黙的なBean)は、次のようにしてv1クラスを参照します。

<form-bean name="DataForm" 
           type="oracle.adf.controller.struts.forms.BindingContainerActionForm"/>    

10.1.3への移行では、次のようにv2固有の実装クラスに移行されます。

<form-bean name="DataForm" 
           type="oracle.adf.controller.struts.v2.forms.BindingContainerActionForm"/>    

検証フォームBean

10.1.2 ADF(v1)では、検証フォームは次のように定義されます。

<form-bean name="editEmployeesBean"
           type="oracle.adf.controller.struts.forms.BindingContainerValidationForm"        
           className="oracle.adf.controller.struts.forms.BindingContainerValidationFormConfig">         
   <set-property property="modelReference" value="editEmployeesUIModel"/>
</form-bean>
    

10.1.3(v2)では、モデル参照プロパティがdatabinding.cpxファイルに格納されているため、このプロパティは不要です。したがって、classNameプロパティで定義された特別な構成ファイルも必要ありません。定義は、次のように移行されます。

<form-bean name="editEmployeesBean"
           type="oracle.adf.controller.v2.struts.forms.BindingContainerValidationForm" />         
</form-beans>
    

アクションのmodelReferenceプロパティ

10.1.2から10.1.3への移行では、JSPファイルを対応するモデルに関連付けるために、modelReferenceプロパティがStruts構成ファイル(struts-config.xml)からdatabinding.cpxファイルに移されます。

たとえば、10.1.2のStruts構成ファイル(struts-config.xml)に、次のようなアクションがあるとします。

<action path="/department"        
        className="oracle.adf.controller.struts.actions.DataActionMapping"
        type="oracle.adf.controller.struts.actions.DataForwardAction"
        name="DataForm"
        parameter="/department.jsp"
        unknown="false">  
  <set-property property="modelReference" value="departmentUIModel"/>  
</action>    

これは、次のように移行されます。

<action path="/department"
        className="oracle.adf.controller.v2.struts.actions.DataActionMapping"
        type="oracle.adf.controller.v2.struts.actions.DataForwardAction"
        name="DataForm"
        parameter="/department.jsp"
        unknown="false"/>
    

databinding.cpxファイルは、次の内容が含まれるように更新されます。

<pageMap>
   <page path="/department.do" usageId="departmentUIModel"/>
</pageMap>
<pageDefinitionUsages>
   <!-- maps department DataAction to the view.departmentUIModel page definition -->
   <page id="departmentUIModel" path="model.departmentUIModel"/> 
</pageDefinitionUsages>    

カスタムADFライフサイクル・クラス

10.1.2アプリケーションが<plug-in>要素を使用して独自のライフサイクル・クラスを指定する場合も、前述の各項で説明した移行手順が適用されます。

ADF 10.1.3(v2)ランタイムは、カスタム・ライフサイクル・クラスの存在を検出し、内部的に、10.1.2(v1)互換オブジェクトのみをカスタム・ライフサイクル・クラスのメソッドに渡します。

resultLocationスコープの廃止

移行されたADF Strutsアプリケーションでは、resultLocation set-propertyの使用は無視されます。

JDeveloper 10.1.2では、resultLocationプロパティが使用され、${requestScope.methodResult}にデフォルト設定されていました。アプリケーションには、カスタム式言語(EL)の位置が含まれている可能性があります。

10.1.3では、これらのメソッドの実行がADFコントローラ・レイヤーからADFモデル・レイヤーに移動しました。現在、メソッドは、EL式を使用して識別した位置に対する値のプッシュをサポートしていません。

次に例を示します。

<action path="/executeQuery" 
        className="oracle.adf.controller.struts.actions.DataActionMapping"
        type="oracle.adf.controller.struts.actions.DataAction" 
        name="myFormBean">
  <set-property property="modelReference" value="executeQueryUIModel"/>
  <set-property property="methodName" value="executeQueryUIModel.setBindVars"/>
  <set-property property="resultLocation" value="${requestScope.methodResult}"/>
  <set-property property="numParams" value="2"/>
  <set-property property="paramNames[0]" value="${param.salary}"/>
  <set-property property="paramNames[1]" value="${param.deptno}"/>
  <forward name="success" path="/searchResult.do"/>
</action>    

移行時にこの機能が検出された場合は、StrutsアクションのresultLocationプロパティがすでに廃止されていること、およびアプリケーションのJSPで、${requestScope.methodResult}への参照が機能していない可能性があることを説明するエントリがログに書き込まれます。

Stutsページ・フロー・ダイアグラムのページ・リンク

10.1.2から移行した後にStrutsページ・フロー・ダイアグラムを表示すると、ページ・リンクが予想どおりに表示されません。全ページからダイアグラムをリフレッシュすると、ページ・リンクが表示されます。


StrutsアプリケーションおよびJDeveloperについて