【问题标题】:ejb2.x caching remote interface @ client sideejb2.x 缓存远程接口@客户端
【发布时间】:2013-07-07 01:50:49
【问题描述】:

在有点旧的应用程序中,BizDelegateServiceLocator 用作客户端模式。出于某种原因,BizDelegate 被缓存了。 意味着,Home 和 Remote 接口被缓存并在大约 100 个线程之间共享。 BizDelegate 中的方法也不同步。

我们遇到了几个问题。

  1. 写入套接字时客户端出现线程问题?(因为单个对象试图在线程之间共享)
  2. 当你进行部署时,总是需要重启客户端?(因为存储了远程接口和部署不同的参考)。 我们在服务器端确实有服务器 EJB 池大小 500 ejb 对象实例。

这是否意味着我们只使用home.create() 时创建的一个 EJB 实例?它是一种单身人士吗? 我们使用 IBM Websphere AppServer 7V。

旧版本使用相同的代码。

我们可以在日志中看到的异常。

0000003a ThreadMonitor W WSVR0605W:线程“WebContainer : 76”(0000010f) 已活动 618203 毫秒,可能已挂起。服务器中总共有 1 个线程可能被挂起。

at com.ibm.rmi.util.buffer.SimpleByteBuffer.flushTo(SimpleByteBuffer.java:174)
   at com.ibm.rmi.iiop.IIOPOutputStream.writeTo(IIOPOutputStream.java:541)
   at com.ibm.rmi.iiop.Connection.write(Connection.java:2213)
at com.ibm.rmi.iiop.Connection.sendFragment(Connection.java:2438)
at com.ibm.rmi.iiop.IIOPOutputStream.sendFragment(IIOPOutputStream.java:202)
at com.ibm.rmi.iiop.CDRWriter.completeFragment(CDRWriter.java:659)
at com.ibm.rmi.iiop.CDROutputStream.alignAndReserve(CDROutputStream.java:276)
at com.ibm.rmi.iiop.CDROutputStream.writeOctetArrayPiece(CDROutputStream.java:694)
at com.ibm.rmi.iiop.CDROutputStream.write_octet_array(CDROutputStream.java:670)
at com.ibm.rmi.iiop.CDROutputStream.write_octet_array(CDROutputStream.java:664)
at com.ibm.rmi.iiop.ClientRequestImpl.write_octet_array(ClientRequestImpl.java:734)
at com.ibm.rmi.ServiceContext.write(ServiceContext.java:121)
at com.ibm.rmi.iiop.RequestMessage.write(RequestMessage.java:449)
at com.ibm.rmi.iiop.ClientRequestImpl.<init>(ClientRequestImpl.java:188)
at com.ibm.rmi.iiop.GIOPImpl.createRequest(GIOPImpl.java:185)
at com.ibm.rmi.corba.ClientDelegate._createRequest_WLM(ClientDelegate.java:1874)
at com.ibm.rmi.corba.ClientDelegate.createRequest(ClientDelegate.java:1061)
at com.ibm.rmi.corba.ClientDelegate.createRequest(ClientDelegate.java:1143)
at com.ibm.CORBA.iiop.ClientDelegate.createRequest(ClientDelegate.java:1259)
at com.ibm.rmi.corba.ClientDelegate.createRequest(ClientDelegate.java:1042)
at com.ibm.CORBA.iiop.ClientDelegate.createRequest(ClientDelegate.java:1225)
at com.ibm.rmi.corba.ClientDelegate.request(ClientDelegate.java:1685)
at com.ibm.CORBA.iiop.ClientDelegate.request(ClientDelegate.java:1181)
at org.omg.CORBA.portable.ObjectImpl._request(ObjectImpl.java:458)

另一个

WebContainer : 37" daemon prio=3 tid=0x00000001050d9000 nid=0xe6 runnable [0xfffffffe3aff7000]
   java.lang.Thread.State: RUNNABLE
  at java.net.SocketOutputStream.socketWrite0(Native Method)
  at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
  at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
  at com.ibm.jsse2.d.a(d.java:66)
  at com.ibm.jsse2.d.a(d.java:108)
  at com.ibm.jsse2.SSLSocketImpl.b(SSLSocketImpl.java:337)
  at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:594)
  at com.ibm.jsse2.k.write(k.java:18)
  - locked <0xfffffffe9ca84e08> (a com.ibm.jsse2.k)
  at com.ibm.rmi.util.buffer.SimpleByteBuffer.flushTo(SimpleByteBuffer.java:152)
  - locked <0xfffffffe9ca84e08> (a com.ibm.jsse2.k)

【问题讨论】:

    标签: caching websphere


    【解决方案1】:

    没有这样的“ejb 2.4”。你是说 EJB 2.1 吗?

    多个客户端线程写入同一个套接字没有线程问题。排除错误,ORB 将在同一个套接字连接上多路复用调用并为您管理同步。 (您没有提及您使用的是哪个版本的 WebSphere Application Server。)

    在 WebSphere Application Server 中,只要您使用相同的应用程序名称、模块 URI 和 EJB 名称,客户端对 bean 的引用将在部署过程中保持有效。如果您更改其中任何一项(例如,因为您在应用程序名称或模块 URI 中包含并更改了版本号),则客户端将需要在重新部署后刷新/重新启动。您可以在远程调用周围添加 try/catch(NoSuchObjectException) 并添加逻辑以自动刷新。

    【讨论】:

    • IBM WAS V7。相同的代码在 WAS 5、5.1、6 和 6.1 中运行良好。有人知道修复补丁吗?
    • 感谢您的回答。是的,它是 EJB2.x。现在它在重负载下的 IBM WAS V7 中失败了。相同的代码在具有相似负载的 WAS 6 和 6.1 中运行良好。可能会少一些(它最初是为 IBM WAS 5.x 编写的。我认为它是 EJB1.x)。有人知道 IBM 的修复补丁吗?同样,HomeInterface 和 Remoteinterface 对象是否应该由供应商同步(根据 EJB 规范)?代码不会显式执行。2 个或更多线程正在等待套接字写入(它来自堆分析)?
    • 我再说一遍:你看到了什么具体的错误?除非您显示具体的故障,否则我无法提供任何帮助(包括 IBM APAR)。是的,应用程序服务器必须为 EJB 提供同步。如果多个线程正在写入一个套接字,它们必须写入不同的套接字(假设没有缺陷,但我不知道有任何缺陷)。
    • 添加了带有问题的异常详细信息。
    • 查看服务器的线程转储以确定它为什么不读取请求可能会很有趣。也许它用完了线程(我已经看到这会导致问题)?好吧,如果您能够轻松地复制它,最好与 IBM 一起打开 PMR;它看起来不像是由错误的应用程序或简单的配置错误引起的。
    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    • 2010-10-18
    • 1970-01-01
    • 2011-05-17
    • 2022-07-20
    • 2020-07-04
    相关资源
    最近更新 更多