Multi-tier architectures help make complex enterprise applications manageable and scalable. Yet, as the variety of servers and tiers boosts, so does the communication among them, which can degrade overall application performance. In the majority of the web applications, data is retrieved from the database. The database operation is costly and time consuming. Contemporary web applications are data intensive and first response time is the standard criteria for success. If the web application is frequently accessing the database for each request then its performance will certainly be slow. In Enterprise application we can cache items by object caching.It permits applications to share items throughout requests and users, and collaborates the objects’ life cycles throughout processes. We can do web caching. Web cache sits between several Web servers (also known as origin servers) and a client or many customers, and watches requests dropped by, conserving copies of the responses– like HTML pages, images and files (collectively referred to as representations)– for itself. If there is another request for the exact same URL, it can use the response that it has, instead of asking the origin server for it once more.
Required for caching in enterprise application
Using caching technology at strategic points across the multi-tier model can help in reducing the variety of back-and-forth interactions. Furthermore, although cache repositories require memory and CPU resources, using caches can nevertheless result in total performance gains by lowering the number of expensive operations (such as database accesses and Web page executions). However, ensuring that caches retain fresh content and invalidate stagnant data is a difficulty, and keeping several caches in sync, in clustered environments, ares more so. In object caching by keeping frequently accessed or expensive-to-create objects in memory, object caching gets rid of the have to consistently develop and load data. It avoids the costly reacquisition of items by not releasing the items immediately after their use and instead, the objects are saved in memory and recycled for any subsequent customer demands. Web cache is made use of to lower latency. It takes less time for it to obtain the representation and display it. It reduces load on the website servers and reduces bandwidth needs and cost. It benefits the user, the service provider and the website owner.
Features of java caching frameworks
There are numerous Open Source Caching Frameworks for Java such as JBoss Cache, OSCache, Java Caching System and EhCache. The downsides of using direct methods such as Java Hash map, Hash table and JNDI are overcome by these frameworks.
JBoss Cache is a product developed to cache frequently accessed Java objects in order to drastically enhance the performance of e-business applications. By removing unneeded database access, JBoss Cache decreases network traffic and increases the scalability of applications. But JBoss Cache is a lot more than a simple cache. JBoss Cache offers totally transactional features as well as an extremely configurable set of options to handle concurrent data access in the most efficient way possible for your application. In addition, it is a clustered cache that duplicates contents to other cache instances running on different JVMs, servers or even whole networks, making JBoss Cache an extremely efficient library made use of by application server developers to carry out clustering features.
OSCache is an extensively made use of, high performance J2EE caching framework. In addition to its servlet-specific features, OSCache can be utilized as a generic caching solution for any Java application. A few of its generic features include:
- Caching of Arbitrary Objects– You are not limited to caching parts of JSP pages or HTTP demands. Any Java object can be cached.
- Comprehensive API– The OSCache API offers you full programmatic control over all OSCache features.
- Persistent Caching– The cache can additionally be disk-based, thereby enabling expensive-to-create data to stay cached even throughout application restarts.
- Clustering– Support for clustering of cached data can be made it possible for with a single configuration parameter. No code modifications required.
- Expiry of Cache Entries– You have a big amount of control over how cached objects end, including pluggable Refresh Policies if the default capability does not satisfy your requirements.
JCS is a dispersed caching system written in java for server-side java applications. It is planned to speed up dynamic web applications by offering a method to manage cached data of various dynamic natures. Like any caching system, the JCS is most useful for high read, low put applications. Dynamic content and reporting systems can benefit a lot of. Nevertheless, any site that repeatedly constructs pages, dropdowns, or common search engine result form a database that is updated at periods (rather than throughout classifications constantly) can enhance performance and scalability by implementing caching. Latency times drop dramatically and traffic jams move away from the database in an effectively cached system.
EhCache is a pure Java, in-process cache with the following features: Fast, Simple, Acts as a pluggable cache for Hibernate 2.1., with Small foot print, Minimal dependencies, completely documented and production checked.
Important comparison of different java caching frameworks
JBOSS cache: It support LRU, LFU, MRU, Expiration, Element Size and FIFO. JBoss cache does not support presentation layer i.e. JSP and HTTP Response caching. JBoss cache provides an easy and straightforward API where data can be positioned in a cache. It does the cache in memory which provides an efficient thread safe retrieval. In JBoss cache when the garbage man runs when memory runs low it copes the cached content to disk so that the memory is not lost. It supports dispersed cache. It can be either local or reproduced cache. When a change is made to an object in the cache which change is done on the context of the transaction, the replication of change is deferred until the transaction finishes effectively. When the deal dedicates the modifications are replicated. On a roll back the modifications are simply discarded. JBoss cache supports sharing of object in the very same JVM. When used in a clustered mode this is an efficient mechanism of constructing high accessibility, fault tolerance as well as load balancing. It is scalable but is very little scalable as compared with other. According to the ease of use, maintainability and extensibility it is not that easy to use but it has rich features. It is not JCache certified i.e. it does not support JSR-107 standard.
OSCache support LRU and FIFO, and any other custom replacement algorithm. It supplies support for caching the discussion layer. It includes JSTL and set f classes to perform JSP caching and servlet responses. It can control the cache flushing. OSCache enables to cache a part of Jsp pages, arbitrary java items and even whole servlet responses. It offers in memory and disk cache. It supports distributed caching. It also supports sharing of items in very same JVM. When using both disk and memory caching it is possible to restrict the cache size to prevent using too much memory. When the cache items are gotten rid of from the memory, they still inhabit space on the disk. This provides the fault tolerance if the server crashes. It is extremely scalable. OSCache is easy to use as well as simple for maintainability and it is completely even driven. It follows JCache– JSR107 standard. As per performance is thought about OSCache is really slower than JBoss cache if we compare with the PUT and Get demands.
JCS: JCS support LRU and MRU. It has no support for HTTPResponse caching or Jsp caching. It is a cache that supports caching data in memory or in a disk of a remote server using RMI. It is mainly suitable for caching data on data access layer. It supports sharing of object in same JVM. It supplies a framework without any point of failure, allowing for full session failover in clustered environments. It is highly scalable. It provides a api for accessing a cache from java class. In JCS the cache location can be in memory, indexed disk space, remote cache or in lateral cache. JCS supports JCache. As performance is worried the performance of JCS is better than the OSCache but JBoss cache is much better than the three.
EhCache: EhCache support LRU, LFU and FIFO. EhCache can store up to 100G of data to disk and access them in a quick way. It provides SimplePageCachingFilter for caching static pages. It also gzips the HTTPResponse to the browser and the browser unzips the response and shows it to the customer. For vibrant pages like JSP EhCache provides SimplePageFragmentCachingFilter to cache the fixed part in the JSP. It does not supply any JSTL like OSCache for page fragment cache and page fragment cache is view agnostic. It is flexible, extensible, and high carrying out dispersed caching. The default implementation support cache discovery via multicast or manual setup. Updates are provided either asynchronously or synchronously via custom RMI connections. Extra discovery and shipment schemes can be plugged in by 3rd parties. It also permits you to distribute the cache either using RMI, JGroups, JMS or Terracotta. It comes with a cache server and is offered as a WAR for many web containers or as a standalone servers. It supports REST and SOAP API. It also supports sharing of items in the exact same JVM. When the server is down it can serve from the cache. EhCache supplies extremely basic and easy API for accessing its cache from Java class. EhCache 1.2 supply CacheManagerEventListener and CacheEventListener user interfaces. Executions can be plugged in in ehcache.xml. It supplies the user its own application to load data into cache. It is the most full implementation on JCache i.e. JSR 107. Relating to performance in PUT requests EhCache is much better than JBoss Cache however in Get demand JBoss cache is better than the EhCache. In Get request JBoss cache is fastest of all and then is the JCS, EhCache follows and at last is the OSCache. Input demands EhCache is fastest of all. Then comes the JBoss cache and after that is the JCS and OSCache is slowest among these.
Applications where each framework is most proper
JBoss Cache: It can be made use of in a standalone, non-clustered environment, to cache regularly accessed data in memory consequently removing data retrieval or calculation traffic jams while offering “enterprise” functions such as JTA compatibility, expulsion and persistence. JBoss Cache is also a clustered cache, and can be utilized in a cluster to reproduce state supplying a high degree of failover. JBoss Cache can– and frequently is– made use of beyond JBoss AS, in other Java EE environments such as spring, Tomcat, Glassfish, BEA WebLogic, IBM WebSphere, as well as in standalone Java programs. JBoss Cache works out of the box with many popular deal supervisors, as well as offers an API where custom transaction manager lookups can be written.
OSCache: It can be made use of to cache both fixed and vibrant websites. OSCache is also used by numerous jobs Jofti, spring, Hibernate. OSCache is also made use of by many sites like The Server Side, JRoller, and Java Lobby.
JCS: It is used in java for server-side java applications. It is meant to speed up vibrant web applications by providing a method to handle cached data of numerous vibrant natures. Like any caching system, the JCS is most beneficial for high read, low put applications.
EhCache: It is used for basic purpose caching, J2EE and light-weight containers tuned for large size cache objects. EhCache Acts as a pluggable cache for Hibernate 2.1. With Small foot print, Minimal dependencies, completely recorded and Production checked. It is used in a lot of Java frameworks such as Alfresco, Cocoon, Hibernate, and spring, JPOX, Jofti, Acegi, Kosmos, Tudu Lists and Lutece. EhCache is the default cache for Hibernate with EhCache you can serialize both Serializable objects and Non-serializable. Non-serializable Objects can use all parts of EhCache except for Disk Store and replication.
Conclusion
This essay focuses only on few Open Source caching frameworks of Java. But there are much more caching frameworks in Open Source caching frameworks of java like Whirlycache, Cache4j, ShiftOne SwarmCache and so on. Similarly there are other licensed caching frameworks too like Spirit Cache, Coherence, Object Cache, Object Caching Service for Java by Oracle and much more. There could be faster and easier caching frameworks than the one it is discussed in this essay. Among Jboss Cache, OSCache, JCS and EhCache. EhCache is the very best followed by the JbossCache and JCS. OSCache is the poorest amongst the 4.