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

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

14.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

エラーメッセージ例

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

エラーメッセージ例

<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”に変換された結果、例外名が重複しました。

 上記で説明したような変換規則やエラー事例を参考にしながら、下記のポイントをチェックして対処してください。

変換規則の説明をもとに名前が重複する可能性がないかを確認してください。


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

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