Correct, that would be the definition.

Yet, we find that our use of singletons within Geode is limiting to say that least. With the idea of wanting to be able to create/run multiple cache instance within the same JVM (especially for testing) a singleton will be problematic.

In addition to that, the alternative is not that hard to construct and in many cases easier to manage.

--Udo


On 4/3/17 08:57, Jinmei Liao wrote:
Isn't "that instance is reused each invocation" my understanding of a
"singleton"?

On Mon, Apr 3, 2017 at 11:49 AM, Udo Kohlmeyer <ukohlme...@pivotal.io>
wrote:

-1 For using singletons

Using a Factory pattern you can avoid having to create singletons in
addition to caching created commands to avoid the recreation of the
instance.

The SSLConfigurationFactory is a simple example where you create an
instance when required. Once an instance is created, that instance is
reused each invocation.

--Udo



On 4/3/17 08:30, Jinmei Liao wrote:

I think the client commands needs to be singleton instances even after you
change the sequence of initialization. We don't want to have each client
operation ends up creating a new command instance, right? That would be a
more performance drag.

On Thu, Mar 30, 2017 at 2:14 PM, Kirk Lund <kl...@apache.org> wrote:

PS: I'll be writing and using JMH benchmarks to drive these changes. I'll
also create new unit tests for each of these classes that don't currently
have unit tests.

On Thu, Mar 30, 2017 at 10:58 AM, Kirk Lund <kl...@apache.org> wrote:

The client Commands now check with SecurityService even when security is
not configured. This has introduced a negative performance impact.

The best way to fix something like this is to tell the Command instance
when it's being constructed that is does or does not need to perform
security checks.

Unfortunately, Commands are all implemented as singletons which are very
eagerly instantiated during class loading of CommandInitializer (who
thought that was a good idea?!).

In order to fix this performance problem, I would need to get rid of

these

problematic static initializer blocks that so eagerly construct the
Commands so that I can put off constructing them until AFTER the Cache
is
initializing and specifically AFTER the Cache has determined if it is

using

security or not.

This means I'm going to have to do some refactoring of

CommandInitializer,

the Command classes, ServerConnection, AcceptorImpl, etc.

Any other approach is going to have such minimal impact on performance
that I'm not even interested in doing less than this.

  From a very high level, I would change the code so that the Cache owns

the

Server which owns the Command instances. In this way, the configuring of
use of security can trickle down from Cache to each Command. I would
primarily be altering static singletons, static initializers and adding
constructors.

Does anyone have a problem with me changing the above classes and
especially getting rid of the static initializers and singleton

instances?





Reply via email to