Is it OK to use Gson instance as a static field in a model bean (reuse)?
According to the comments the existing unit test does not really test much, be careful with anything related to thread safety...
There is a unit test checking for thread safety:
/**
* Tests for ensuring Gson thread-safety.
*
* @author Inderjeet Singh
* @author Joel Leitch
*/
public class ConcurrencyTest extends TestCase {
private Gson gson;
...
You may wonder if this unit test is sufficient to find every possible problem on every possible machine configuration ? Any comments on this ?
There is also this sentence in the docs:
The Gson instance does not maintain any state while invoking Json operations. So, you are free to reuse the same object for multiple Json serialization and deserialization operations.
It seems just fine to me. There is nothing in the GSON instance that makes it related to a specific instance of LoginSession
, so it should be static.
GSON instances should be thread-safe, and there was a bug regarding that which was fixed.
The core Gson
class is thread-safe. I just encountered a thread-safety issue that was supposedly with GSON. The issue happened when using a custom JsonDeserializer
and JsonSerializer
for Date
parsing and formatting. As it turned out, the thread-safety issue was with my method's use of a static SimpleDateFormat
instance which is not thread-safe. Once I wrapped the static SimpleDateFormat
in a ThreadLocal
instance, everything worked out fine.