【发布时间】:2012-07-31 15:36:05
【问题描述】:
我有一个 Java Web 应用程序,它在多个服务器上运行。此应用程序中的一些 servlet 在启动时加载以预加载一些数据。加载此数据的协议将根据应用程序部署在哪个服务器上而改变。 (要加载的文件的路径会发生变化,而且安全性也存在差异,因此获取一些文件比其他文件更复杂)。有没有一种方法可以在 java servlet 的 init 函数中唯一标识我的应用程序所在的服务器/机器?我最初正在使用HttpServletRequest.getServerName(),,这已经足够了,但它在 init 中不可用。我知道延迟初始化,所以不要告诉我这样做,如果可能的话,我会尽量避免这种情况,因为这些文件的加载时间很长。如果我能找到完美的机器名称,但我不知道如何从 api 中得到它。我所需要的只是一种从初始化中唯一识别机器的方法。
感谢您的帮助。
【问题讨论】:
-
真正的需求是基于服务器名称,还是更多基于服务器角色,您通过将名称隐式映射到角色来确定?例如,您是否需要您的测试服务器以不同于生产服务器的方式处理事情?
-
服务器名称,问题是我们服务器上的文件系统由于遗留问题而具有不同的结构。服务器 A B 和 C 都需要访问相同的通用文件集,但 prod 副本与 qa 服务器或 dev 服务器位于不同的位置。 prod 还具有测试环境所没有的安全性。如果只是安全性,我们可以基于角色来做,但文件位置不是基于角色的,所以这个应用程序也不能。
-
您说它不是基于角色的,然后您描述了我认为基于角色的内容:-) 所以也许您有两组角色,一组用于安全性,一组用于文件系统位置类型。您目前确实拥有映射到每个服务器名称的具有不同文件系统位置和不同安全约束的特定服务器列表?硬编码,还是像在属性文件中一样?我想知道的是,您是否可以使用系统属性(类似于@cjstehno 建议的)为任何特定服务器分配其“文件系统”选项和“安全”选项,而根本不必寻找特定的服务器名称。跨度>
-
我目前确实有特定服务器的列表以及特定文件系统位置的列表。它令人不快,但处理其他人的糟糕设计是我工作的 90%。 David a. 的解决方案看起来效果最好,它似乎是您和 cjstehno 所描述的 Websphere 特定实现,这不涉及我必须去管理员并要求他们以特殊方式启动服务器,只添加一些他们更可能想要做的资源。我同时与大约 20-30 个应用共享此服务器。
-
很公平。一个小想法:如果文件系统位置只是一些基本目录,请考虑使用符号链接来简化该部分。
标签: java jsp servlets websphere