通过间接查找来使用连接工厂

在编写企业应用程序时,如果连接工厂的 JNDI 名称未知,或者如果要使用不同的连接工厂将应用程序安装到不同的应用程序服务器上,并且使用不同的 JNDI 名称 (取决于它安装到哪个应用程序服务器上) ,那么可以使用资源引用来查找连接工厂。 可以通过间接查找来执行此操作。

示例

企业应用程序包含具有本地 JNDI 名称 jms/myResourceReferenceCF的资源引用,而不是使用 jms/myCF直接查找连接工厂。

要使用此 JNDI 名称,应用程序将以与应用程序执行直接查找相同的方式连接到应用程序服务器的 JNDI 存储库:
InitialContext ctx = new InitialContext(); 
现在,应用程序将标识资源引用的 JNDI 名称,而不是直接标识 jms/myCF :
ConnectionFactory cf = (ConnectionFactory) ctx.lookup("java:comp/env/jms/myResourceReferenceCF"); 
您需要本地 JNDI 名称的 java:comp/env 前缀,以告知应用程序服务器企业应用程序正在执行间接查找。

部署应用程序时,用户将 JNDI 资源引用的名称 jms/myResourceReferenceCF 映射到应用程序已创建的连接工厂的 JNDI 名称: jms/myCF

运行应用程序时,它将使用应用程序服务器映射到的本地 JNDI 名称来查找 JMS 连接工厂: jms/myCF。 然后,应用程序使用此连接工厂来创建与 IBM® MQ的连接。

认证别名和间接查找

资源引用还允许定义其他属性来改变所提供的连接工厂的行为。 资源引用的属性之一是 res-auth。 此属性的值指定企业应用程序是否应该使用在创建与 IBM MQ 的连接时(如果已定义认证别名)或在应用程序指定自己的用户名和密码时资源引用映射到的连接工厂的认证别名。

此属性的缺省值为 Application。 这意味着在创建 JMS 连接时,流向队列管理器的用户名和密码由应用程序本身确定。 将不使用资源引用所映射到的连接工厂的认证别名。

应用程序可以使用下列其中一种方法来创建 JMS 连接:
  • ConnectionFactory.createConnection()
  • ConnectionFactory.createConnection(String username, String password)

如果应用程序使用 ConnectionFactory.createConnection(),并且 res-auth 设置为 应用程序,那么缺省用户身份将向下流至 IBM MQ。 这是用于启动企业应用程序运行所在的应用程序服务器的用户名和密码。

如果应用程序使用 ConnectionFactory.createConnection(String username, String password),并且 res-auth 设置为 应用程序,那么传递到方法的用户名和密码将向下发送到 IBM MQ

要在创建连接时使用资源引用所映射到的连接工厂上定义的认证别名,您需要将 res-auth 属性设置为 Container。 当应用程序创建 JMS 连接时,将使用认证别名详细信息,即使 createConnection 调用指定了用户名和密码也是如此。

使用间接查找时覆盖认证别名

如果应用程序使用将 res-auth 属性设置为 Container的资源引用,那么您可以覆盖创建 JMS 连接时使用的认证别名。

要覆盖认证别名,资源引用需要包含一个称为 authDataAlias 的额外属性,该属性会映射到在其中部署应用程序的应用程序服务器环境中已创建的现有认证别名。 您可以对使用 IBM提供的 Rational® 工具创建的任何资源引用指定此属性。

使用此方法,可以在使用已间接查找的 JMS 连接工厂时使用其他认证别名。 如果指定的认证别名不存在,那么可以在安装企业应用程序之后指定新的认证别名。 有关更多信息,请参阅 WebSphere® Application Server 产品文档中的 资源引用