S'cool.

On 6 February 2011 19:45, Peter Firmstone <j...@zeus.net.au> wrote:

> I was thinking about post filtering on an Entry's contents after the lookup
> method returns.
>
>
Well, there might be a use case there as well, not sure but than haven't
thought about it....


> Sorry, what you meant was the builder generates a default array or Set of
> Entry classes required to support the platform, additional Entry classes the
> client needs can be added, then it builds the array to pass as a parameter
> to the lookup service.
>
>
Yep.


> Do you think we need to pass all classes related to the Entry's (fields) or
> just the Entry classes?  I'm thinking it'd be simpler if it's just the Entry
> classes.
>
>
I'm thinking classes, anything more than that is more specific selection
that a client wants to do and hasn't accounted for in the original lookup
(which would seem to be a "broken" client?)


>
> Cheers,
>
> Peter.
>
> Dan Creswell wrote:
>
>> I was assuming a filter was inclusive by default. i.e. You specify just
>> the
>> things you're interested in a client seeing.
>>
>> There seems less value in removal given a client specifies its interests
>> somewhat in relation to what is on its classpath....
>>
>> On 6 February 2011 11:45, Peter Firmstone <j...@zeus.net.au> wrote:
>>
>>
>>
>>> A filter could also collect, rather than just remove.
>>>
>>> Do you think query/filter builders should be specific to a particular
>>> Entry
>>> type?
>>>
>>>
>>> Cheers,
>>>
>>> Peter.
>>>
>>> Dan Creswell wrote:
>>>
>>>
>>>
>>>> Yep.
>>>>
>>>> On 5 February 2011 10:45, Peter Firmstone <j...@zeus.net.au> wrote:
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>> Sounds interesting, looks like a builder?
>>>>>
>>>>>
>>>>> Dan Creswell wrote:
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>> I'm also figuring you might have some wise defaults that people could
>>>>>> add
>>>>>> to
>>>>>> for constructing a filter/matchset.
>>>>>>
>>>>>> Something like:
>>>>>>
>>>>>> DefaultEntrys.add(...).add(....)
>>>>>>
>>>>>> DefaultEntrys probably includes something like ServiceInfo, Name and
>>>>>> such
>>>>>> -
>>>>>> all stock options in the platform...
>>>>>>
>>>>>> On 5 February 2011 10:28, Peter Firmstone <j...@zeus.net.au> wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>> Ok, good reasoning, we can keep the Entry's explicit, in the call.
>>>>>>>
>>>>>>> So we make the Entry's the client's interested in, the only Entry's
>>>>>>> that'll
>>>>>>> be unmarshalled, those and the ServiceID.
>>>>>>>
>>>>>>>
>>>>>>> Cheers,
>>>>>>>
>>>>>>> Peter.
>>>>>>>
>>>>>>> Dan Creswell wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>> ...
>>>>>>>>
>>>>>>>> On 5 February 2011 09:48, Peter Firmstone <j...@zeus.net.au> wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>> Dan Creswell wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> "ServiceClasspathSubItem is intended for client side filtering of
>>>>>>>>>> lookup
>>>>>>>>>> * service results prior to clients using a service, the lookup
>>>>>>>>>> service
>>>>>>>>>> * that implements this class, implements #getServiceItem(), so
>>>>>>>>>> clients
>>>>>>>>>> * can obtain a complete ServiceItem when required after
>>>>>>>>>> filtering."
>>>>>>>>>>
>>>>>>>>>> I'm still wondering if it wouldn't be better for a client to send
>>>>>>>>>> a
>>>>>>>>>> list
>>>>>>>>>> of
>>>>>>>>>> Entry's it's interested in seeing, separate from the set for
>>>>>>>>>> matching
>>>>>>>>>> to
>>>>>>>>>> the
>>>>>>>>>> Registrar. The Registrar can then return ServiceItems for the
>>>>>>>>>> matches
>>>>>>>>>> and
>>>>>>>>>> pre-filter the Entry's per item. Especially given:
>>>>>>>>>>
>>>>>>>>>> "Some fields in ServiceClasspathSubItem may be null, fields in
>>>>>>>>>> Entry's
>>>>>>>>>> may
>>>>>>>>>> * be null or even the service reference may be null, these fields
>>>>>>>>>> would
>>>>>>>>>> be
>>>>>>>>>> * non-null in a ServiceItem that resolves classes from dynamicly
>>>>>>>>>> downloaded
>>>>>>>>>> * code or a remote codebase."
>>>>>>>>>>
>>>>>>>>>> I think, if we do the filtering as I suggest, much of the comment
>>>>>>>>>> re:
>>>>>>>>>> nulls
>>>>>>>>>> above still applies in implementation but ultimately, the client
>>>>>>>>>> will
>>>>>>>>>> pick
>>>>>>>>>> Entry's for which it has the classpath such that it always deals
>>>>>>>>>> in
>>>>>>>>>> complete
>>>>>>>>>> Entry's and can have a level of predictability in respect of what
>>>>>>>>>> is
>>>>>>>>>> or
>>>>>>>>>> is
>>>>>>>>>> not null. This might save clients having to do endless null checks
>>>>>>>>>> etc
>>>>>>>>>> that
>>>>>>>>>> can be a rich source of bugs and ugly code.
>>>>>>>>>>
>>>>>>>>>> We might need the filter list to include specific subclasses as
>>>>>>>>>> well....
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>> Hmm, null is a problem, we could still have fields missing subclass
>>>>>>>>> classes, which might prevent a subclass from unmarshalling.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>> Yeah, which is why I'm tempted to have the client be explicit about
>>>>>>>> which
>>>>>>>> Entry's (and that would include subclasses of those Entry's it can
>>>>>>>> tolerate). In this way the client can provide high-level explicit
>>>>>>>> guidance
>>>>>>>> as to what's right. No need for code to try and be clever and guess
>>>>>>>> the
>>>>>>>> client intent which is always ugly.
>>>>>>>>
>>>>>>>> Many times I suspect the Entry set used for matching will be the
>>>>>>>> same
>>>>>>>> as
>>>>>>>> the
>>>>>>>> filter set, probably can provide a nice method signature to help
>>>>>>>> that.
>>>>>>>>
>>>>>>>> Is there a way we can catch a class not found exception or similar
>>>>>>>> and
>>>>>>>> still
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>> get the state of the superclass, or would this violate
>>>>>>>>> polymorphism,
>>>>>>>>> method
>>>>>>>>> overrides etc?
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>> Probably but again this is building clever code to try and
>>>>>>>> compensate.
>>>>>>>> It's
>>>>>>>> the same as writing all the null handling if you will albeit hidden
>>>>>>>> inside
>>>>>>>> the River libraries.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>> I guess the likelihood of having null values is reduced, although
>>>>>>>>> not
>>>>>>>>> eliminated.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>> Quite.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>> If we compact the final array of Entry's so null entry's are
>>>>>>>>> removed,
>>>>>>>>> the
>>>>>>>>> client only needs to find the Entry's it's interested in, likely
>>>>>>>>> ignoring
>>>>>>>>> the others anyway.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>> Sure but then the client has to explicitly construct filter code,
>>>>>>>> albeit
>>>>>>>> clean of null checks to go through the list of Entry's to find what
>>>>>>>> it's
>>>>>>>> interested in. Unless we return a HashMap(EntryClass.getName,
>>>>>>>> EntryClass.instance) to make that easier. Even so, you're still
>>>>>>>> returning
>>>>>>>> a
>>>>>>>> bunch of Entry's only some of which may be interesting to the
>>>>>>>> client....
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>> So the client needs to ensure the Entry's are resolvable from the
>>>>>>>>> classpath.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>> Absolutely - and the fact that it must means it can thus construct a
>>>>>>>> proper
>>>>>>>> filter list of Entrys of interest.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>> I have thought about the case where a proxy uses the lookup service
>>>>>>>>> and
>>>>>>>>> has
>>>>>>>>> Entry's in it's proxy classloader, but this could be subject to
>>>>>>>>> security
>>>>>>>>> issues, where two services with different Subject's end up sharing
>>>>>>>>> state.
>>>>>>>>>
>>>>>>>>> We might also consider only including Entry's that don't have null
>>>>>>>>> field
>>>>>>>>> values, this puts the impetus on the implementer to consider the
>>>>>>>>> Entry
>>>>>>>>> field
>>>>>>>>> classes.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>> Again, I think we're venturing into attempting to imply intent by
>>>>>>>> examining
>>>>>>>> null fields. If the implementer makes a mistake in their analysis
>>>>>>>> they
>>>>>>>> end
>>>>>>>> up with unexpected results come lookup. Personally I don't like this
>>>>>>>> sort
>>>>>>>> of
>>>>>>>> thing, I like explicit methods to guide an implementer and eliminate
>>>>>>>> opportunities for these kinds of confusion.
>>>>>>>>
>>>>>>>> That last bit is really why I'm down on trying to solve all these
>>>>>>>> problems
>>>>>>>> (including the bandwidth ones) with clever management of
>>>>>>>> class-downloading,
>>>>>>>> reflection and such. It's implicit, makes assumptions about usage
>>>>>>>> that
>>>>>>>> are
>>>>>>>> difficult for users to account for. It also leads to complicated,
>>>>>>>> brittle
>>>>>>>> code with many an opportunity for dark-corners/unhandled edge cases
>>>>>>>> that
>>>>>>>> cause confusion and are difficult to identify and fix for River
>>>>>>>> implementers
>>>>>>>> and users.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>> Cheers,
>>>>>>>>>
>>>>>>>>> Peter.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>>
>
>

Reply via email to