2011-08-19 6 views
0

RequestFactoryの周りに私の心を包み込みたいのですが、いくつか問題があります。私は不変型(joda-time LocalDate)のvalueproxyであるプロパティを持つentityproxyを持っており、このエンティティプロキシをサーバーへの呼び出しで使用する際に問題が発生しています。不変なValueProxyプロパティを持つEntityProxies - > "setterを見つけることができませんでした"

私は、entityproxyのプロパティのゲッターを含め、valueproxyのプリミティブプロパティのゲッターを含むだけでプロパティを読み取り専用にしました。

しかし、私が知る限り、サービスメソッドの呼び出しでentityproxyを引数として使用すると、参照されるvalueproxyは自動的に編集済みとしてマークされ、そのすべてのプロパティはデルタに含まれますか?

これにより、ReflectiveServiceLayerは、LocalDateの欠落しているセッターについて例外をスローします。

私は、これを回避するために "setProperty"をオーバーライドするServiceLayerDecoratorを実装するアイデアを思いついていますが、それが良い解決策であるかどうかはわかりません。これを修正する "適切な"方法はありますか?理想的には、私はAbstractRequestContextに、サーバへの呼び出しに不変のプロパティを含めないようにしたいと思います。

私は

編集GWT 2.3を使用しています:私はこのような回避策を作成したが、私はまだこれが正しいアプローチであるかどうかがわからないよ:

public class ImmutablePropertyFixServiceLayer extends ServiceLayerDecorator { 
    @Override 
    public void setProperty(Object domainObject, String property, Class<?> expectedType, Object value) { 
     Method setter = getTop().getSetter(domainObject.getClass(), property); 
     if (setter != null) { 
      super.setProperty(domainObject, property, expectedType, value); 
     } else { 
      //System.out.println(domainObject.getClass().getName() + "." + property + " doesn't have a setter"); 
     } 
    } 
} 

答えて

1

EntityProxyオブジェクトは、彼らはいくつかの方法がありますサーバー上で簡単に検索することができます。したがって、オブジェクトをサーバーに送り返すときは、IDだけが必要です。一方、ValueProxyオブジェクトは、すべてのサブ値の組み合わせとしてのみ送信できます。不変の値をサーバーに送り返すとき、サーバーコードはプロキシをサーバー側の値に戻す方法を知らない。

クライアントから送信されたサーバーと同じ日付が正しく取得されない可能性があります。

+0

お返事ありがとうございます。私は、RequestFactoryを使用してスキップしました。私は、私が、私のドメインオブジェクトをどのように実装して、RequestFactoryをいくつかのDTOソリューションを使って最初に打ち破ったという制約を課し続けました。 ) とにかく、私が持っていた問題 – henriks

+0

...この場合、値プロキシオブジェクトは、それらが持っていてはならないときに編集済みとしてマークされていました。 RFには差分変更のみをサーバーに送り返すメカニズムがありますが、これはプリミティブプロパティに適用されたように見え、値プロキシ内部のプリミティブには拡張されませんでしたか?この場合、サーバー側のRFは、値プロキシが表す不変オブジェクトのプロパティを変更しようとし続けていたため、問題でした。 – henriks

+0

明示するコメントがもう1つあります。これらのオブジェクトは実際にクライアント上に作成されていませんクライアントが提供しようとしていたプロパティが変更不可能なため、クライアントから提供されたプロパティを無視すると状態が矛盾する場合がありました。 – henriks

関連する問題