Thanks for the feedback.
Yes HibernateMassIndexed (not Impl suffix) would be a better name.
I am thinking that we could use something like what I have done in
bean validation to have Hibernate specific MassIndexer properties type-
safely exposed as a subinterface of the public MassIndexer.
Maybe it's better to mark MAssIndexer as potentially still evolving
and get feedback on the API first.
Emmanuel
On 25 oct. 09, at 19:57, Sanne Grinovero wrote:
Hi Emmanuel,
I guess some classes would result similar in an Infinispan based mass
indexer, bit this is coupled to which are the efficient strategies to
get a continuous flow of Documents.
It mostly depends on how you're going to store structured entities in
Infinispan? The whole graph needed by a DocumentBuilder is found on
the same key? (i.e. no lazy loading?)
Sure a non-tuned implementation would not be hard, but we might find
out that to make it fast it needs a larger set of changes maybe up to
the API.
Some classes would be reused with minimal changes, as whatever the
source is I'd still recommend to use the multiple-parallel-queues
idea, so at least these:
ProducerConsumerQueue,
MassIndexerProgressMonitor,
Executors
even the coordinator BatchCoordinator could work unchanged;
All classes in org.hibernate.search.backend.impl.batchlucene would
also work unchanged.
I can't really abstract-away Hibernate from the MassIndexerImpl and
the 2 Runnable types it spawns, the strategies it uses are tailored
for Hibernate: exploit caches, fight delay on lazyloading,
detach-reattach to session at thread switches, pool the Session(s). I
guess you could rename it to HibernateMassIndexerImpl? Another
implementation could easily combine the other classes as common
utilities but I'd bet the main strategy would be different.
you say "aside from the MassIndexer interface", note I'm exposing
cacheMode(org.hibernate.CacheMode cacheMode) on the interface.
I've seen consistent performance differences in enabling/disabling the
caches, in some models clearly faster enabling it, in others disabling
it, so I need some way to set this.
We could change that to a boolean, as only IGNORE/NOT_IGNORE the
caches are interesting options. Other implementations could then
ignore this setting if caching doesn't make sense to them.
After having made the API "hibernate free" we can change the factory
to return a different impl whatever the storage engine is. (we call it
"storage engine" ?)
Sanne
2009/10/25 Emmanuel Bernard <emmanuel(a)hibernate.org>:
> Hey Sanne,
> MassIndexerImpl is 100% dependent of Hibernate Core (you pass a
> SessionFactory).
> How realistic and doable is it to abstract that a bit. For example,
> would an
> Infinispan based mass indexer make sense? If yes, what's reusable
> in your
> impl (I mean aside from the MassIndexer interface).
>
> Emmanuel
>