代码之家  ›  专栏  ›  技术社区  ›  Boris Pavlović

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

  •  2
  • Boris Pavlović  · 技术社区  · 14 年前

    question 昨天问。

    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) ctx.lookup("ejb/ServerBeanImpl");
    

    然后,客户端生成许多共享 ServerBean

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

    2 回复  |  直到 7 年前
        1
  •  1
  •   David Blevins    14 年前

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

    所以要检查的是:

    1. 是否有客户端连接池及其大小?
    2. 有服务器端线程池吗?它的大小是多少?

    如果目标是并行处理,我将使用EJB 3.1@Asynchronous方法支持,它支持@Remote调用。这将为您提供最可移植的并发性,而不必担心限制您自己的使用。

        2
  •  0
  •   Martijn Verburg    14 年前

    我认为如果您想要异步行为,那么使用MDBs/MDPs就是您想要的方式。