我们正在开发基于Java EE的应用程序。我们的应用程序与Java 1.5兼容,并将通过EBJ 3.0和Web Services功能包部署到WAS ND 6.1.0.21。该配置目前是一个包含两个群集的单元。每个群集将有两个节点。WebSphere Application Server EJB优化
我应该说,我们的应用程序或我们的系统有两到三个部分。
第1部分:将耳朵部署到一个集群,其中包含第三方供应商代码以及自定义代码。他们的代码符合EJB 2.0,并且有很多远程主页接口。
第2部分:将耳朵部署到与第一只耳朵相同的群集。这个耳朵包含EBJ 3,可以调用供应商提供的EJB 2和自定义代码。这些EJB 3被JSF UI使用,也与EAR一起打包,其中一些也作为Web服务(符合SOAP 1.2的JAX-WS 2.0)公开给其他客户端。
第3部分:可能有其他服务不依赖于我们的供应商/自定义代码应用程序。这些服务将是部署到其他集群的EJB 3.0和Web服务。
根据现场某些IBM员工的建议,集群中节点之间的通信可以是EJB RMI。但是,如果我们正在穿越群集和/或其他单元,那么通信应该是Web服务。这就是说,我们中的一些人想知道性能和优化通信的速度,我们的应用程序将使用我们的Web服务和EJB。现在大多数EJB都是以远程方式公开的。 (并且我们的供应商设置他们的方式,而不是也暴露本地家庭接口)。我们想知道WAS是否在同一节点/集群节点空间中的应用程序之间进行任何优化。如果两个应用安装在同一个区域,并通过远程家庭接口互相呼叫,是否足够聪明,使其成为本地家庭接口呼叫?
他们的其他优化技术?我们应该考虑他们吗?我们不应该?什么是成本/收益?以下是我们的团队成员之一通过电子邮件发送的问题:
问题是:假设我们将EJB作为远程EJB开发,其中我们的UI控制器代码正在通过EJB3与我们的EXT Java服务交谈。当EJB服务器和客户端在同一个容器中运行时,我们对性能优化有什么选择?
作为一个参考点,谷歌给了我一些从2000年开始的websphere性能调优文档,它解释了一个调优配置,您可以设置这些调优配置,以在EJB通信处于同一个应用服务器JVM时启用Call By Reference。它规定以下内容:
因为EJB本身独立于位置,所以它们使用远程编程模型 。方法参数和返回值通过RMI-IIOP序列化并按值返回 。这是内在的RMI“Call By Value”模型。
WebSphere为在同一应用程序服务器JVM中运行EJB 和客户端(通常为servlet)提供了“No Local Copies”性能优化。 “本地 副本”选项使用“呼叫参考”,并且当客户端和远程对象都处于同一进程中时,不会为所调用的对象 创建本地代理。根据您的工作量,这取决于 ,这可以节省大量开支。
配置“无本地复制”通过将以下两个命令行参数 应用服务器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远程接口。 – 2011-12-22 16:12:07