If we look back at our quote manager application, we have the following layers through which a request goes:
- Servlet
- JAX-RS
- Service layer (@Transactional)
- JPA
You can add some caching (such as JCache, not HTTP, which is more a client data management solution) to all the layers. On the Servlet side, you can cache the responses using the requests as key. In JAX-RS, you can do the same, but in a more business-oriented manner. In the service layer, you can use CDI JCache integration. And in JPA, you can use level 2 caching, which can be implemented with JCache or a provider-specific implementation—this generally just requires configuration to be set up so that the API is not very crucial.
However, if you configure the caching on all layers, it is likely that a part of the cache will be useless, and since all the layers will not have access to the same information...