EJB RMI实现问题

时间:2015-07-08 18:21:45

标签: java multithreading rmi

RMI规范声明:

  

“由RMI运行时调度到远程对象的方法   实现(服务器)可能会也可能不会在单独的线程中执行。   来自不同客户端的呼叫将执行虚拟机   在不同的线程。从同一台客户机上它不是   保证每个方法都在一个单独的线程中运行“

现在,EJB如何使用RMI作为核心实现来处理这个问题?

例如,如果我有一个包含许多线程的Web应用程序(每个客户端HTTP请求一个), 他们每个人使用相同的无状态EJB来发出请求,我们显然希望每个请求都有一个服务器RMI线程,当然不喜欢在同一个线程中被序列化和提供的请求。

2 个答案:

答案 0 :(得分:0)

首先,在Web应用程序的许多实现中,Enterprise Bean主要是本地的,或过度设计的,并且应该是本地的。在本地访问的情况下,呼叫被分流,并且不会通过RMI。不是说你的情况就是这样,但需要考虑的事情。但是注意到你的servlet容器和bean容器是同一个,我认为使用远程客户端并没有多大用处。

由servlet容器管理的线程和由企业bean容器管理的线程是不同的。每个人都会自己决定他们的游戏池有多大,以及将会采用什么样的重用策略。

答案 1 :(得分:0)

你不会得到那个。这个措辞非常不透明,但其神秘的含义是你不能假设它在服务器上是单线程的。 RMI没有这样的实现。来自客户端的并发呼叫将在服务器上同时进行。