[infinispan-dev] TimeService (ISPN-3069): CacheLoader API break

Dan Berindei dan.berindei at gmail.com
Tue May 14 05:44:11 EDT 2013


On Tue, May 14, 2013 at 12:38 PM, Pedro Ruivo <pedro at infinispan.org> wrote:

>
>
> On 05/14/2013 10:31 AM, Dan Berindei wrote:
> >
> >
> >
> > On Tue, May 14, 2013 at 11:51 AM, Pedro Ruivo <pedro at infinispan.org
> > <mailto:pedro at infinispan.org>> wrote:
> >
> >
> >
> >     On 05/14/2013 09:44 AM, Dan Berindei wrote:
> >      >
> >      >
> >      >
> >      > On Tue, May 14, 2013 at 11:37 AM, Manik Surtani
> >     <msurtani at redhat.com <mailto:msurtani at redhat.com>
> >      > <mailto:msurtani at redhat.com <mailto:msurtani at redhat.com>>> wrote:
> >      >
> >      >
> >      >     On 14 May 2013, at 08:33, Dan Berindei
> >     <dan.berindei at gmail.com <mailto:dan.berindei at gmail.com>
> >      >     <mailto:dan.berindei at gmail.com
> >     <mailto:dan.berindei at gmail.com>>> wrote:
> >      >
> >      >>     If we want to keep it hidden, then I think it would be best
> to
> >      >>     leave the getTimeService() method only in
> >      >>     ComponentRegistry/GlobalComponentRegistry and remove it from
> the
> >      >>     AdvancedCache interface.
> >      >
> >      >     +1.
> >
> >     first I have two situations here:
> >
> >     in production: it's indifferent for me have it in the AdvancedCache
> or
> >     in the ComponentRegistry, in the cache loader/store and in the
> Extended
> >     Stats I have access to the cache and I can pick from everywhere.
> >
> >     in the test suite: I first try to have it only in the
> ComponentRegistry
> >     and I was not be able to mock it because the class is final (I
> believe
> >     that is final for some reason). In addition, all the cache store
> tests
> >     mocks the Cache interface. That's why I put it in the AdvancedCache.
> >
> >
> > Yeah, being able to inject the TimeService directly in the cache store
> > would have been nice :)
> > I think we can remove the final modifier from the ComponentRegistry
> > class, though.
> >
> >      >
> >      >>     We might want to remove it from the configuration, too.
> >      >
> >      >     It is definitely *not* configurable and *not* a part of the
> >      >     configuration.  See an earlier thread on this subject:
> >      > http://bit.ly/102aQ9R
> >
> >     This is another issue I have. I need to have the TimeService in the
> >     Extended Stats and this are a CustomInterceptor. My first try was to
> >     replace and rewire the GlobalComponent but this does not work
> because I
> >     don't have any @Inject method in the CustomInterceptor where I can
> >     replace for TimeService implementation in the test suite. That's why
> it
> >     is in the GlobalConfiguration.
> >
> >
> > cache.getAdvancedCache().getComponentRegistry().getTimeService() should
> > work in a custom interceptor.
> > You just have to mock the cache and the component registry...
>
> I cannot mock the cache in the test suite otherwise I'm not able to test
> the statistics. Even if I register and rewire the ComponentRegistry,
> does not work because I'm setting the TimeService when the start() is
> invoked.
>
>
Ok, I think I understand the problem now, and the simplest solution would
be to use TestingUtil.replaceField to replace the TimeService in your
interceptor with a mock.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/infinispan-dev/attachments/20130514/bd6cccfe/attachment-0001.html 


More information about the infinispan-dev mailing list