簡體   English   中英

RMI公開的jBoss EJB上的並發遠程調用是否已序列化?

[英]Are concurrent remote invocations on an RMI exposed jBoss EJB serialized?

這是昨天提出的同一問題的更詳細的版本。

我有一個客戶端應用程序,該客戶端應用程序通過對無狀態EJB的RMI調用與服務器應用程序進行通信。 初始上下文是使用以下配置參數構建的:

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同一實例。 每個線程現在都會在共享bean上調用遠程調用。

我的問題是,這些調用是以串行還是並行方式執行的? 每個遠程調用都在服務器上執行。 執行一些計算並返回結果。 如果所有調用都被序列化了,那么我將必須限制現有線程的數目,因為許多線程可以在ServerBeanServerBean

調用至少會被服務器端的容器阻止。 但是請注意,幾乎所有應用服務器都具有線程池來限制請求數,因此,將無狀態Bean池大小設為1000,將服務器線程池的大小設為100會對您有好處,因為無狀態Bean池永遠不會超過100。

因此要檢查的事情是:

  1. 是否有一個客戶端連接池,它的大小是多少?
  2. 有服務器端線程池,它的大小是多少?

如果沒有客戶端連接池,並且所有線程共享相同的連接,那么除非在客戶端/服務器之間使用NIO,否則您將受到很大的限制。

如果目標是只是並行執行操作,那么我將使用EJB 3.1 @Asynchronous方法支持,該支持確實支持@Remote調用。 這樣一來,您便可以最大程度地並發使用最大的並發性,而不必擔心限制您自己的使用。

我想使用MDB / MDP是您想要異步行為的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM