Interstage Application Server アプリケーション作成ガイド (CORBAサービス編)
目次 索引 前ページ次ページ

付録H 旧バージョンからの移行上の注意

H.1 Javaインタフェース(JDK/JRE1.3以前からJDK/JRE1.4への移行)

 Javaインタフェースにおいて、JDK/JRE1.3以前からJDK/JRE1.4へ移行する場合、必ずJDK1.4のjavaコンパイラで再度アプリケーションをコンパイルしてください。JDK1.3以前のjavaコンパイラでコンパイルしたアプリケーションを実行した場合、以下のメソッドでjava.lang.IncompatibleClassChangeErrorが発生します。

 また、JDK/JRE1.3以前からJDK/JRE1.4へ移行する場合の非互換について以下に示します。

(1) org.omg.CORBA.PortableServer.POA.create_reference_with_id()

内容

 JDK/JRE1.4を使用する場合、org.omg.PortableServer.POA.create_reference_with_id()はorg.omg.PortableServer.POAPackage.WrongPolicyをスローしません。
 org.omg.PortableServer.POA.create_reference_with_id()を使用しているプログラムは、org.omg.PortableServer.POAPackage.WrongPolicyをcatchしないように変更する必要があります。

対処方法

 org.omg.PortableServer.POA.create_reference_with_id()がorg.omg.PortableServer.POAPackage.WrongPolicy(非Runtime例外)をスローすることを期待しているプログラムは、そのtry〜catch節を見直してください。


 [JDK/JRE1.4へ移行前(JDK/JRE1.3以前を使用した場合のプログラム処理)]

  try {
      org.omg.CORBA.Object obj = myPoa.create_reference_with_id( objID, intfID );
      } catch( org.omg.PortableServer.POAPackage.WrongPolicy e ) {
          // エラー処理
      }
      ...

 [JDK/JRE1.4へ移行後(JDK/JRE1.4を使用した場合のプログラム処理)]

  org.omg.CORBA.Object obj = myPoa.create_reference_with_id( objID, intfID );
  ...

(2) org.omg.PortableServer.AdapterActivator

内容

 JDK/JRE1.4を使用する場合、org.omg.PortableServer.AdapterActivatorはinterfaceとして扱われます。

対処方法

 org.omg.PortableServer.AdapterActivatorをextendsしているユーザクラスは、implementsに変更し、org.omg.CORBA.LocalObjectをextendsしてください。


 [JDK/JRE1.4へ移行前(JDK/JRE1.3以前を使用した場合のプログラム処理)]

  class UserAdapterActivator
      extends org.omg.PortableServer.AdapterActivator
      {
          ...
      }

 [JDK/JRE1.4へ移行後(JDK/JRE1.4を使用したプログラム)]

  class UserAdapterActivator
      extends org.omg.CORBA.LocalObject
      implements org.omg.PortableServer.AdapterActivator
      {
          ...
      }

(3) org.omg.PortableServer.ServantActivator

内容

 JDK/JRE1.4を使用する場合、org.omg.PortableServer.ServantActivatorはinterfaceとして扱われます。

対処方法

 org.omg.PortableServer.ServantActivatorをextendsしているユーザクラスは、implementsに変更し、org.omg.CORBA.LocalObjectをextendsしてください。


 [JDK/JRE1.4へ移行前(JDK/JRE1.3以前を使用した場合のプログラム処理)]

  class UserServantActivator
      extends org.omg.PortableServer.ServantActivator
      {
          ...
      }

 [JDK/JRE1.4へ移行後(JDK/JRE1.4を使用したプログラム)]

  class UserServantActivator
      extends org.omg.CORBA.LocalObject
      implements org.omg.PortableServer.ServantActivator
      {
          ...
      }

(4) org.omg.PortableServer.ServantLocator

内容

 JDK/JRE1.4を使用する場合、org.omg.PortableServer.ServantLocatorはinterfaceとして扱われます。

対処方法

 org.omg.PortableServer.ServantLocatorをextendsしているユーザクラスは、implementsに変更し、org.omg.CORBA.LocalObjectをextendsしてください。


 [JDK/JRE1.4へ移行前(JDK/JRE1.3以前を使用した場合のプログラム処理)]

  class UserServantLocator
      extends org.omg.PortableServer.ServantLocator
      {
          ...
      }

 [JDK/JRE1.4へ移行後(JDK/JRE1.4を使用したプログラム)]

  class UserServantLocator
      extends org.omg.CORBA.LocalObject
      implements org.omg.PortableServer.ServantLocator
      {
          ...
      }

(5) IDLcで生成されるスタブ・スケルトン

内容

 JDK/JRE1.4を使用する場合、module宣言のない定義ファイルから生成されたスタブ・スケルトンはjavacで失敗します。

対処方法

 必ずmodule宣言の下に内容を記述するようにしてください。


 [JDK/JRE1.4へ移行前(JDK/JRE1.3以前を使用した場合のプログラム処理)]

  interface   intf{
      long    add(in long a, in long b);
  };

 [JDK/JRE1.4へ移行後(JDK/JRE1.4を使用したプログラム)]

  module mod{
      interface   intf{
          long    add(in long a, in long b);
      };
  };

(6) org.omg.CORBA.SystemException

内容

 JDK/JRE1.4を使用する場合、org.omg.CORBA.SystemExceptionのサブクラスに対して呼び出したtoString()の結果がJDK/JRE1.3以前を使用した場合の結果と異なります。特にマイナーコードについては、すべての桁が表示されません。

対処方法

 必ず以下の形式で例外情報を出力するようにしてください。

  try {
          :
  }
  catch( org.omg.CORBA.SystemException e ) {
      System.out.println( "ERROR : " + e.getClass().getName()
          + " : minor = 0x" + java.lang.Integer.toHexString(e.minor) );
          :
  }

(7) org.omg.CORBA.ORB.resolve_initial_references()

内容

 JDK/JRE1.4を使用する場合、サーバアプリケーションを登録していない状態、または環境変数OD_IMPLIDを使用したインプリメンテーションの登録方法に誤りがある状態で、“RootPOA”を指定してorg.omg.CORBA.ORB.resolve_initial_references()を呼び出した場合、本メソッドはnullを返却します。

対処方法

 必ず復帰値を確認するようにプログラムを変更してください。

(8) org.omg.PortableServer.Servant._this_object()

内容

 JDK/JRE1.4を使用する場合、org.omg.PortableServer.Servant._this_object(org.omg.CORBA.ORB orb)形式は、使用できません。
 ServantクラスにORBインスタンスを設定する必要がある場合、以下のいずれかのメソッドに、対象となるServantクラスを指定して呼び出す必要があります。

 なお、これらのメソッドを使用する場合には、対象となるPOAに必要なポリシが設定されている必要があります。詳細については、“リファレンスマニュアル(API編)”のそれぞれのメソッドを参照してください。

対処方法

 org.omg.PortableServer.Servant._this_object(org.omg.CORBA.ORB orb)は使用せず、上記のメソッドを使用するようにプログラムを変更してください。


 [JDK/JRE1.4へ移行前(JDK/JRE1.3以前を使用した場合のプログラム処理)]

  org.omg.CORBA.ORB Orb;
  ...
  org.omg.PortableServer.Servant svt = new UserServant();
  svt._this_object(Orb);
  ...

 [JDK/JRE1.4へ移行後(JDK/JRE1.4を使用したプログラム)]

  org.omg.PortableServer.POA childPOA;
  ...
  org.omg.PortableServer.Servant svt = new UserServant();
  childPOA.servant_to_reference( svt );
  ...

(9) org.omg.PortableServer.Servant._orb()

内容

 JDK/JRE1.4を使用する場合、org.omg.PortableServer.Servant._orb(org.omg.CORBA.ORB orb)形式は、使用できません。
 ServantクラスにORBインスタンスを設定する必要がある場合、以下のいずれかのメソッドに、対象となるServantクラスを指定して呼び出す必要があります。

 なお、これらのメソッドを使用する場合には、対象となるPOAに必要なポリシが設定されている必要があります。詳細については、“リファレンスマニュアル(API編)”のそれぞれのメソッドを参照してください。

対処方法

 org.omg.PortableServer.Servant._this_orb(org.omg.CORBA.ORB orb)は使用せず、上記のメソッドを使用するようにプログラムを変更してください。


 [JDK/JRE1.4へ移行前(JDK/JRE1.3以前を使用した場合のプログラム処理)]

  org.omg.CORBA.ORB Orb;
  ...
  org.omg.PortableServer.Servant svt = new UserServant();
  svt._orb(Orb);
  ...

 [JDK/JRE1.4へ移行後(JDK/JRE1.4を使用したプログラム)]

  org.omg.PortableServer.POA childPOA;
  ...
  org.omg.PortableServer.Servant svt = new UserServant();
  childPOA.set_servant( svt );
  ...

目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005