Is it OK to use Gson instance as a static field in a model bean (reuse)?
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.
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.