我正在开发一个Java Web应用程序,它通过从Web服务加载的大型XML配置文件来实现它的行为.由于在访问应用程序的特定部分之前实际上不需要这些文件,因此它们会被懒惰地加载.当需要其中一个文件时,会向Web服务发送查询以检索相应的文件.由于某些配置文件可能会被大量使用,更经常比别人我想建立某种形式的缓存(有可能1个小时的过期时间),以避免一遍又一遍请求相同的文件.
对于所有会话中的所有用户,Web服务返回的文件都是相同的.我不使用JSP,JSF或任何其他花哨的框架,只是简单的servlet.
我的问题是,在Java Web应用程序中实现这样一个全局静态缓存的最佳实践是什么?单例类是否合适,或者由于J2EE容器会有奇怪的行为吗?我应该通过JNDI在某处暴露某些东西吗?我该怎么做才能使我的缓存不会在集群环境中搞砸(每个集群服务器有一个缓存可以,但不是必需的)?
鉴于上面的信息,将一个负责缓存的对象作为ServletContext属性是否是正确的实现?
注意:我不想在启动时加载所有这些并完成它因为那样
1).每当我的应用程序启动时重载webservice
2).我的应用程序运行时文件可能会更改,所以无论如何我都要重新查询它们
3).我仍然需要一个全局可访问的缓存,所以我的问题仍然存在
更新:使用缓存代理(例如squid)可能是一个好主意,但是对webservice的每个请求都会在post Data中发送相当大的XML查询,每次都可能不同.只有Web应用程序才真正知道对Web服务的两个不同调用实际上是等效的.
谢谢你的帮助