Interstage Application Server/Interstage Web Server J2EE ユーザーズガイド
目次 索引 前ページ次ページ

第3部 EJB編> 第15章 EJBアプリケーションの呼出し方法> 15.10 IDL変換規則に関する補足資料

15.10.2 EJBアプリケーションの配備でエラーとなる例

 以下ではJavaクラスからIDLに変換した際に、EJBアプリケーションの配備でエラーとなる例について説明します。

 エラーが発生した場合は、前項の変換規則や、本項のエラー事例を参考にしながら、下記のポイントをチェックして対処してください。

変換規則適用後、クラス名が重なる例

適用した変換規則

3

エラーメッセージ例

D:\EJB\deployment\work\EB0919350001\pack001\_class002Remote_Stub.java:37: class pack001._class002Remote_Stub で宣言されたメソッド pack001._under meth001() は、interface pack001.class002Remote で宣言された同じシグニチャーのメソッドをオーバーライドできません。同じ型の戻り値を持たなければなりません。
 public pack001._under meth001() throws RemoteException

D:\EJB\deployment\work\EB0919350001\pack001\_FJclass002RemoteImpl_Tie.java:74: この型は declaration には不適合です。pack001.J_under から pack001._under には変換できません。
 pack001._under _result = _target.meth001();

エラー 2 個

Java記述例

public pack001.J_under meth001() throws java.rmi.RemoteException;
public pack001._under meth002() throws java.rmi.RemoteException;

IDLマッピング例

::pack001::J_under meth001();
::pack001::J_under meth002();

エラー原因

クラス名“_under”が“J_under”に変換された結果、クラス名が重複しました。

 

変換規則適用後、メソッド名が重なる例

適用した変換規則:4

適用した変換規則

4

エラーメッセージ例

FJJ2IDL0003S 変名後のメソッド名と同名のメソッドが定義されています。 InterfaceName = pack.test007Remote MethodName = foo__long

Java記述例

public void foo() throws java.rmi.RemoteException;
public void foo(int x) throws java.rmi.RemoteException;
public void foo__long() throws java.rmi.RemoteException;

IDLマッピング例

エラーが発生したためIDLは出力されません。

エラー原因

メソッド“foo”がオーバーロードされたために変換され、メソッド“foo_long”と名前が重複しました。

 

適用した変換規則

4

エラーメッセージ例

<D4105S-02-002-1701> 展開処理中に異常が発生しました。
詳細メッセージに従い対処してください。
<D4298S-04-010-0307> IDLcでエラーを検出しました。
IDLc -roi -info"D:\EJB\deployment\work\EB1558300003\j2idl.xml" -I"D:\EJB\deployment\idl" -I"D:\EJB\deployment\work\EB1558300003" "D:\EJB\deployment\work\EB1558300003\pack\test001Home.idl"
OD: エラー: od51116:IDLroijavacg:aU0024bは識別子として二重定義されました。
OD: エラー: od51221:IDLc:IDLroijavacgコマンドエラー. エラーコード=4

Java記述例

// pack.Exclass001
package pack;
public interface Exclass001 {
  public int a$b(int param1, int param2) throws java.rmi.RemoteException;
}

// pack.test001Remote
package pack;
import java.rmi.*;
import javax.ejb.*;
public interface test001Remote extends javax.ejb.EJBObject,Exclass001 {
  public int aU0024b(int param1, int param2) throws java.rmi.RemoteException;
}

IDLマッピング例

//pack/Exclass001.idl
module pack{
  abstract interface Exclass001 {
    long aU0024b(
      in long arg0,
      in long arg1);
  };
#pragma ID Exclass001 "RMI:pack.Exclass001:0000000000000000"
};

//pack/test001Remote.idl
module pack{
  interface test001Remote: ::javax::ejb::EJBObject, ::pack::Exclass001 {
    long aU0024b(
      in long arg0,
      in long arg1);
  };
#pragma ID test001Remote "RMI:pack.test001Remote:0000000000000000"
};

エラー原因

継承元のメソッド“a$b”が“aU0024b”に変換されて、継承先のメソッド“aU0024”と名前が重複しました。

 

適用した変換規則:7

適用した変換規則

7

エラーメッセージ例

<D4105S-02-002-1701> 展開処理中に異常が発生しました。
詳細メッセージに従い対処してください。
<D4298S-04-010-0307> IDLcでエラーを検出しました。
IDLc -roi -info"D:\EJB\deployment\work\EB1339510001\j2idl.xml" -I"D:\EJB\deployment\idl" -I"D:\EJB\deployment\work\EB1339510001" "D:\EJB\deployment\work\EB1339510001\pack002\meth001Home.idl"
OD: エラー: od51116:IDLroijavacg:meth1_は識別子として二重定義されました。
OD: エラー: od51221:IDLc:IDLroijavacgコマンドエラー. エラーコード=4

Java記述例

//pack002.meth001Remote
package pack002;
public interface meth001Remote extends SubRemote,javax.ejb.EJBObject {
  public void meth1() throws java.rmi.RemoteException;
  public void meth1(long param1) throws java.rmi.RemoteException;
}

//pack002.SubRemote
package pack002;
public interface SubRemote extends java.rmi.Remote {
  public void meth1() throws java.rmi.RemoteException;
  public void meth1(int param1,int param2) throws java.rmi.RemoteException;
}

IDLマッピング例

//pack002/meth001Remote.idl
module pack002{
  interface meth001Remote: ::pack002::SubRemote, ::javax::ejb::EJBObject {
    void meth1__();
    void meth1__long_long(
      in long long arg0);
  };
#pragma ID meth001Remote "RMI:pack002.meth001Remote:0000000000000000"
};

//pack002/SubRemote.idl
module pack002{
  interface SubRemote {
    void meth1__();
    void meth1__long__long(
      in long arg0,
      in long arg1);
  };
#pragma ID SubRemote "RMI:pack002.SubRemote:0000000000000000"
};

エラー原因

継承元と継承先でそれぞれメソッド名が変換されて、メソッド名が重複しました。

 

適用した変換規則

7

エラーメッセージ例

<D4105S-02-002-1701> 展開処理中に異常が発生しました。
詳細メッセージに従い対処してください。
<D4298S-04-010-0307> IDLcでエラーを検出しました。
IDLc -roi -info"D:\EJB\deployment\work\EB1523460001\j2idl.xml" -I"D:\EJB\deployment\idl" -I"D:\EJB\deployment\work\EB1523460001" "D:\EJB\deployment\work\EB1523460001\pack002\method003Home.idl"
OD: エラー: od51116:IDLroijavacg:method1_は識別子として二重定義されました。
OD: エラー: od51221:IDLc:IDLroijavacgコマンドエラー. エラーコード=4

Java記述例

// pack002.Subclass1
package pack002;
public interface Subclass1 extends java.rmi.Remote {
  public void method1() throws java.rmi.RemoteException;
}

// pack002.Subclass2
package pack002;
public interface Subclass2 extends Subclass1 {
  public void method1() throws java.rmi.RemoteException;
}

// pack002. method003Remote
package pack002;
public interface method003Remote extends Subclass2,javax.ejb.EJBObject {
  public void method1() throws java.rmi.RemoteException;
}

IDLマッピング例

// pack002/Subclass1.idl
module pack002{
  interface Subclass1 {
    void method1();
  };
#pragma ID Subclass1 "RMI:pack002.Subclass1:0000000000000000"
};

// pack002/Subclass2.idl
module pack002{
  interface Subclass2: ::pack002::Subclass1 {
    void method1__();
  };
#pragma ID Subclass2 "RMI:pack002.Subclass2:0000000000000000"
};

// pack002/method003Remote.idl
module pack002{
  interface method003Remote: ::pack002::Subclass2, ::javax::ejb::EJBObject {
    void method1__();
  };
#pragma ID method003Remote "RMI:pack002.method003Remote:0000000000000000"
};

エラー原因

継承元と継承先でそれぞれメソッド名が変換されて、メソッド名が重複しました。

 

変換規則適用後、フィールド名と他の識別子名とが重複する例

適用した変換規則

7

エラーメッセージ例

FJJ2IDL0005S 変名後のフィールド名と同名のフィールドが定義されています。 ClassName = pack.Valueclass FieldName = jack_

Java記述例

public int jack_;
public int jAcK;
public int jack;

IDLマッピング例

エラーが発生したためIDLは出力されません。

エラー原因

定義されたフィールド“jAcK”と“jack”が大文字/小文字だけ違うため、“jack”が“jack_”と変換された結果、他のフィールド“jack_”と名前が重複しました。

 

変換規則適用後、attribute名と他の識別子名が重複する例

適用した変換規則

22

エラーメッセージ例

<D4105S-02-002-1701> 展開処理中に異常が発生しました。
詳細メッセージに従い対処してください。
<D4298S-04-010-0307> IDLcでエラーを検出しました。
IDLc -roi -info"D:\EJB\deployment\work\EB1711200001\j2idl.xml" -I"D:\EJB\deployment\idl" -I"D:\EJB\deployment\work\EB1711200001" "D:\EJB\deployment\work\EB1711200001\pack\test002Home.idl"
OD: エラー: od51116:IDLroijavacg:ATTRは識別子として二重定義されました。
OD: エラー: od51221:IDLc:IDLroijavacgコマンドエラー. エラーコード=4

Java記述例

// pack.ExIntf002
package pack;
public interface ExIntf002 extends java.rmi.Remote {
  public int getATTR() throws java.rmi.RemoteException;
}

// pack.test002Remote
package pack;
import java.rmi.*;
import javax.ejb.*;
public interface test002Remote extends javax.ejb.EJBObject,ExIntf002 {
  public void ATTR() throws java.rmi.RemoteException;
}

IDLマッピング例

// pack/ExIntf002.idl
module pack{
  interface ExIntf002 {
    readonly attribute long ATTR;
  };
#pragma ID ExIntf002 "RMI:pack.ExIntf002:0000000000000000"
};

// pack/test002Remote
module pack{
  interface test002Remote: ::javax::ejb::EJBObject, ::pack::ExIntf002 {
    void ATTR();
  };
#pragma ID test002Remote "RMI:pack.test002Remote:0000000000000000"
};

エラー原因

継承元のメソッドがattributeに変換され、継承先のメソッドと名前が重複しました。

 

適用した変換規則

22

エラーメッセージ例

FJJ2IDL0032S 同名のアトリビュートが定義されています。 InterfaceName = pack.test010Remote AttributeName = ATTR

Java記述例

public int getATTR() throws java.rmi.RemoteException;
public void setATTR(int param1) throws java.rmi.RemoteException;
public boolean isATTR() throws java.rmi.RemoteException;

IDLマッピング例

エラーが発生したためIDLは出力されません。

エラー原因

“getATTR”メソッドと“setATTR”メソッドがattributeに変換され、“isATTR”メソッドもattributeに変換された結果、attribute名が重複しました。

 

適用した変換規則

22

エラーメッセージ例

FJJ2IDL0033S アトリビュート名と同名のメソッドが定義されています。 InterfaceName = pack.test011Remote AttributeName = ATTR__

Java記述例

public long getATTR() throws java.rmi.RemoteException;
public void setATTR(long param1) throws java.rmi.RemoteException;
public void ATTR() throws java.rmi.RemoteException;
public void ATTR__() throws java.rmi.RemoteException;

IDLマッピング例

エラーが発生したためIDLは出力されません。

エラー原因

“getATTR”メソッドと“setATTR”メソッドがattributeに変換され、“ATTR”メソッドとattribute名が重複したため、語尾に“__”を付加した結果、“ATTR__”メソッドと名前が重複しました。

 

変換規則適用後、例外名(exception)が重複する例

適用した変換規則

41

エラーメッセージ例

<D4105S-02-002-1701> 展開処理中に異常が発生しました。
詳細メッセージに従い対処してください。
<D4296S-04-010-0305> IDLcでシンタックスエラーを検出しました。
IDLc -roi -info"D:\EJB\deployment\work\EB0936420001\j2idl.xml" -I"D:\EJB\deployment\idl" -I"D:\EJB\deployment\work\EB0936420001" "D:\EJB\deployment\work\EB0936420001\pack001\class003Home.idl"
"D:\EJB\deployment\work\EB0936420001\pack001/class003Remote.idl",
OD: エラー: od51108:IDLejbparser:raises句で::pack001::TestExEx例外が二重定義されました。
FILE=D:\EJB\deployment\work\EB0936420001\pack001/class003Remote.idl LINE=17
OD: エラー: od51240:IDLejbparser:致命的エラーが発見されました。 エラー数 = 1
OD: エラー: od51221:IDLc:IDLejbparserコマンドエラー. エラーコード=2

Java記述例

public void meth001() throws TestExException, TestEx, java.rmi.RemoteException;

IDLマッピング例

void meth001() raises(
  ::pack001::TestExEx,
  ::pack001::TestExEx);

エラー原因

例外クラスの“TestExException”が“TestExEx”にマッピングされ、“TestEx”が“TestExEx”に変換された結果、例外名が重複しました。

 

適用した変換規則

41

エラーメッセージ例

D:\EJB\deployment\work\EB0946180001\pack001\_class004Remote_Stub.java:69: class pack001._class004Remote_Stub で宣言されたメソッド void meth002() は、interface pack001.class004Remote で宣言された同じシグニチャーのメソッドをオーバーライドできません。それらの throws 節には互換性がありません。
  Public void meth002() throws RemoteException, pack001.TestEx

D:\EJB\deployment\work\EB0946180001\pack001\_FJclass004RemoteImpl_Tie.java:96: 例外 pack001.TestEx は対応する try 文の本体でスローされることはありません。
  catch (pack001.TestEx _exp){

エラー 2 個

Java記述例

public void meth001() throws TestEx, java.rmi.RemoteException;
public void meth002() throws TestExException, java.rmi.RemoteException;

IDLマッピング例

void meth001() raises(
  ::pack001::TestExEx);
void meth002() raises(
  ::pack001::TestExEx);

エラー原因

例外クラスの“TestExException”が“TestExEx”にマッピングされ、“TestEx”が“TestExEx”に変換された結果、例外名が重複しました。

 


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

Copyright 2008 FUJITSU LIMITED