1

我们有一个最近从 jdk 1.7.21 更新到 jdk 1.7.25 的 java 应用程序,没有更改任何源,但在 Windows server 2003 上遇到了运行时异常。我们使用 10 年前提供的 OpenORB 1.2(不再受支持)第三方图书馆。这是跟踪打印:

org.omg.CORBA.INITIALIZE: Unable to create CDROutputStream class  vmcid: 0x0  minor code: 0  completed: No
               at org.openorb.iiop.CDRCodec.encode_value(CDRCodec.java:147)
               at org.openorb.iiop.IIOPServerProtocol.create_profile(IIOPServerProtocol.java:258)
               at org.openorb.net.ServerManagerImpl.construct_ior(ServerManagerImpl.java:697)
               at org.openorb.adapter.poa.POA.create_reference(POA.java:1602)
               at org.openorb.adapter.poa.RootPOA$DomainManagerPOA.create_reference(RootPOA.java:162)
               at org.openorb.adapter.poa.POA.create_reference_with_id(POA.java:1397)
               at org.openorb.adapter.poa.RootPOA.create_poa_domain_manager(RootPOA.java:135)
               at org.openorb.adapter.poa.POA.get_domain_managers(POA.java:848)
               at org.openorb.adapter.poa.POA.create_reference(POA.java:1593)
               at org.openorb.adapter.poa.POA.create_reference_with_id(POA.java:1397)
               at org.openorb.adapter.poa.DelegateImpl.this_object(DelegateImpl.java:121)
               at org.omg.PortableServer.Servant._this_object(Servant.java:79)
               at org.omg.PortableServer.Servant._this_object(Servant.java:98)
               at DPEM.src.presentation.adaptation.adaptationIfc.SessionAdapterPOA._this(SessionAdapterPOA.java:18)
               at DPEM.src.presentation.adaptation.SessionAdapterImpl.<init>(SessionAdapterImpl.java:91)
               at DPEM.src.presentation.adaptation.SessionAdapterImpl.instance(SessionAdapterImpl.java:164)
               at DPEM.src.presentation.adaptation.AdapterFactory.getAdapter(AdapterFactory.java:166)
               at DPEM.src.presentation.adaptation.AdapterFactory.getAdapter(AdapterFactory.java:121)
               at DPEM.src.presentation.dialogControl.DialogController.createAdapterReferences(DialogController.java:320)
               at DPEM.src.presentation.dialogControl.DialogController.<init>(DialogController.java:112)
               at DPEM.src.presentation.dialogControl.PresentationFactory.getDialogController(PresentationFactory.java:470)
               at DPEM.src.presentation.dialogControl.ThreadedClient.run(ThreadedClient.java:136)

我无法进一步锻炼,我正在寻求 java/CORBA 专业知识的建议。

非常感谢您!

4

2 回答 2

1

似乎与OpenORB相关的不兼容错误由来已久(请参阅此处此处此处)。

这次罪魁祸首可能是JRE 7u22 中引入的这个安全修复。

由于您使用的是遗留库(最后一次更新是在 2005 年)作为遗留技术,我将降级生产 JDK(作为一种解决方法)并进一步调查究竟是哪里出了问题......

找到它后,也许有一个简单的解决方法,无需更改库...如果没有,您有两个选择:

  • 完全放弃 CORBA(如果可以的话,这可能是最好的方法......虽然我知道这将是一项艰巨的任务,而且您的公司可能不愿意为此花钱,但如果他们希望这个软件能够生存到这十年的结束,现在是做点什么的时候了)
  • 查看更活跃的 CORBA 库,例如JacORB(它可以让您以最少的开发工作量运行,但在您能够发布生产版本之前需要进行大量测试)
于 2013-10-15T13:18:36.147 回答
0

我不知道为什么仅查看您提供的堆栈跟踪就无法在 1.7.25 上运行。然而,我看了一眼 1.7.25 的更改日志,一个可能的问题是 Windows 平台上 Runtime.exec 行为的更改。

可能的解决方法:

在 JDK 7u25 中,系统属性 jdk.lang.Process.allowAmbigousCommands 可用于放松检查过程,并有助于作为某些无法更改的应用程序的解决方法。该变通方法仅对在没有 SecurityManager 的情况下运行的应用程序有效。

也看看:

https://blogs.oracle.com/thejavatutorials/entry/changes_to_runtime_exec_problems http://www.oracle.com/technetwork/java/javase/7u25-relnotes-1955741.html

这只是猜测,但我希望它能帮助您解决问题。

于 2013-10-15T12:42:24.527 回答