Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java RMI公开的JBossEJB上的并发远程调用是否序列化?_Java_Concurrency_Jboss_Ejb_Rmi - Fatal编程技术网

Java RMI公开的JBossEJB上的并发远程调用是否序列化?

Java RMI公开的JBossEJB上的并发远程调用是否序列化?,java,concurrency,jboss,ejb,rmi,Java,Concurrency,Jboss,Ejb,Rmi,这是昨天询问的同一问题的更详细版本 我有一个客户端应用程序,它通过RMI调用无状态EJB与服务器应用程序通信。正在使用以下配置参数构建初始上下文: InitialContext ctx = new InitialContext(new Hashtable<String, String>() { { this.put("java.naming.provider.url", "serverUrl:portNumber"); this.put("java.naming.

这是昨天询问的同一问题的更详细版本

我有一个客户端应用程序,它通过RMI调用无状态EJB与服务器应用程序通信。正在使用以下配置参数构建初始上下文:

InitialContext ctx = new InitialContext(new Hashtable<String, String>() {
  {
    this.put("java.naming.provider.url", "serverUrl:portNumber");
    this.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
    this.put("java.naming.factory.url", "org.jnp.interfaces.TimedSocketFactory");
  }
});
然后,客户机生成许多线程,这些线程共享同一个
ServerBean实例。每个线程时不时地调用共享bean上的远程调用


我的问题是,这些调用是以串行方式还是并行方式执行的?每个远程调用都在服务器上执行。执行一些计算并返回结果。如果所有调用都是序列化的,那么我必须限制现有线程的数量,因为它们中的许多线程可以在
ServerBean上被阻止

我认为如果您想要异步行为,使用MDB/MDP是您想要的方式。

调用至少会被服务器端的容器阻止。但是要注意,几乎所有的应用程序服务器都有线程池来限制请求的数量,因此无状态bean池大小为1000,服务器线程池大小为100对您没有什么好处——您的无状态bean池永远不会超过100

因此,需要检查的是:

  • 是否有客户端连接池及其大小
  • 是否有服务器端线程池及其大小
  • 如果没有客户端连接池,并且所有线程都共享同一个连接,那么您将受到很大的限制,除非在客户端/服务器之间使用NIO


    如果目标是并行处理,我将使用EJB3.1@Asynchronous方法支持,它支持@Remote调用。这将为您提供最多的并发性和最可移植性,而无需担心限制您自己的使用。

    听起来像是一个可以测试的场景:-)。启动JMeter(或编写一个小型客户端应用程序),看看会发生什么!
    ServerBean bean = (ServerBean) ctx.lookup("ejb/ServerBeanImpl");