I believe we can create jini community standards.

If the service api is different, it is not breaking backward compatibility, it 
is simply a different service.  A bridging service smart proxy can implement 
javaspace and utilise the new service, allowing legacy clients to utilise the 
new service.

You could call it Balinda, Borne again Linda. ;)

With generics and service api, compile time generic replacements must be the 
same, otherwise a runtime class cast exception will occur.  This will work when 
T is replaced by the same class, but will break when it isn't in separately 
compiled code.  Generics that are specific will work.

Cheers,

Peter.



 
----- Original message -----
> Who controls the JavaSpace API specification? Is it something we can
> change, as part of River, or do we just have an implementation?
>
> Should we be considering designing RiverSpaces, similar to JavaSpaces
> but with an updated API, including generics, more use of collections,
> and better naming?
>
> James - if you have time, could you file a Jira issue? That way, these
> ideas will not get lost in the mail archives.
>
> Patricia
>
> On 12/14/2010 12:33 AM, James Grahn wrote:
> > I have a small list of suggestions for javaspace/outrigger, largely
> > derived from my experience creating a wrapper for space functionality
> > and direct usage prior to the creation of that wrapper.
> >
> > Many of these suggestions involve breaking backwards compatibility, so
> > many tears will be shed and perhaps we'll decide against implementing
> > any of these. But, I'm hoping this might lead to some discussion and
> > perhaps some improvements.
> >
> > ---
> >
> > 1) Generic methods.
> > First, use generics in the method signatures to minimize casting, in
> > this manner:
> >
> > public <T extends Entry> T read(T template, Transaction txn, long timeout)
> >
> > Seems broadly like a win, if use of Java 1.5 idioms is acceptable. This
> > is the only one I've mentioned before, and the reaction was fairly
> > positive on this list.
> >
> > ---
> >
> > 2) More collection-like naming of space methods, more consistency.
> >
> > read, take, readIfExists, takeIfExists, write, snapshot, notify,
> > registerForAvailabilityEvent all have fine names. That is, they properly
> > describe the functionality and how the methods themselves relate to one
> > another.
> >
> > I do, however, take issue with "contents", "take (with a collection)",
> > and "write (with a list)".
> >
> > I would suggest the following renamings:
> > contents -> readAllExisting
> > take (with collection) -> takeAny
> > write (with list) -> writeAll
> >
> > This would eliminate the awkward overloading of "take" and "write" while
> > bringing "contents" into a consistent naming plan.
> >
> > The goal is a naming scheme which clearly communicates functionality:
> > "exists/existing" suffix = nonblocking call
> > "any" suffix = one or more templates will be satisfied, multi-return
> > "all" suffix = all templates will be satisfied, multi-return
> > If unmodified, standard blocking call.
> >
> > The clearer naming also points to new functionality we could choose to
> > support, namely:
> > readAll - blocking call with all templates
> > readAny - blocking call on any template
> > takeAllExisting - nonblocking call with multiple templates.
> > takeAll - blocking call with all templates
> >
> >
> > Addendums:
> > 1) I'll admit that "any" is the weakest part of the syntax, as it fails
> > to connote the multi-return. I was stretching to cover the current "take
> > (with collection)" semantics, which blocks until at least one template
> > match is available. Open to better suggestions.
> >
> > 2) Though generally I dislike overloading methods, there is one case I'm
> > sympathetic to: overloading "all" and "allExisting" methods to take in a
> > single template or multiple templates. This would save some calls to
> > Collections.singleton() for our users while maintaining a consistent
> > return type for the method.
> >
> > ---
> >
> > 3) Collections or remote iterators, not both.
> > "contents" returns a remote iterator named "MatchSet", while "take (with
> > collection)" returns a collection. I can understand the argument behind
> > both use cases, but not necessarily the argument for using both
> > simultaneously.
> >
> > ---
> >
> > 4) Exception soup.
> > Javaspace methods return a vast cornucopia of possible exceptions. I
> > would propose wrapping any Exceptions bubbling up to River users to be
> > wrapped in RiverException. Those few(?) who have special handlers to
> > deal with problem conditions can peek into the cause.
> >
> >  From my observation, most libraries are either taking this route (ala
> > JAXB) or wrapping everything in runtime exceptions (Spring, IIRC).
> >
> > Presumably this suggestion could be applied to all of River, not just
> > JavaSpaces.
> >
> > ---
> >
> > 5) Clearer javadocs.
> > The current Javaspace docs are part protocol specification, part
> > implementation with some vital bits of information squirreled away in
> > obscure reaches.
> >
> > For instance, in the 9 paragraphs describing the behavior of "take (with
> > collection)":
> > "If there is at least one matching Entry available in the space, an
> > invocation of this method must take at least one Entry. If more than one
> > matching Entry is available, the invocation may take additional entries.
> > It must not take more than maxEntries, but an implementation may chose
> > to take fewer entries from the space than the maximum available or the
> > maximum allowed by maxEntries."
> >
> > The above is a broad protocol specification to implementers (even
> > allowing that the method may always return an empty list ;-) ).
> > Frustrating to users because the definition is so amorphous.
> >
> > It also takes some doing to track down the fact that the implementation
> > does, in fact, limit the number of entries returned from a "take (with
> > collection)". That tidbit is stored within the outrigger *package*
> > documentation, which reveals the setting and default (only 100).
> >
> >
> >
> > Aside: In prior discussion, I believe the reason for using that limit
> > was that the implementation creates an array of size Minimum(limit,
> > maxEntries)... and I think there's already a JIRA bug to switch from the
> > array to a collection. When we do, we should be a bit more generous with
> > the default (or remove the setting).
> >
> > ---
> >
> > Anyway, hope this stirs some discussion.
> >
> > I'll be on vacation the rest of the month, so unfortunately my
> > participation in said discussion will likely be spotty (though I'll try
> > to look in). I've been meaning to push out these recommendations for
> > some time, though, so I figured better now than waiting another month.
> >
> > jamesG
> >
>

Reply via email to