2017-06-06 95 views
3

我在远程服务器上有一个EJB(EJB 2x)。我有一个存根文件,我使用我的客户端来访问EJB方法。EJB存根是否保证远程EJB能够为任何客户端工作?

我的客户端在另一台主机上运行。它曾经在与它调用的EJB完全相同的服务器下运行。但是现在我已经将客户端部署到不同供应商的服务器,并调用EJB方法现在引发了CORBA异常。

是否具有EJB存根文件保证从任何服务器EJB方法成功的访问?如果可以有任何限制,他们可能是什么?

我试着调试例外,但它的CORBA运输这是我的特定客户洋子内某处发生了,我没能得到任何有意义的信息。

堆栈跟踪我:

org.omg.CORBA.portable.UnknownException: originalEx: org.omg.CORBA.MARSHAL: encountered null wchar in wstring: vmcid: Apache minor code: 0x15 completed: No: vmcid: 0x0 minor code: 0x0 completed: Maybe 
    at org.apache.yoko.rmi.impl.ValueDescriptor.readSerializable(ValueDescriptor.java:747) 
    at org.apache.yoko.rmi.impl.ValueDescriptor.readValue(ValueDescriptor.java:726) 
    at org.apache.yoko.rmi.impl.ValueDescriptor.readValue(ValueDescriptor.java:584) 
    at org.apache.yoko.rmi.impl.ValueHandlerImpl.readValue0(ValueHandlerImpl.java:114) 
+0

这可能是不同的ORB,客户端和服务器的ORB您使用它们之间的问题吗? –

+0

@JohnnyWillemsen我的EJB2运行在WebSphere完全配置文件上,我试图从WebSphere Liberty调用它的方法 –

+0

不知道会发生什么,没有关于CORBA异常的详细信息以及某些日志输出可能没有人可以帮助您。 –

回答

1

我最近遇到了在电信公司类似这样的情况,但在WebLogic和此刻的我不是你确切的问题能够写POC。

回答原来的问题

是否具有EJB存根文件保证从任何服务器EJB方法成功的访问?

的EJB存根本身并不是什么保证。它基本上是一个实现所需接口的代理对象。它的职责是序列化和反序列化对象,并用字节流调用RMI服务器,并尝试为您映射响应。

如果可以有任何的限制,它们可能是什么?在各种可能出现

问题。我遇到的最近一次是在所提到的Weblogic中进行的内部实现更改。在身份验证过程中,引发了一个NullPointerException。所有这些都是因为在Weblogic实例中他们使用了未设置的密码,但是在之前的版本中它运行良好。解决方法是在InitialContextContext.CREDENTIALS)中添加一个空的String参数。

而且要考虑网络开销,因为两个服务器在不同的机器等等。现在重要的是

在大多数时下存根在运行时所产生的情况下,所以没有必要静态创建这些(例如与rmic)。

附加堆栈跟踪

这是很难准确的告诉你的问题可能是(应该有很多更多的日志来确定)是什么,但我怀疑有类似的问题,因为它是在我们的例子。如果可以尝试这些,请在日志中包含更多内容并尝试向上下文添加更多属性。