you should create the list of entities inside iterator() call, not hold on to it in a field. see the phonebook example.
-igor On Thu, Nov 5, 2009 at 7:06 PM, <b...@actrix.gen.nz> wrote: > Thanks again Igor. > > I have switched to plain IDataProvider as suggested, although I have > to admit that I still have to look at the phonebook example. > > Again, IDataProvider is an improvement, but still not good. > > It appears that SerializableChecker is complaining about a volatile > field not being Serializable. Is this a bug or do I miss anything? > > I think that SerializableChecker is a wondeful tool, that is why I am > persevering: > > org.apache.wicket.util.io.SerializableChecker$WicketNotSerializableException: > Unable to serialize class: MyEntity > > ... > private volatile java.util.List MyEntityDataProvider.entities > [class=java.util.Vector] > > ... > > > public class MyEntityDataProvider implements IDataProvider<MyEntity>{ > > private final Integer searchId; > private volatile List<MyEntity> entities; > > public MyEntityDataProvider(Integer searchId) { > this(searchId, null); > } > > public MyEntityDataProvider(Integer searchId, List<MyEntity> > entities) { > this.searchId = searchId; > this.entities = entities; > } > > �...@override > public Iterator<MyEntity> iterator(int first, int count) > { > return entities.iterator(); > } > > �...@override > public int size() > { > if(this.entities == null){ > SessionLocal sessionBean = MyApplication.getSessionBean(); > this.entities = sessionBean.getMyEntities(this.searchId); > } > return this.entities.size(); > } > > �...@override > public IModel<MyEntity> model(MyEntity entity) > { > return new DetachableMyEntityModel(entity); > } > > �...@override > public void detach() > { > } > > } > > > > > On Thu, 5 Nov 2009 18:30:20 -0800, you wrote: > >>no, you should not be using listdataprovider, it is only for static >>lists of things. >> >>if you want best practice look at the phonebook example in wicket-stuff. >> >>-igor >> >>On Thu, Nov 5, 2009 at 5:52 PM, <b...@actrix.gen.nz> wrote: >>> Igor, >>> >>> Thanks very much for your suggestion which I followed. >>> >>> I have overridden it and that is an improvement but still not good. >>> >>> ListDataProvider dataProvider = new ListDataProvider(myList){ >>> �...@override >>> public IModel<MyEntity> model(Object object) >>> { >>> return new DetachableMyEntityModel((MyEntity) object); >>> } >>> }; >>> >>> SerializableChecker does a nice job spotting: >>> >>> ... >>> private final java.util.List >>> org.apache.wicket.markup.repeater.data.ListDataProvider.list[write:1] >>> [class=[Ljava.lang.Object;] >>> >>> private final java.util.List >>> org.apache.wicket.markup.repeater.data.ListDataProvider.list[write:1][0] >>> [class=MyEntity] <----- field that is not serializable >>> >>> I guess that private final List<T> list; of ListDataProvider wants to >>> be serialized into the session which we don't want? >>> >>> I am trying to apply best practice - may be I should not be using >>> ListDataProvider? >>> >>> http://old.nabble.com/How-to-avoid-Lazy-loading-exception-td17040941.html >>> >>> "instead of using listdataprovider you should use a dataprovider in >>> that uses detachablemodels for each individual item -igor " >>> >>> Today, with 1.4, what is best to use for <List> results from >>> EntityManager? Still DataProvider? >>> >>> Many thanks, >>> >>> Bernard >>> >>> >>> >>> On Thu, 5 Nov 2009 14:25:01 -0800, you wrote: >>> >>>>you have to override listdataprovider#model and return a detachable model. >>>> >>>>-igor >>>> >>>>On Thu, Nov 5, 2009 at 2:19 PM, <b...@actrix.gen.nz> wrote: >>>>> Hi, >>>>> >>>>> I am trying to prevent the leaking of business objects into the >>>>> session. >>>>> >>>>> Michael made a good comment in >>>>> >>>>> http://www.mail-archive.com/users@wicket.apache.org/msg31187.html >>>>> >>>>> "... you could e.g. temporarily remove the "Serializable" from your >>>>> model-classes and go spotting nonserializable exceptions until they >>>>> don't ocurr anymore." >>>>> >>>>> which is what I did. >>>>> >>>>> It works nicely until I hit a problem with ListDataProvider in >>>>> DataView, where I get an exception even if I use LDMs: >>>>> >>>>> java.lang.ClassCastException: MyEntyty cannot be cast to >>>>> java.io.Serializable at >>>>> org.apache.wicket.markup.repeater.data.ListDataProvider.model(ListDataProvider.java:35) >>>>> >>>>> It appears to me that the approach has a conflict with framework >>>>> classes. >>>>> >>>>> What is the best way to spot session memory issues without hitting >>>>> this problem? >>>>> >>>>> Many thanks, >>>>> >>>>> Bernard >>>>> >>>>> --------------------------------------------------------------------- >>>>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org >>>>> For additional commands, e-mail: users-h...@wicket.apache.org >>>>> >>>>> >>>> >>>>--------------------------------------------------------------------- >>>>To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org >>>>For additional commands, e-mail: users-h...@wicket.apache.org >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org >>> For additional commands, e-mail: users-h...@wicket.apache.org >>> >>> >> >>--------------------------------------------------------------------- >>To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org >>For additional commands, e-mail: users-h...@wicket.apache.org > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > For additional commands, e-mail: users-h...@wicket.apache.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org