我认为最通用的方法是定义一个简单的环境条目,如EE.5.4 Java™ Platform, Enterprise Edition (Java EE) Specification, v5的简单环境条目部分所述。
从部分(第 68 页):
简单的环境条目是用于自定义应用程序组件的业务逻辑的配置参数。环境条目值可以是以下 Java 类型之一:String、Character、Byte、Short、Integer、Long、Boolean、Double 和 Float。
您还可以使用规范的EE.5.6.1.4 标准资源管理器连接工厂类型部分中描述的 URL 连接工厂。
Application Component Provider 必须使用 java.net.URL 资源管理器连接工厂类型来获取 URL 连接。
两者都需要在WEB-INF/web.xml
Web 应用程序的部署描述符中定义资源引用,以便您可以使用@Resource
或使用 JNDI APIjava:comp/env
作为入口点来注入值。
好处是您可以更改 Web 应用程序的配置,而无需重新编译代码,还可以使用管理员习惯使用的应用程序服务器的管理工具来更改它。
在web.xml
您定义资源引用。
<resource-ref>
<res-ref-name>propertiesURL</res-ref-name>
<res-type>java.net.URL</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
<resource-ref>
<res-ref-name>propertiesPath</res-ref-name>
<res-type>java.lang.String</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
然后在您的代码中,您使用以下内容来访问这些值:
@Resource
String propertiesPath;
@Resource
URL propertiesURL;
这样,您就满足了 Java EE 的要求,您可以使用propertiesPath
或propertiesURL
将它们作为输入参数传递给您的方法。
现在,是时候满足 WebSphere Application Server 的期望了。
您定义的是需要映射到其管理名称的逻辑名称(应用程序服务器知道并可以提供给应用程序)。
在 WebSphere Application Server 中,您使用WEB-INF/ibm-web-bnd.xml
具有以下配置的 WebSphere Binding 描述符:
<?xml version="1.0" encoding="UTF-8"?>
<web-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-bnd_1_1.xsd"
version="1.1">
<virtual-host name="default_host" />
<resource-ref name="propertyURL" binding-name="propertyURL" />
<resource-ref name="propertyURL" binding-name="propertyURL" />
</web-bnd>
当应用程序被部署时,WAS 允许您将这些映射映射到其管理的资源。使用 ISC 控制台定义环境条目的值并将它们映射到应用程序。
使用 WebSphere Liberty Profile 变得更加容易。我在文章Using @Resource to access JNDI in WebSphere AS 8.5 Liberty Profile 中描述了 WLP 提供的机制。