jakarta-ee - EJB stub 是否保证远程 EJB 可用于任何客户端?

标签 jakarta-ee ejb corba ejb-2.x

我在远程服务器上有一个 EJB (EJB 2x)。我有一个 stub 文件,我在客户端上使用它来访问 EJB 方法。

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

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

我试图调试异常,但它发生在 CORBA 传输内部的某处,这对我的特定客户端来说是 yoko,而且我无法获得任何有意义的信息。

我的堆栈跟踪:

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)

最佳答案

我最近在一家电信公司遇到了类似的情况,但在 Weblogic 上,目前我无法为您的确切问题编写 POC。

原始问题的答案

Does having the EJB stub file guarantee a successful access to EJB methods from any server?

EJB stub 本身并不能保证任何事情。它基本上是一个实现所需接口(interface)的代理对象。它的职责是序列化和反序列化对象并使用字节流调用 RMI 服务器并尝试为您映射响应。

If there can be any limitations, what they could be?

问题可能会在很广泛的范围内出现。我最近一次遇到的是上述 Weblogic 中的内部实现更改。在身份验证期间,抛出了 NullPointerException。这一切都是因为在 Weblogic 实例中他们使用了未设置的密码,但在以前的版本中它运行良好。解决方案是在 InitialContext (Context.CREDENTIALS) 中添加一个空的 String 参数。

考虑网络开销也很重要,因为现在两台服务器位于不同的机器上等等。

在现在的大多数情况下, stub 是在运行时生成的,因此不需要静态创建它们(例如使用 rmic)。

额外的堆栈跟踪

很难说出您的问题到底是什么(应该有更多的日志可以确定),但我怀疑与我们的案例中的问题类似。包括更多来自日志的内容,并尝试向上下文添加更多属性(如果可以的话)。

关于jakarta-ee - EJB stub 是否保证远程 EJB 可用于任何客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44398019/

相关文章:

Java 异常不会抛出

java - 在 Glassfish 上监听 JNDI 的变化——如何查找 EventContext?

java - 我们可以从静态方法访问/调用无状态 session Bean 吗?

java - NetBeans EE 包括 Java EE?

java - 使用属性文件中的值填充注释参数值

java - 如何在 Java EE 中启动后台进程

rmi - RMI 和 Corba 有什么区别?

java - 如何在 DefaultMutableTreeNode (Java Swing) 中存储 CORBA 对象?

c++ - CORBA omniORB 在解析名称上下文后无法获取远程对象

java - 取消部署 Java EE 应用程序时如何停止线程?