You got me interested :) Refreshable.refresh() is mostly done by a 'RefreshHelper' that does re-entrant locking on the operation, so if you call refresh() twice from multiple threads it only does it once. It then changes the DataModel pointer.
If a recommender method does two successive calls to the datamodel, and refresh() changes the datamodel in the middle, the different calls will go against different datamodels. The Recommender object would have to implement its own synchronous controls across methods. I looked at a couple and they do not. Using a recommender across a refresh() is not part of the contract. You have to do your own synchronous controls. On Fri, Feb 24, 2012 at 11:46 PM, Sebastian Schelter <[email protected]> wrote: > This is not true. If you are in a servlet environment, the servlet > container will use the recommender in multiple threads which means the > app does not block while the recommender is refreshed. > > During the refresh process a new DataModel is built and the reference > to that is simply switched once it is fully loaded. > > --sebastian > > 2012/2/25 Lance Norskog <[email protected]>: >> You have to use two recommender objects if you want to serve >> recommendations while refreshing. I don't think any of the >> recommenders have that as part of the api contract. >> >> On Fri, Feb 24, 2012 at 8:31 AM, Aleksei Udatšnõi <[email protected]> >> wrote: >>> Hi, >>> >>> I am using an item-based recommender inside a servlet and would like >>> to reload its data periodically (from db). Each reload takes up to 30 >>> sec. >>> >>> Recommender object is Refreshable and thus can do periodic reloads by >>> using refresh() function. My only concern is the impact of reload on >>> the live servlet users. >>> >>> I wonder what happens with existing recommender.recommend() requests >>> while the recommender is being reloaded? Does it still use the old >>> data until reload is completely finished? >>> >>> Thanks >>> Aleksei >> >> >> >> -- >> Lance Norskog >> [email protected] -- Lance Norskog [email protected]
