GWTのRPCで、特定のフィールドは送受信したくないとき
GWTのRPCで、特定のフィールドは送受信したくないときは、クラスのフィールドにtransient修飾子をつけるとよい。
アノテーションをつけて抑制する方法とかもありそうだけどわからなかった。
なお、クライアント - サーブレット間で送受信したいが、データベースには保存したくないフィールドは
@Attribute(persistent=false)
のようにアノテーションをつける
使用例
//データモデルにコンポジットパターンとリスナーパターンを使用するとき。 @Model(schemaVersion = 1) public abstract class Composite implements Serializable{ @Attribute(primaryKey = true) private Key key; @Attribute(version = true) private Long version; //データベースにComposite役の参照関係を保存するとき //Composite役をデータベースに直接保存するとデータ容量がすごいことになる。 //Composite役への参照はサーブレット - クライアント間で送受信するが、 //データベースには保存しない。 @Attribute(persistent=false) protected List<Composite> childrenList = new ArrayList<Composite>(); //子要素のリスト //データベース内で子要素との関連を保持するためのリスト //本当はInverseModelListRefを使った方がいいかも。 @Attribute(unindexed=true) private List<Key> childrenKeyList = new ArrayList<Key>(); //オブザーバパターンのためのリスナー // RPCでサーバに送ろうとすると、リスナー側のパネルまでサーバに送ってしまい、NotSerializableExceptionがでる。 @Attribute(persistent=false) transient protected List<ItemListener> _listeners = new ArrayList<ItemListener>(); //(後略) }
データベース - サーブレット - クライアント間のデータ送受信の抑制
○:送受信する! ×:抑制
クラスのフィールドにtransient修飾子をつける | フィールドに @Attribute(persistent=false) アノテーションをつける | ? | |
---|---|---|---|
DB | |||
× | × | ○ | |
Servlet | |||
× | ○ | × | |
Client |