在我的项目中,我有2个模块,一个ejb和一个war模块。在war模块中,我有一个属性文件,在我启动Web应用程序时(由监听器)处理。对于此属性文件中的每个属性,我将其添加到servlet上下文中。 所以,我的问题是:是否可以在servlet上下文中从ejb模块中的企业java bean访问这些属性?我想做这样的事情,但是在ejb:
ServletContext sc = myservlet.getServletContext();
String xpto = sc.getAttribute("my-attr");
如果不可能,有什么替代方案? 谢谢!
P.S我正在使用netbeans和glassfish。
答案 0 :(得分:1)
ServletContext始终在Servlet生命周期加载中加载。参考 this link。如您所见,在应用程序启动时加载ServletContext后会加载监听器。您可以在扩展ServletContextListener的侦听器类中使用您的代码。确保您正在扩展正确的侦听器,如链接中所示。
在您的情况下,其中一种方法是让Singleton类从属性文件中加载所有属性。 for ex:ApplicationPropertiesLoader类可以有一个Properties map属性来存储该属性文件的键值对。该类可以有一个getProperty方法,该方法始终引用其内部属性。
在你的servlet类中,引用这个singleton类来根据需要加载属性。
答案 1 :(得分:1)
说到替代方案,使用存储在数据库中的配置可能值得考虑,至少如果您的应用程序中已经有数据库连接并且可以控制数据库模式。
我们在所有的Web应用程序中都使用这种技术,主要有两个原因:
为了实现它,您将创建一个应用程序范围的组件,该组件访问应用程序其余部分的数据库属性。