+1 for Geode functions as well.

Back on the day, I've talked with Barry about it and we got a few basic
ones into this repository.

https://github.com/markito/geode-functions

But we should probably create another thread to talk about it to keep this
one focused on the singletons discussion.

On Thu, May 25, 2017 at 8:45 AM, Wes Williams <wwilli...@pivotal.io> wrote:

> +1 to utility functions
>
> *Wes Williams | Pivotal Advisory **Data Engineer*
> 781.606.0325
> http://pivotal.io/big-data/pivotal-gemfire
>
> On Wed, May 24, 2017 at 4:59 PM, John Blum <jb...@pivotal.io> wrote:
>
> > On a side but related note, it would be nice if Geode had the notion of
> > useful, "canned" Functions provided OOTB.  Some of the *Gfsh* functions
> > would be quite useful for applications in fact, or particularly for
> > framework/tools to use as well.  Sometime ago I sent a list of Functions
> I
> > thought would be nice to have.
> >
> > Food for thought.
> >
> > On Wed, May 24, 2017 at 1:41 PM, Kirk Lund <kl...@apache.org> wrote:
> >
> > > Thanks for pointing out that DistributionManager is internal -- I
> forgot
> > > about that. I'm primarily concerned with internal Functions, such as
> > those
> > > for GFSH commands, so maybe an internal version of FunctionContext
> which
> > > exposes more would be good for those.
> > >
> > > On Wed, May 24, 2017 at 11:39 AM, Darrel Schneider <
> > dschnei...@pivotal.io>
> > > wrote:
> > >
> > > > FunctionContext is an external interface so it can not expose
> internal
> > > > interfaces like DistributionManager.
> > > > But it could expose Cache. DistributedSystem is external so you could
> > > have
> > > > it exposed from FunctionContext but it is already exposed from Cache.
> > > > SecurityService is also internal.
> > > > Are you thinking that for internal Functions you would cast
> > > FunctionContext
> > > > to an internal that would then expose these internal classes?
> > > >
> > > >
> > > >
> > > > On Thu, May 18, 2017 at 5:13 PM, Kirk Lund <kl...@apache.org> wrote:
> > > >
> > > > > I've been digging through our code with close attention to the
> > > > singletons.
> > > > > I believe the majority of singletons in Geode exist for two main
> > > reasons:
> > > > >
> > > > > 1) Insufficient context or lack of service lookup for Function,
> > > > > DistributionMessage and (Client)Command implementations.
> > > > >
> > > > > 2) Poor OO design. This is where you see code in one class invoking
> > > > > concrete methods on another class outside of its concerns. Many of
> > > these
> > > > > need to be teased apart and replaced with some sort of Observer
> that
> > > > > isolates the reaction from the source of the originating event.
> > > > >
> > > > > Right now my focus is on #1 because that's the area that's
> currently
> > an
> > > > > obstacle for me.
> > > > >
> > > > > Function, DistributionMessage and (Client)Command classes need to
> > have
> > > > more
> > > > > context provided to them (Cache, Security, etc) or they need a
> better
> > > > > mechanism to look up these services. Currently these classes reach
> > out
> > > to
> > > > > singletons in order to "get" what they need.
> > > > >
> > > > > *A) Function*
> > > > >
> > > > > The main entry-point which injects services into the Function is:
> > > > >
> > > > > public void execute(FunctionContext<T> context);
> > > > >
> > > > > The FunctionContext needs to provide the service(s) that any
> Function
> > > > might
> > > > > require. This could include Cache, DistributionManager and maybe
> > > > > SecurityService (anything else?).
> > > > >
> > > > > *B) (Peer-to-peer) DistributionMessage*
> > > > >
> > > > > The main entry-point which injects services into the
> > > DistributionMessage
> > > > > is:
> > > > >
> > > > > protected abstract void process(DistributionManager dm);
> > > > >
> > > > > We could provide multiple arguments or a single new
> > DistributionContext
> > > > > which then provides DistributionManager and Cache (anything else?).
> > > > >
> > > > > *C) (Client) Command*
> > > > >
> > > > > The main entry-point which injects services into the Command is:
> > > > >
> > > > > public void execute(Message msg, ServerConnection servConn);
> > > > >
> > > > > ServerConnection is huge but it does already expose Cache.
> > BaseCommand
> > > is
> > > > > the only Command that implements "execute" and it defines a new
> > > > entry-point
> > > > > for injection:
> > > > >
> > > > > abstract public void cmdExecute(Message msg, ServerConnection
> > servConn,
> > > > > long start) throws IOException, ClassNotFoundException,
> > > > > InterruptedException;
> > > > >
> > > > > We might want to clean that up and define a new CommandContext
> which
> > > > > provides the Cache or anything else that the Command may need.
> > > > >
> > > > > Thoughts or additional ideas?
> > > > >
> > > >
> > >
> >
> >
> >
> > --
> > -John
> > john.blum10101 (skype)
> >
>



-- 
~/William

Reply via email to