Here is the basic idea: http://pastebin.com/m6add9d4b

Rather than passing around Properties, we'd pass somethign like that
around.  Then we'd use its "getConsumedProperties".


On Wed, 2010-02-03 at 10:05 +0100, Emmanuel Bernard wrote:
> That's the point Hardy, the list of consumed properties is not known in 
> advance in Hibernate search. Or is the plan get core pass all the raw 
> Properties and HSearch return the list of properties it really wants? In 
> which case it will return all of them to implement our current approach.
> 
> I guess the point is that I am lost and don't see how (my understanding of) 
> the pull second option can work for Search.
> 
> On 2 févr. 2010, at 15:12, Hardy Ferentschik wrote:
> 
> > For the Hibernate Search case I could imagine to implement Steve's second 
> > pull
> > approach. Search already defines an interface SearchConfiguration which 
> > delegates the
> > access to the underlying Configuration properties. It should be easy to 
> > implement some
> > sort of journaling to keep track which properties Search consumes.
> > 
> > If we can keep track of the consumes properties we should be able to report 
> > this back
> > into Core via the PropertyConsumer#collectConsumedProperties approach.
> > 
> > WDYT?
> > 
> > --Hardy
> > 
> > On Tue, 02 Feb 2010 09:54:57 -0300, Steve Ebersole <st...@hibernate.org> 
> > wrote:
> > 
> >> The 'know in advance' approach is exactly what I was trying to avoid.  I 
> >> guess that is another option I forgot on that list
> >> 
> >> It's not the I want to implement (way too tedious).
> >> 
> >> -- Sent from my Palm Pre
> >> st...@hibernate.org
> >> http://hibernate.orgEmmanuel Bernard wrote:
> >> 
> >> Yep.
> >> 
> >> Provided HSearch does not know in advance what properties are required by 
> >> its plugins, I was wondering how that would work. That's why I asked Hardy 
> >> for an implementation example as he seemed to have understood.
> >> 
> >> 
> >> 
> >> On 1 févr. 2010, at 20:52, Steve Ebersole wrote:
> >> 
> >> 
> >> 
> >>> For Search afaict as you mentioned listeners will be the touchpoint
> >> 
> >>> here.  So it depends on what is accessible to the listeners.
> >> 
> >>> 
> >> 
> >>> At some point this just needs to be a best effort.
> >> 
> >>> 
> >> 
> >>> 
> >> 
> >>> On Mon, 2010-02-01 at 18:42 +0100, Emmanuel Bernard wrote:
> >> 
> >>>> Hardy,
> >> 
> >>>> How would it work for say a DirectoryProvider in Hibernate search (which 
> >>>> is a plugin of HSearch which itself is a plugin of Core in a way - 
> >>>> listener).
> >> 
> >>>> 
> >> 
> >>>> Remember we have the hibernate.search.default.[customproperty] category 
> >>>> and the hibernate.search.[indexname].[customproperty] category. What 
> >>>> would the the impl of PropertyConsumer#collectConsumedProperties like 
> >>>> for Hibernate Search?
> >> 
> >>>> 
> >> 
> >>>> 
> >> 
> >>>> On 1 févr. 2010, at 16:28, Hardy Ferentschik wrote:
> >> 
> >>>> 
> >> 
> >>>>> The pull approach via an additional PropertyConsumer interface works 
> >>>>> for me.
> >> 
> >>>>> It seems to be a good trade-off. Least invasive while still getting 
> >>>>> some order
> >> 
> >>>>> into the properties.
> >> 
> >>>>> 
> >> 
> >>>>> --Hardy
> >> 
> >>>>> 
> >> 
> >>>>> 
> >> 
> >>>>> On Mon, 01 Feb 2010 12:14:02 -0300, Steve Ebersole 
> >>>>> &lt;st...@hibernate.org> wrote:
> >> 
> >>>>> 
> >> 
> >>>>>> On Mon, 2010-02-01 at 09:49 +0100, Emmanuel Bernard wrote:
> >> 
> >>>>>>> Also "plugins" can make use of the general availability of properties.
> >> 
> >>>>>>> For example Hibernate Search reads everything under hibernate.search 
> >>>>>>> (and it's not a limited set of property names). Likewise, HSearch 
> >>>>>>> extensions can use whatever property name they want to configure say 
> >>>>>>> the custom backend or the directory providers (either custom or even 
> >>>>>>> one of the system properties).
> >> 
> >>>>>> 
> >> 
> >>>>>> The main use case I was keeping in mind along the way was caching.  I 
> >>>>>> know in the JBC and Infinispan integrations they added the ability to 
> >>>>>> read a lot of config information from our properties.
> >> 
> >>>>>> 
> >> 
> >>>>>> As long as it is something configured by the Configuration ->
> >> 
> >>>>>> Settings/SessionFactory process or the something is known to
> >> 
> >>>>>> SessionFactory at the end of its init it is workable.  For example, I
> >> 
> >>>>>> imagine Validator would be easy to tie in here because of the 
> >>>>>> listeners;
> >> 
> >>>>>> they are known to the SessionFactory.  Not so sure about Search, it
> >> 
> >>>>>> registers listeners too so maybe its ok.
> >> 
> >>>>>> 
> >> 
> >>>>>> The first question is whether we want a push or pull (from perspective
> >> 
> >>>>>> of the things being configured) model here.  For example, would the
> >> 
> >>>>>> ConnectionProvider tell SessionFactory about the properties it consumed
> >> 
> >>>>>> (push)?  Or would the SessionFactory ask the ConnectionProvider for 
> >>>>>> that
> >> 
> >>>>>> info (pull)?
> >> 
> >>>>>> 
> >> 
> >>>>>> The pull approach has the advantage of being the least trade-off .  We
> >> 
> >>>>>> could add an optional interface "PropertyConsumer" that things can
> >> 
> >>>>>> choose to implement.  If they do, the method would be something like
> >> 
> >>>>>> "collectConsumedProperties(Map copy)"; they would put all the property
> >> 
> >>>>>> keys/values into the given map.
> >> 
> >>>>>> 
> >> 
> >>>>>> Another potential "pull" approach is to not pass around j.u.Properties
> >> 
> >>>>>> into these things to configure themselves, but to instead wrap that in 
> >>>>>> a
> >> 
> >>>>>> class that journals the key/values as they are requested.  That is a 
> >>>>>> bit
> >> 
> >>>>>> more invasive though as it would mean changing quite a few contracts,
> >> 
> >>>>>> some of which are implemented by classes outside our control.
> >> 
> >>>>>> 
> >> 
> >>>>>> In the "push" strategy, the things configuring themselves somehow push
> >> 
> >>>>>> which properties (key/value) they are consuming.  Much like the second
> >> 
> >>>>>> pull-approach, this is pretty invasive because we would need to pass in
> >> 
> >>>>>> the mechanism for these "configurables" to report back which properties
> >> 
> >>>>>> they are consuming.  Not to mention its tedious.
> >> 
> >>>>>> 
> >> 
> >>>>>> Long term I like the second pull approach.  However, I personally think
> >> 
> >>>>>> it is too disruptive in the short term and that we should use the first
> >> 
> >>>>>> pull approach for now.
> >> 
> >>>>>> 
> >> 
> >>>>>> Thoughts?
> >> 
> >>>>>> 
> >> 
> >>>>> 
> >> 
> >>>> 
> >> 
> >>> --
> >> 
> >>> Steve Ebersole &lt;st...@hibernate.org>
> >> 
> >>> Hibernate.org
> >> 
> >>> 
> >> 
> >> 
> >> 
> >> 
> > 
> 
-- 
Steve Ebersole <st...@hibernate.org>
Hibernate.org

_______________________________________________
hibernate-dev mailing list
hibernate-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/hibernate-dev

Reply via email to