Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]() ![]() |
付録G 旧バージョンからの移行上の注意 |
Javaインタフェースにおいて、JDK/JRE1.3以前からJDK/JRE1.4へ移行する場合、必ずJDK1.4のjavaコンパイラで再度アプリケーションをコンパイルしてください。JDK1.3以前のjavaコンパイラでコンパイルしたアプリケーションを実行した場合、以下のメソッドでjava.lang.IncompatibleClassChangeErrorが発生します。
また、JDK/JRE1.3以前からJDK/JRE1.4へ移行する場合の非互換について以下に示します。
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 ); ... |
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 { ... } |
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 { ... } |
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 { ... } |
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); }; }; |
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) ); : } |
JDK/JRE1.4を使用する場合、サーバアプリケーションを登録していない状態、または環境変数OD_IMPLIDを使用したインプリメンテーションの登録方法に誤りがある状態で、“RootPOA”を指定してorg.omg.CORBA.ORB.resolve_initial_references()を呼び出した場合、本メソッドはnullを返却します。
必ず復帰値を確認するようにプログラムを変更してください。
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 ); ... |
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 ); ... |
目次
索引
![]() ![]() |