* Use an Infinispan cache to maintain pending puts, which avoids
the need to control it's memory consumption in the critical path
of putFromLoad.
* This cache is shared by all regions, and it's configured with
aggressive expiration settings to avoid piling up pending put
operations.
* Added a 2LC stress test that tests behaivour and performance
of 2LC under multiple situations, such as entity inserts, updates,
find via PK, find via query and deletes.
* Some other minor performance enhancements, such as avoiding
classloader aware cache wrapper if using 2LC locally.
* Remove cache adapter to reduce construction of useless objects.
* Cache flagged caches in order to avoid recomputing decorated
caches all the time, which reduces memory consumption.
* Skip locking for timestamp updates and separate timestamp region
implementations for local vs clustered scenarios.
By doing this, discovery of nodes is not timed and instead is done
in-memory which is much more reliable from a testing perspective.
Due to timing issues, some tests would randomly fail because the
cluster did not form in time, so changing to this JGroups stack for
testing solves random test failures due to invalidation messages
not being sent around.
* Switch to autoCommit=false so that unnecessary transactions
are not created.
* Mark timestamps cache explicitly non-transactional.
* Move away from using caches as a way to send evict all
notifications. Instead, use custom commands provided by Infinispan.
* Get rid of the JDBC transaction test because it does not make
sense configuring JDBC transactions with Infinispan 2LC.
* Made the configuration file explicitly define optimistic as locking
mode.
* Make sure a transaction manager that hooks to Hibernate's TM
is configured.
* Query and timestamp caches now use cluster cache loader instead of
state transfer in order to remain asynchronous.
* To maintain previous semantics, after query or timestamp regions have
been completely evicted, a check has been added to avoid going remote if
the region was invalid.