Mandroid
Mandroid

Reputation: 7494

Scala: Making singleton to process a client request

Is it a good practice to make use of singleton object to process client requests?

As object instance is singleton, and if its in middle of processing a client request , and meanwhile another request arrives then same instance is invoked with new client data. Won't it make things messy?

Upvotes: 1

Views: 108

Answers (2)

Mario Galic
Mario Galic

Reputation: 48420

When using singleton objects we must ensure everything inside it as well as everything it calls must be thread-safe. For example, javax.crypto.Cipher does not seem to be thread-safe, so it should probably not be called from a singleton. Consider how guice uses @Singleton to specify threadsafety intention:

@Singleton
public class InMemoryTransactionLog implements TransactionLog {
  /* everything here should be threadsafe! */
}

Also consider the example of Play Framework which starting version 2.4 began moving away from singleton controllers and started encouraging class controllers.

Upvotes: 3

Tim
Tim

Reputation: 27356

It depends on whether the object holds any mutable data or not.

If the object is just a holder for pure functions and immutable state, it does not matter how many threads are using it at the same time because they can't affect each other via shared state.

If the object has mutable state then things can definitely go wrong if you access it from multiple threads without some kind of locking, either inside the object or externally.

So it is good practice as long as there is no mutable state. It is a good way of collecting related methods under the same namespace, or for creating a global function (by defining an apply method).

Upvotes: 2

Related Questions