Apcoordinator ユーザーズガイド
目次 前ページ次ページ

付録C 旧バージョンとの互換情報(update)

C.2 Webアプリケーション

ujiall.tld以外のタグライブラリディスクリプタを使用したアプリケーションの修正

INTERSTAGE WEBCOORDINATOR が提供していた以下のタグライブラリディスクリプタを使用したアプリケーションの場合、Webアプリケーション環境定義ファイル(web.xml)の修正と、タグライブラリファイルujiall.tldのコピーが必要です。

修正は以下のように行います。

なお、修正のないソースの再コンパイルは必要ありません。

UJIタグの新機能を使用する場合の修正

以前のバージョンのApcoordinatorや、INTERSTAGE WEBCOORDINATORで動作するアプリケーションにおいて、UJIタグの新機能を利用する場合は、タグライブラリファイルujiall.tldを新しいものに置き換える必要があります。 Apcoordinatorのタグライブラリファイルujiall.tldを、WebアプリケーションのWEB-INFフォルダに上書きコピーしてください。 このとき、修正のないソースの再コンパイルは必要ありません。

uji:controlSectionタグを使用している場合の修正

uji:controlSectionタグは推奨されません。 Apcoordinator V5.0L10との互換性のために残されています。 以下の製品が提供するアプリケーションサーバを利用する場合には、旧バージョンのサーブレット実行環境(Tomcat3.1ベースのサーブレット実行環境)でのみ利用することができます。

二重処理を防止するには、uji:formタグのpostOnceアトリビュート、または、HttpControlStateProfileクラスによる二重処理防止機能を使用してください。二重処理防止機能については、高度なセション管理を参照してください。

なお、以下の条件の場合、uji:controlSectionタグを使用した場合と使用しない場合とで、エラーページ表示時の動作に違いがあります。

この場合、エラーページが以下のように表示されます。

なお、JSPは画面表示を行う手段であるため、例外を発生させるような要因は事前にビジネスクラスで検出し、JSP内では例外が発生しないようにJSP、データBean、ビジネスクラスを作成することを推奨します。

uji:switchタグの動作の違い

J2EE仕様への適合向上と性能向上の目的で、UJIタグの評価方法に変更が加えられました。これにより、INTERSTAGE WEBCOORDINATOR と Apcoordinatorとで以下の場合にuji:switchタグの動作に違いがあります。

  1. uji:switchタグにbeanアトリビュートを指定し、かつ、
  2. uji:caseタグのコンテントでUJIタグを使用し、かつ、
  3. 2のUJIタグでbeanアトリビュートを指定している場合。

上記の場合、uji:caseタグのコンテントにあるUJIタグの評価タイミングに違いがあります。 INTERSTAGE WEBCOORDINATORの場合、uji:caseの条件が評価され、条件が成立した場合にuji:caseのコンテントのUJIタグが評価されます。Apcoordinatorの場合、uji:caseのコンテントにUJIタグが出現した時点で評価されます。

この違いにより発生する影響について説明します。以下の例を参照してください。


<uji:switch bean="body" property="fullMode"> 
  <uji:case cls="true"> 
    <uji:comboBox bean="body" property="teamList" /> 
    ...
  </uji:case>
  <uji:case> 
    ...
  </uji:case>
</uji:case>

プロパティfullModeの値がfalseの場合、cls="true"を指定したuji:caseの条件は成立しません。この場合でも、Apcoordinatorの場合はuji:caseのコンテントにあるuji:comboBoxタグが評価されます。ここで、"body"データBeanのtermListプロパティの値がnullの場合、uji:comboBoxが使用する項目クラスが取得できないため例外が発生します。一方、INTERSTAGE WEBCOORDINATORの場合はuji:comboBoxが評価されないため例外は発生しません。

上記条件に該当する場合、アプリケーションを次のどちらかの方法で修正することにより、Apcoordinatorでも動作します。

uji:includeタグ、uji:useBeanタグで参照するデータBeanのスコープの違い

サブウィンドウ機能およびフレーム機能対応のため、uji:includeタグ、uji:useBeanタグで使用するデータBeanのスコープが、INTERSTAGE WEBCOORDINATOR V3.0L20と比べて変更になっています。 uji:includeタグ、uji:useBeanタグの動作をINTERSTAGE WEBCOORDINATOR V3.0L20と同じにするには、初期化パラメタuji.includeSessionScopeBeanにfalseを指定してください。初期化パラメタはWebアプリケーション環境定義ファイルに記述します。以下は記述例です。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
      version="2.4">
  <context-param>
    <param-name>factory</param-name>
    <param-value>sample2.Sample2Factory</param-value>
  </context-param>
  <context-param>
    <param-name>uji.includeSessionScopeBean</param-name>
    <param-value>false</param-value>
  </context-param>
  <jsp-config>
    <taglib>
      <taglib-uri>uji-taglib</taglib-uri>
      <taglib-location>/WEB-INF/ujiall.tld</taglib-location>
    </taglib>
  </jsp-config>
</web-app>

uji.methodリクエストパラメタのデフォルトでの使用可否状態の変更

Apcoordinator V5.0L10、または、INTERSTAGE WEBCOORDINATORで作成したアプリケーションで、isUjiMethodAvailableメソッドをデフォルトのまま使用し、uji.methodリクエストパラメタを使用している場合は、アプリケーションの修正が必要です。 ユーザ定義のアプリケーションクラスを作成し、isUjiMethodAvailableメソッドをオーバライドしてtrueを返却するようにしてください。アプリケーションクラスについては、アプリケーションクラスを参照してください。

HttpServletRequestから取得されるリクエストパラメタの文字エンコーディング変換の有無の違い

送信データの文字エンコーディング変換をApcoordinatorまたはINTERSTAGE WEBCOORDINATORで処理している場合、 Apcoordinator V5.0L10、または、INTERSTAGE WEBCOORDINATORでは、 javax.servlet.http.HttpServletRequestからリクエストパラメタを取得すると、Apcoordinator または INTERSTAGE WEBCOORDINATORによって文字エンコーディングの変換が実施済みの文字列が得られます。

Apcoordinator V5.0L10またはINTERSTAGE WEBCOORDINATORで作成したアプリケーションで以下の処理を行っている場合には、アプリケーションを修正して、com.fujitsu.uji.util.Parametersクラスからリクエストパラメタを取得してください。

Parametersクラスからは、Apcoordinatorによって文字エンコーディングの変換が行われた文字列が取得されます。 以下は、ビジネスクラスのメソッドおいて、Parametersクラスからリクエストパラメタ"userName"の値を取得する例です。

import com.fujitsu.uji.GenericHandler;
import com.fujitsu.uji.DispatchContext;
import com.fujitsu.uji.http.HttpDispatchContext;
import com.fujitsu.uji.util.Parameters;

public class SampleHandler extends GenericHandler {
    public void someMethod(DispatchContext context, BodyBean dataBean) {
        Parameters parameters = ((HttpDispatchContext)context).getParameters();
        String value = parameters.getSingleValue("userName");
        ...
    }
}


アップロード可能なファイルサイズのデフォルトの上限値の変更

セキュリティ強化のため、アップロード可能なファイルサイズのデフォルトの上限値を16Mバイトに設定しています。 Apcoordinator V5.0L10 および INTERSTAGE WEBCOORDINATORでは、デフォルトではサイズの制限はありません。

Apcoordinator V5.0L10またはINTERSTAGE WEBCOORDINATORで作成したアプリケーションで以下に該当する場合は、アプリケーションを修正して、ファイルサイズの上限値を変更する必要があります。

修正は、アプリケーションクラスにgetMimeTransferSizeLimitメソッドをオーバーライドして、アップロード可能なファイルサイズの上限値を返却するようにしてください。上限値の単位はバイトです。 以下は、getMimeTransferSizeLimitメソッドの記述例です。

import com.fujitsu.uji.ApplicationProfile;

public class SampleApplication extends ApplicationProfile {
    public long getMimeTransferSizeLimit() {
        // ファイルサイズの上限値を32Mバイトに指定します。
        return 32*1024*1024;
    }
}

なお、getMimeTransferSizeLimitメソッドで0を返すことによってサイズの制限を無くすことができますが、セキュリティの観点から上限値を設定することを推奨します。

UJIタグが生成するHTMLの変更

Apcoordinatorのバージョンアップに伴う機能追加や最適化のために、 UJIタグリファレンスに記載の仕様の範囲内で、UJIタグが生成するHTMLパターンが変更されています。 変更内容には、HTMLタグの追加・削除、リクエストパラメタの変更が含まれます。 HTML比較による自動テストツールを利用する場合などは、差異となります。
注意
Apcoordinatorを新しいバージョンに置き換えた場合でもアプリケーションが正常に動作するようにするため、UJIタグリファレンスに記載されている場合を除き、UJIタグが生成するHTMLを仮定した処理は作成しないでください。

uji:tableViewタグおよびuji:treeViewタグのアトリビュートの修正

uji:tableViewタグおよびuji:treeViewタグの以下の問題を修正しました。
  1. JSPファイル1個の中でuji:tableViewタグまたはuji:treeViewタグを2個以上使用し、2個目以降のタグでアトリビュートの値を省略した場合にデフォルト値が適用されず、以前実行されたタグのアトリビュートで指定した値が適用される場合があります。

    この問題が発生するのは、uji:tableViewタグとuji:treeViewタグの以下のアトリビュートで";"で区切った値を指定し、区切られた値の一部を省略した場合です。
    columnWidth
    columnInputWidth
    columnInputHeight
    indentIcon
    indentIconUseImage
    header
    headerInsets
    headerBackground
    headerForeground
    headerFontStyle
    headerFontWeight
    headerFontSize
    headerTextDecoration
    headerAlignmentHorizontal
    headerAlignmentVertical
    headerRuleWidth
    headerRuleColor
    headerRuleType
    headerNoWrap
    headerUseImage
    dataInsets
    dataBackground
    dataForeground
    dataFontStyle
    dataFontWeight
    dataFontSize
    dataTextDecoration
    dataAlignmentHorizontal
    dataAlignmentVertical
    dataRuleWidth
    dataRuleColor
    dataRuleType
    dataNoWrap
    dataUseImage
    dataStripeBackground
    dataEmpty
    dataEditable
    dataCellType
  2. JSPファイル1個の中でuji:tableViewタグまたはuji:treeViewタグを2個以上使用し、そのタグでmultiRowアトリビュートを使用した場合に、2個目以降のタグでは以前実行されたタグのmultiRowアトリビュートの値が使用される場合があります。
これらの問題は以下の製品で発生します。 本製品では修正済みであるため、以下の製品で問題が発生していたアプリケーションを本製品に移行するとタグの動作が変わります。 移行前と同じ動作とするには、以下のようにJSPを修正してください。 各アトリビュートの指定方法の詳細は、UJIタグリファレンスのuji:tableViewタグ、uji:treeViewタグの解説を参照してください。

web.xmlの記述形式の違い

Servlet仕様バージョン2.4では、web.xmlの記述形式が変更になりました。以前の形式のweb.xmlをServlet仕様バージョン2.4の形式に移行する場合は、以下のとおり書き換えてください。 以下は書き換えの例です。
修正前

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

<!DOCTYPE web-app
   PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
   "http://java.sun.com/dtd/web-app_2_3.dtd">
   
<web-app>
  <context-param>
    <param-name>factory</param-name>
    <param-value>sample2.Sample2Factory</param-value>
  </context-param>
  <servlet>
    <servlet-name>download</servlet-name>
    <servlet-class>updown.DownloadServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>download</servlet-name>
    <url-pattern>/download</url-pattern>
  </servlet-mapping>
  <taglib>
    <taglib-uri>uji-taglib</taglib-uri>
    <taglib-location>/WEB-INF/ujiall.tld</taglib-location>
  </taglib>
</web-app>

修正後

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
      version="2.4">
  <context-param>
    <param-name>factory</param-name>
    <param-value>sample2.Sample2Factory</param-value>
  </context-param>
  <servlet>
    <servlet-name>download</servlet-name>
    <servlet-class>updown.DownloadServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>download</servlet-name>
    <url-pattern>/download</url-pattern>
  </servlet-mapping>
  <jsp-config>
    <taglib>
      <taglib-uri>uji-taglib</taglib-uri>
      <taglib-location>/WEB-INF/ujiall.tld</taglib-location>
    </taglib>
  </jsp-config>
</web-app>

なお、Interstage Studioを使用している場合は、プロジェクトエクスプローラからプロジェクトを選択し、コンテキストメニューの[J2EEのdeployment descriptorの更新]を選択することでweb.xmlをServlet仕様バージョン2.4の形式に変換できます。

JDK/JRE5.0以降を使用する場合の例外の違い

JDK/JRE5.0で実施された修正の影響で、JDK/JRE1.4以前を使用していたアプリケーションをJDK/JRE5.0以降に移行した場合、以下のメソッドが発生する例外が変わる場合があります。 影響をおよぼすJDK/JRE5.0の修正内容は以下のとおりです。
JDK/JRE1.4では、ObjectInputStream.readClassDescriptorメソッドでClassNotFoundExceptionが発生すると、ObjectInputStream.readObjectのトップレベルの呼び出し元にはStreamCorruptedExceptionとして反映されていました。また、その例外の原因となる例外は存在しない状態でした。JDK/JRE5.0では、トップレベルの呼び出し元にはInvalidClassExceptionとして反映されるようになりました。また、その例外の原因となる例外は元のClassNotFoundExceptionとなります。
ServletConnectionクラスのinvokeメソッドは内部でObjectInputStream.readObjectを呼び出しており、ObjectInputStream.readObjectが例外を発生した場合はその例外をそのまま発生させます。このため、JDK/JRE5.0の修正によりObjectInputStream.readObjectが発生する例外が変化するケースにおいては、invokeメソッドが発生する例外も同様に変化します。invokeの呼び出し元でStreamCorruptedExceptionInvalidClassExceptionを区別して処理している場合、および、原因となる例外を参照している場合には修正が必要となります。この2つの例外を区別せず、その共通のスーパークラス(java.io.IOExceptionなど)として処理している場合で、かつ、原因となる例外を参照していない場合には影響はありません。

コンテントを持たないuji:caseタグの動作の違い

コンテントを持たないuji:caseタグを使用しているアプリケーションを Interstageで動作させる場合、V8.0以前のInterstageのサーブレット実行環境で動作させた場合と比べて、以下のとおり動作が変わる場合があります。
  1. V8.0以前のInterstageのサーブレット実行環境で動作させた場合
    コンテントを持つuji:caseタグがある場合、その内容がコンテントを持たないuji:caseタグによって出力されることがあります。
  2. InterstageのTomcat5.5ベースのサーブレット実行環境で動作させた場合
    コンテントを持たないuji:caseタグは何も出力しません。

上記1の動作を前提としているアプリケーションをInterstageのTomcat5.5ベースのサーブレット実行環境に移行する場合は、コンテントを持たないuji:caseタグを修正し、uji:caseタグで出力したい内容を明示的に記述してください。

なお、上記1の動作はApcoordinatorの障害であり、初期化パラメタuji.compatible.clearbodytrueを指定することで、サーブレット実行環境に依存せずに上記2の動作となります。初期化パラメタの詳細は初期化パラメタを参照してください。

初期化パラメタuji.servlet.defaultErrorPageを使用している場合の修正

初期化パラメタuji.servlet.defaultErrorPageは推奨されません。 以下の製品が提供するアプリケーションサーバを利用する場合には、旧バージョンのサーブレット実行環境(V8.0互換モードのIJServer)でのみ利用することができます。

UjiServletを使用する場合において、例外発生時に表示するJSPを指定するには、初期化パラメタuji.servlet.errorPageを使用してください。uji.servlet.errorPageの詳細は初期化パラメタを参照してください。

uji.servlet.defaultErrorPageを使用していたアプリケーションを、uji.servlet.errorPageを使用するように変更するには、アプリケーションを以下のとおり書き換えてください。

注意

uif:iformタグを使用しているアプリケーションの運用

uif:iformタグは推奨されません。INTERSTAGE WEBCOORDINATOR V4.0L10との互換のために残されています。電子フォームを表示させるには、JSPを使用せず、FormServletクラスを継承したサーブレットを作成します。詳細は電子フォームアプリケーションの開発を参照してください。

uif:iformタグの使用に必要な以下のファイルは標準ではインストールされません。

上記のファイルはFormcoordinator連携互換機能を別途インストールすることにより提供されます。uif:iformタグを使用したアプリケーションを運用する場合はFormcoordinator連携互換機能をインストールしてください。インストール方法はインストールガイドに記載のフレームワークに関する注意事項を参照してください。

なお、Interstage Studioでは、上記のファイルは提供されません。


目次 前ページ次ページ

All Rights Reserved, Copyright © 富士通株式会社 2000-2007