我有一个简单的问题:我想根据对象是否在servlet容器中实例化,或者是否在独立应用程序中实例化来不同地配置对象.
该对象是数据库连接,我关心设置查询超时.
我能想出的第一个解决方案是:
if (insideServletContainer(this.getClass().getClassLoader()) {
/// do some servlet specific config
}
else {
/// do some standalone config
}
Run Code Online (Sandbox Code Playgroud)
当然,问题是我是否可以编写一个可靠的方法来判断该类是否已在servlet容器中加载.它充其量只是一种黑客行为.
第二种选择是假设默认情况是独立实例化,基于独立配置设置默认值,并在servlet上下文中覆盖它们.
所以,总结一下我的问题是:如果从servlet容器中加载了类,你知道一个好的/可靠的机制吗?如果没有,我将采取第二条路线.
缺口
不管这是不是一个好主意,我建议查找java:comp/env,它只能在EE服务器中使用:
try {
new InitialContext().lookup("java:comp/env");
/// do some servlet specific config
} catch (NamingException ex) {
/// do some standalone config
}
Run Code Online (Sandbox Code Playgroud)