2009-08-31 138 views
2

我们正在开发基于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。有任何想法吗?建议?

感谢

+0

我觉得这个设置(启用呼叫通过引用)仅适用于不为EJB本地接口EJB远程接口。 – 2011-12-22 16:12:07

回答

2

唯一的自动优化,可以真正为远程EJB做的是,如果他们在同一位置(在同一个JVM中访问)。在这种情况下,如果请求需要通过线路,ORB会将本来需要的一些工作短路。仍然会有一些必要的ORB开销,包括对象序列化(除非你打开noLocalCopies,带来所有注意事项)。另外,如果你知道UI控制器是共位的,你的方法调用不依赖于参数或返回值复制,并且你的接口不依赖于本地和远程视图之间的异常差异,那么你可以创建并公开一个本地子接口,比通过ORB进行远程访问要快得多。

相关问题