EJB RMI 实现问题
EJB RMI implementation issue
RMI 规范指出:
“A method dispatched by the RMI runtime to a remote object
implementation (a server) may or may not execute in a separate thread.
Calls originating from different clients Virtual Machines will execute
in different threads. From the same client machine it is not
guaranteed that each method will run in a separate thread”
现在使用 RMI 作为核心实现的 EJB 如何处理这个问题?
例如,如果我有一个包含多个线程的网络应用程序(每个客户端 HTTP 请求一个),
他们每个人都使用相同的无状态 EJB 来发出请求,我们显然希望每个请求有一个服务器 RMI 线程,当然不喜欢在同一个线程中序列化和服务的请求。
首先,在很多web应用的实现中,Enterprise beans大多是Local的,或者是过度设计的,理应是local的。在本地访问的情况下,调用被分流,不会通过 RMI。并不是说您就是这种情况,但这是需要考虑的事情。但是请注意,您的 servlet 容器和 bean 容器是同一个容器,我认为使用远程客户端没有多大用处。
servlet 容器管理的线程与enterprise beans 容器管理的线程不同。每个人都将自行决定他们的池有多大,以及重用政策将是什么。
你不会明白的。这个措辞相当不透明,但它的神秘含义是你不能假设它在服务器上是单线程的。 RMI 没有这样的实现。来自客户端的并发调用将在服务器上同时进行。
RMI 规范指出:
“A method dispatched by the RMI runtime to a remote object implementation (a server) may or may not execute in a separate thread. Calls originating from different clients Virtual Machines will execute in different threads. From the same client machine it is not guaranteed that each method will run in a separate thread”
现在使用 RMI 作为核心实现的 EJB 如何处理这个问题?
例如,如果我有一个包含多个线程的网络应用程序(每个客户端 HTTP 请求一个),
他们每个人都使用相同的无状态 EJB 来发出请求,我们显然希望每个请求有一个服务器 RMI 线程,当然不喜欢在同一个线程中序列化和服务的请求。
首先,在很多web应用的实现中,Enterprise beans大多是Local的,或者是过度设计的,理应是local的。在本地访问的情况下,调用被分流,不会通过 RMI。并不是说您就是这种情况,但这是需要考虑的事情。但是请注意,您的 servlet 容器和 bean 容器是同一个容器,我认为使用远程客户端没有多大用处。
servlet 容器管理的线程与enterprise beans 容器管理的线程不同。每个人都将自行决定他们的池有多大,以及重用政策将是什么。
你不会明白的。这个措辞相当不透明,但它的神秘含义是你不能假设它在服务器上是单线程的。 RMI 没有这样的实现。来自客户端的并发调用将在服务器上同时进行。