【发布时间】:2009-08-31 19:08:38
【问题描述】:
我们正在开发基于 Java EE 的应用程序。我们的应用程序与 Java 1.5 兼容,并将部署到带有 EBJ 3.0 和 Web 服务功能包的 WAS ND 6.1.0.21。目前的配置是一个单元有两个集群。每个集群将有两个节点。
我们的应用程序,或者说我们的系统,我应该说,分为两三个部分。
第 1 部分:部署到包含第 3 方供应商代码和自定义代码的集群的耳朵。他们的代码符合 EJB 2.0,并且有很多 Remote Home 接口。
第 2 部分:将耳朵部署到与第一只耳朵相同的集群中。该耳朵包含调用供应商提供的 EJB 2 和自定义代码的 EBJ 3。这些 EJB 3 被同样与 EAR 打包的 JSF UI 使用,其中一些还公开为其他客户端的 Web 服务(符合 SOAP 1.2 的 JAX-WS 2.0)。
第 3 部分:可能有其他服务不依赖于我们的供应商/自定义代码应用程序。这些服务将是 EJB 3.0 和部署到其他集群的 Web 服务。
根据现场一些 IBM 员工的建议,集群中节点之间的通信可以是 EJB RMI。但如果我们要跨越集群和/或其他单元,那么通信应该是 Web 服务。
也就是说,我们中的一些人想知道性能和优化通信以提高我们将使用我们的 Web 服务和 EJB 的应用程序的速度。现在大多数 EJB 都暴露为远程。 (我们的供应商就是这样设置的,而不是公开本地家庭接口)。我们想知道 WAS 是否在同一节点/集群节点空间中的应用程序之间进行任何优化。如果两个应用安装在同一个区域,并且它们通过远程 home 接口相互调用,WAS 是否足够聪明,可以使其成为本地 home 接口调用?
他们还有其他优化技术吗?我们应该考虑他们吗?我们不应该吗?成本/收益是什么?以下是我们的一位团队成员在他们的电子邮件中发送的问题:
问题是:假设我们将 EJB 开发为远程 EJB,其中我们的 UI 控制器代码通过 EJB3 与我们的 EXT java 服务通信...当 EJB 服务器和客户端都在其中运行时,我们有哪些性能优化选项同一个容器?
作为一个参考点,google 给了我一些 2000 年的非常古老的 websphere 性能调整文档,其中解释了一种调整配置,当它们在同一个应用程序服务器 JVM 中时,您可以设置为启用 EJB 通信的引用调用。它声明如下:
因为 EJB 本质上是独立于位置的,所以它们使用远程编程 模型。方法参数和返回值通过 RMI-IIOP 序列化并返回 按价值。这是内在的 RMI “按价值调用”模型。
WebSphere 为运行 EJB 提供“无本地副本”性能优化 和客户端(通常是 servlet)在同一个应用服务器 JVM 中。 “没有本地 副本”选项使用“通过引用调用”并且不会为被调用创建本地代理 当客户端和远程对象都在同一个进程中时的对象。取决于 在您的工作量上,这可以显着节省开销。
通过添加以下两个命令行参数来配置“无本地副本” 应用服务器 JVM:
* -Djavax.rmi.CORBA.UtilClass=com.ibm.CORBA.iiop.Util
* -Dcom.ibm.CORBA.iiop.noLocalCopies=true
注意:“无本地副本”配置选项通过以下方式提高性能 将同一 JVM 中的客户端和 EJB 的“按值调用”更改为“按引用调用”。 这样做的一个副作用是 Java 对象派生(非原始)方法参数 实际上可以由被调用的企业 bean 更改。考虑图 16a:
此外,我们还将在未来使用 Process Server 6.2 和 WESB 6.2。有任何想法吗?推荐?
谢谢
【问题讨论】:
-
我认为这个设置(启用引用调用)仅适用于 EJB 远程接口,不适用于 EJB 本地接口。
标签: optimization ejb websphere