[英]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上調用遠程調用。
我的問題是,這些調用是以串行還是並行方式執行的? 每個遠程調用都在服務器上執行。 執行一些計算並返回結果。 如果所有調用都被序列化了,那么我將必須限制現有線程的數目,因為許多線程可以在ServerBean
上ServerBean
。
調用至少會被服務器端的容器阻止。 但是請注意,幾乎所有應用服務器都具有線程池來限制請求數,因此,將無狀態Bean池大小設為1000,將服務器線程池的大小設為100會對您有好處,因為無狀態Bean池永遠不會超過100。
因此要檢查的事情是:
如果沒有客戶端連接池,並且所有線程共享相同的連接,那么除非在客戶端/服務器之間使用NIO,否則您將受到很大的限制。
如果目標是只是並行執行操作,那么我將使用EJB 3.1 @Asynchronous方法支持,該支持確實支持@Remote調用。 這樣一來,您便可以最大程度地並發使用最大的並發性,而不必擔心限制您自己的使用。
我想使用MDB / MDP是您想要異步行為的方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.