I used ehcache for RAM/DISK based caching and this worked fine. The exact configuration to determine how many object to keep in memory and how many to keep on disk can be done outside the code without any code changes. There is not a lot to say, it is a cache and it works just fine.
I used it to store wafermaps to avoid to get them from remote database. I sized the diskcache in such a way as to be able to keep several months of production near the appserver resulting in significant time savings, especially when some urgent rework must be done.