在java web应用程序*享公共文本文件

问题描述:

我目前正在研究一个在服务器端进行繁重计算的Java web应用程序。我正在尝试创建一个类似于Google地图的地图系统。在java web应用程序*享公共文本文件

客户端通过Java Servlets向服务器发送查询。对于每个实例,都会创建一个巨大的多维地图数组变量。我认为这在服务器计算机的速度和RAM使用方面可能是低效的。

那么是否有可能所有实例共享对内存中的相同变量的访问权限,以便同一个变量不会一遍又一遍地被创建?

map数组变量是一个巨大的文本文件,当前每个请求都重新打开文本文件。

我正在考虑使用全局常量变量,但我也希望这个共享变量在运行时可以修改,以便服务器不必为了更改数组数据而重新启动/重新编译。这可能吗?

1)创建辛格尔顿EJB之间共享ServletContext中。使用javax.ejb.Startup注释您的EJB,以便在服务器启动时,您的bean也启动。在EJB init方法中填充您的变量。任何Web组件都可以访问该单例EJB。 Singleton EJB确保无论如何只存在1个副本。除非出现错误,否则Singleton EJB不会被容器停止。

2)如果您无法实现EJB,请创建一个实现ServletContextListener的类。所以当ServletContext初始化ServletContextListener类会得到回调,你设置你的变量。

+0

谢谢你详细解释! ServletContextListener的init正是我所期待的!我不熟悉singleton EJB和注解,所以我会在其他时间尝试这些。但是,感谢您提供多种解决方案! – 2013-05-02 06:00:35

+0

不用担心队友,欢呼! – 2013-05-02 06:13:47

使用静态变量来共享所有实例,但确保您是否做任何更新来同步这些更新。 或 可将变量存储在其中的所有客户端

+1

静态变量?在哪? – 2013-05-02 04:12:52

+0

谢谢你的帮助。我完全忘记了静态变量的独特性。 – 2013-05-02 06:03:07