以下各节介绍了启用 HTTP 支持所需的步骤。
在 Sun Java System Web Server 或 Sun Java System Application Server 上,可以将 HTTP 隧道 Servlet 作为 Web 归档 (Web archive, WAR) 文件进行部署。
要将 HTTP 隧道 Servlet 作为 .war 文件进行部署,需要使用 Web 服务器/应用服务器提供的部署机制。 HTTP 隧道 Servlet .war 文件 (imqhttp.war ) 位于包含 .jar、 .war 和 .rar 文件的目录中,具体目录因操作系统而异(请参见附录 A, Message QueueTM 数据在特定平台上的位置)。
.war 文件包含一个部署描述符,该描述符包含 Web 服务器/应用服务器装入和运行 Servlet 时所需的基本配置信息。 根据 Web 服务器/应用服务器的不同,您可能还需要指定该 Servlet URL 的上下文根部分。
作为 Web 归档文件部署
有关在 Sun Java System Web Server 上部署的信息,请参见在 Sun Java System Web Server 上部署 HTTP 隧道 Servlet 。
有关在 Sun Java System Application Server 上部署的信息,请参见在 Sun Java System Application Server 上部署 HTTP 隧道 Servlet。
下面的说明与 Sun Java System Web Server 上的部署有关。通过使用 Web 浏览器访问 Servlet URL,可以验证 HTTP 隧道 Servlet 的部署是否成功。 它应该显示状态信息。
在基于浏览器的管理 GUI 中,选择“虚拟 Server 类”选项卡并选择“管理类”。
选择相应的虚拟服务器类名(例如, defaultClass)并单击“管理”按钮。
选择“管理虚拟服务器”。
选择相应的虚拟服务器名称并单击“管理”按钮。
选择“Web 应用程序”选项卡。
单击“部署 Web 应用程序”。
为“WAR 文件位置”和“WAR 文件路径”字段选择相应的值,以指向 imqhttp.war 文件,该文件所在的目录因操作系统而异(请参见附录 A, Message QueueTM 数据在特定平台上的位置)。
在“应用程序 URI”字段中输入路径。
“应用程序 URI”字段值为隧道 Servlet URL 的 /contextRoot 部分:
http://hostName :portNumber / contextRoot/tunnel
例如,如果将 contextRoot 设置为 imq, 则“应用程序 URI”字段为:
/imq
输入要在其中部署 Servlet 的安装目录路径(通常位于 Sun Java System Web Server 的安装根目录下)。
单击“确定”。
重新启动 Web 服务器实例。
Servlet 现在即被部署到以下位置:
http://hostName:portNumber/ contextRoot/tunnel |
客户端现在可以使用此 URL 通过 HTTP 连接来连接到消息服务。
您不必禁用服务器访问日志,但禁用服务器访问日志可以获取更佳性能。
本节说明了如何在 Sun Java System Application Server 上将 HTTP 隧道 Servlet 作为 .war 文件进行部署,然后对该隧道 Servlet 进行配置,使其接受来自 Message Queue 代理的连接。
需要执行两个步骤:
使用应用服务器部署工具部署 HTTP 隧道 Servlet。
修改应用服务器实例的 server.policy 文件。
在基于 Web 的管理 GUI 中,选择
“应用服务器”>“实例”> "server1" >“应用程序”>“Web 应用程序”。
单击“部署”按钮。
在“文件路径:”文本字段中,输入 HTTP 隧道 Servlet.war 文件 (imqhttp.war) 的位置,然后单击“确定”。
imqhttp.war 文件的位置因操作系统而异(请参见附录 A, Message QueueTM 数据在特定平台上的位置)。
设置“上下文根”文本字段的值,然后单击“确定”。
“上下文根”字段的值是隧道 Servlet URL 的 /contextRoot 部分:
http:// hostName :portNumber / contextRoot/tunnel
例如,可以将“上下文根”字段设置为 /imq。
显示的确认屏幕确认隧道 Servlet 已成功部署,在默认情况下处于启用状态,并且在本例中该 Servlet 位于以下位置:
/var/opt/SUNWappserver8/domains/domain1/server1/applications/ j2ee-modules/imqhttp_1 |
Servlet 现在即被部署到以下 URL:
http://hostName:portNumber/ contextRoot/tunnel |
客户端现在即可使用此 URL 通过 HTTP 连接来连接到消息服务。
应用服务器实施了一组默认安全策略,除非经过修改,否则它们将阻止 HTTP 隧道 Servlet 接受来自 Message Queue 代理的连接。
每个应用服务器实例都有一个包含安全策略或规则的文件。例如,server1 实例的此文件在 Solaris 上的位置为:
/var/opt/SUNWappserver8/domains/domain1/server1/config/ server.policy
要配置隧道 Servlet 以接受来自 Message Queue 代理的连接,此文件中还必须包含另一个条目。
打开 server.policy 文件。
添加以下条目:
grant codeBase "file:/var/opt/SUNWappserver8/domains/domain1/server1/ applications/j2ee-modules/imqhttp_1/-” { permission java.net.SocketPermission "*", “connect,accept,resolve"; }; |
默认情况下不为代理激活 HTTP 支持,因此您需要重新配置代理才能激活 httpjms 连接服务。重新配置后,可以按照启动代理中介绍的步骤启动代理。
打开代理的实例配置文件。
实例配置文件存储在一个目录中,该目录使用与此配置文件关联的代理实例的名称 (instanceName) 进行标识(请参见附录 A, Message QueueTM 数据在特定平台上的位置):
…/instances/ instanceName /props/config.properties
将 httpjms 值添加到 imq.service.activelist 属性中:
imq.service.activelist=jms,admin,httpjms |
启动时,代理将查找 Web 服务器/应用服务器以及在其主机上运行的 HTTP 隧道 Servlet。但是,要访问远程隧道 Servlet,可以重新配置 servletHost 和 servletPort 连接服务属性。
此外,还可以重新配置 pullPeriod 属性来改善性能。 步骤 2:配置 httpjms 连接服务详细介绍了 httpjms 连接服务配置属性。
客户端应用程序必须使用正确配置的连接工厂受管理对象来建立与代理的 HTTP 连接。 本节介绍了 HTTP 连接配置问题。
要启用 HTTP 支持,必须将连接工厂的 imqAddressList 属性设置为 HTTP 隧道 Servlet URL。 HTTP 隧道 Servlet URL 的一般语法如下:
http://hostName:portNumber /contextRoot/tunnel
其中 hostName:portNumber 是作为 HTTP 隧道 Servlet 宿主的 Web 服务器/应用服务器的名称和端口,而 contextRoot 是在该 Web 服务器/应用服务器上部署隧道 Servlet 时设置的路径。
有关连接工厂属性,特别是有关 imqAddressList 属性的详细信息,请参见 Message Queue Developer's Guide for Java Clients。
可以使用以下方法之一设置连接工厂属性:
在创建连接工厂受管理对象的 imqobjmgr 命令中使用 -o 选项(请参见添加连接工厂),或者在使用管理控制台 (imqadmin) 创建连接工厂受管理对象时设置属性。
在启动客户端的命令中使用 -D 选项(请参见 Message Queue Developer's Guide for Java Clients)。
以编程方式在客户端代码中创建连接工厂之后,使用 API 调用来设置其属性(请参见 Message Queue Developer's Guide for Java Clients)。
如果正在运行多个代理,您不必配置多个 Web 服务器/应用服务器和多个 Servlet 实例。 可以在并发运行的多个代理之间共享一个 Web 服务器/应用服务器和一个 HTTP 隧道 Servlet 实例。如果多个代理实例共享一个隧道 Servlet,则必须如下所示配置 imqAddressList 连接工厂属性:
http://hostName:portNumber /contextRoot/tunnel?ServerName= bkrHostName:instanceName
其中 bkrHostName 是代理实例主机名,instanceName 是您希望客户端访问的特定代理实例的名称。
要查看是否为 bkrHostName 和 instanceName 输入了正确的字符串,可以通过从浏览器访问 Servlet URL 来生成 HTTP 隧道 Servlet 的状态报告。 状态报告将列出 Servlet 正在访问的所有代理:
HTTP tunnel servlet ready. Servlet Start Time : Thu May 30 01:08:18 PDT 2005 Accepting TCP connections from brokers on port : 7675 Total available brokers = 2 Broker List : jpgserv:broker2 cochin:broker1 |
如果使用 HTTP 代理访问 HTTP 隧道 Servlet:
将 http.proxyHost 系统属性设置为代理服务器主机名。
将 http.proxyPort 系统属性设置为代理服务器端口号。
可以通过在启动客户端应用程序的命令中使用 -D 选项来设置这些属性。