2011-06-22 9 views
4

Enumを使って、EJBからのコードとメッセージの両方を返すことを考えています。現在、整数値のコードのみが返されます。 私たちは複数のクライアントアプリケーションを持っており、クライアントはEJB共通クラスが存在していても常に更新されるとは限りません。クライアント側の列挙型が同期しないとどうなりますか?EJBから列挙型を返す

クライアント側でEnumという古い定義があり、EJB側で新しい定義があり、その逆の場合はうまくいくのでしょうか?

例えば クライアント側:

public enum Color { 
WHITE(21, "White"), BLACK(22, "Black"); 

private int code; 
private int message; 

private Color(int c, String message) { 
    code = c; 
    message = m; 
} 

public int getCode() { 
    return code; 
} 

public String getMessage(){ 
return message; 
} 

EJB側:

public enum Color { 
WHITE(21, "White"), BLACK(22, "Black"), RED(23, "Red"); 

private int code; 
private int message; 

private Color(int c, String message) { 
    code = c; 
    message = m; 
} 

public int getCode() { 
    return code; 
} 

public String getMessage(){ 
return message; 
} 

そして、私のEJBメソッドは次のとおりです。

public Color getBestColor(); 

とリターン:

Color.WHITE 

答えて

2

クライアントの列挙型の定義に送信する値がある場合は、正常に機能します(例:白)。クライアントに値がない場合は、クライアント側でIllegalArgumentExceptionが発生します(たとえば、RED)。 (enum serializationの詳細はhere)。

+0

大変ありがとうございます。パーフェクトな答え(確認するためのリンク付き)は、私がしたいことがうまくいくことを意味します:) – timothyja

+0

enumのシリアル化はJRMPではうまくいくかもしれませんが、RMI-IIOPは違います。 SunとIBMのRMI-IIOP enumシリアル化の実装にはバグがあります.RMI-IIOPを使用している場合は、慎重にテストすることをお勧めします。 –

関連する問題