1

我是 Java Web Start 的新手。我有一个使用 CORBA 作为中间件的示例客户端-服务器应用程序。前端(客户端)使用 Java,后端(服务器)使用 C++。该应用程序使用 jar 和批处理文件运行和测试。现在我想在 Java Web Start 和 JNLP 中部署该应用程序。我通过创建 JNLP 文件和签名的 jar 来配置相同的内容。

现在众所周知,任何 CORBA 应用程序都需要一个域文件 (.cfg) 和一些 org.omg 类来通过 RPC 与服务器通信。

我不知道如何在我的 JNLP 中指定这些域文件名、路径、CORBA 类等。即便如此,我也无法确切了解什么配置将使 CORBA 应用程序在 Java Web Start 中正常工作,以便它也可以与服务器通信。所有 Orbix 罐子、IDL Stub 罐子都存在并签名。我将我的 JNLP 文件作为参考。实际上,我已经尝试将这些域文件和 CORBA 类添加为参数。但像往常一样它不起作用,在运行 JNLP 后,Java 控制台突然消失了。

CORBADemo.jnlp

?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http://172.28.1.139:8400/Test_CORBA_App" href="CORBADemo.jnlp">
<information>
<title>CORBA Demo</title>
<vendor>Ushacomm</vendor>
</information>

<resources>
<j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"/>
<jar href="lib_6.3-Signed/UI_Fall_Test63.jar" main="true" download="eager" />
<jar href="lib_6.3-Signed/ConfigurationService.jar" download="eager" />
<jar href="lib_6.3-Signed/IDLStub.jar" download="eager" />
<jar href="lib_6.3-Signed/art-rt.jar" download="eager" />
<jar href="lib_6.3-Signed/art.jar" download="eager" />
<jar href="lib_6.3-Signed/atli2-rt.jar" download="eager" />
<jar href="lib_6.3-Signed/atli2.jar" download="eager" />
<jar href="lib_6.3-Signed/atli2_ip-rt.jar" download="eager" />
<jar href="lib_6.3-Signed/atli2_ip.jar" download="eager" />
<jar href="lib_6.3-Signed/atli2_ip_cio-rt.jar" download="eager" />
<jar href="lib_6.3-Signed/atli2_ip_cio.jar" download="eager" />
<jar href="lib_6.3-Signed/atli2_ip_nio-rt.jar" download="eager" />
<jar href="lib_6.3-Signed/atli2_ip_nio.jar" download="eager" />
<jar href="lib_6.3-Signed/atli2_tls-rt.jar" download="eager" />
<jar href="lib_6.3-Signed/atli2_tls.jar" download="eager" />
<jar href="lib_6.3-Signed/codeset.jar" download="eager" />
<jar href="lib_6.3-Signed/concurrency-rt.jar" download="eager" />
<jar href="lib_6.3-Signed/concurrency.jar" download="eager" />
<jar href="lib_6.3-Signed/ifc-rt.jar" download="eager" />
<jar href="lib_6.3-Signed/ifc.jar" download="eager" />
<jar href="lib_6.3-Signed/iiop.jar" download="eager" />
<jar href="lib_6.3-Signed/java_management_logging-rt.jar" download="eager" />
<jar href="lib_6.3-Signed/java_mgmt_plugin-rt.jar" download="eager" />
<jar href="lib_6.3-Signed/java_portable_interceptor-rt.jar" download="eager" />
<jar href="lib_6.3-Signed/management-rt.jar" download="eager" />
<jar href="lib_6.3-Signed/management.jar" download="eager" />
<jar href="lib_6.3-Signed/mgmt.jar" download="eager" />
<jar href="lib_6.3-Signed/omg-rt.jar" download="eager" />
<jar href="lib_6.3-Signed/omg.jar" download="eager" />
<jar href="lib_6.3-Signed/perf_logging.jar" download="eager" />
<jar href="lib_6.3-Signed/portable_interceptor.jar" download="eager" />
<property name="Dorg.omg.CORBA.ORBClass" value="com.iona.corba.art.artimpl.ORBImpl"/>
<property name="Dorg.omg.CORBA.ORBSingletonClass" value="com.iona.corba.art.artimpl.ORBSingleton"/>
<property name="ORBdomain_name" value="VOIAMODOMAINNEW"/>
</resources>

<application-desc name="CORBADemo Demo Application" main-class="Launch" width="300" height="300">
</application-desc>

<update check="background"/>

<argument>1</argument>

<security>
<all-permissions/>
</security>
</jnlp>

<

当我使用批处理文件从 jar 运行应用程序时,我的批处理文件看起来像这样

runJar.bat C:\jdk1.6.0_14\bin\java -Xms64M -Xmx512M -Dorg.omg.CORBA.ORBClass=com.iona.corba.art.artimpl.ORBImpl -Dorg.omg.CORBA.ORBSingletonClass=com.iona .corba.art.artimpl.ORBSingleton -jar lib_6.3\UI_Fall_Test63.jar -ORBdomain_name VOIAMODOMAINNEW 1

暂停

如您所见,批处理文件中指定了以下内容:

  1. JDK路径:( C:\jdk1.6.0_14\bin\java )
  2. 最大和最小内存的 Java VM 参数:(-Xms64M -Xmx512M)
  3. ORB 类名:( -Dorg.omg.CORBA.ORBClass=com.iona.corba.art.artimpl.ORBImpl )
  4. ORB 单例类名称:(-Dorg.omg.CORBA.ORBSingletonClass=com.iona.corba.art.artimpl.ORBSingleton)
  5. 要运行的 Jar 文件名:( -jar lib_6.3\UI_Fall_Test63.jar )
  6. 域名:(-ORBdomain_name VOIAMODOMAINNEW)
  7. 主要功能参数:(1)所有库(Orbix jar以及其他第三方库)都放在我的lib_6.3文件夹中,如您所见我在#Point5中指定的jar位置目录是lib_6.3。同样,在 web start 中,我已经通过“jarsigner”对所有 jars 进行了签名,并将它们放入 lib_6.3_Signed 中(正如您之前在我发布的 JNLP 文件中看到的那样)

索引.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>

<BODY>
<script src="http://www.java.com/js/deployJava.js"></script>
<script>
// using JavaScript to get location of JNLP file relative to HTML page
var dir = location.href.substring(0,location.href.lastIndexOf('/')+1);
var url = dir + "CORBADemo.jnlp";
deployJava.createWebStartLaunchButton(url, '1.6.0');
</script>
</BODY>
</HTML>

单击桌面中下载的启动按钮 jnlp 后。运行 jnlp 后,web 启动控制台会在特定点消失。经过调查,我发现在我的应用程序中,它在解析 CORBA 命名服务的引用之前给出了打印。就在尝试解决“NamingService”并执行此代码时,我想会出现问题。

org.omg.CORBA.Object initNCRef = i_objORB.resolve_initial_references("NameService"); -->“i_objORB”是“org.omg.CORBA.ORB”类型的对象。

在 CORBA 应用程序中,为 ORB 解析 NamingService 由我在批处理文件中指定的以下类提供便利。您可以在我以前的帖子中看到批处理文件。-Dorg.omg.CORBA.ORBClass=com.iona.corba.art.artimpl.ORBImpl

我不明白为什么控制台会消失。即使为此我在我的应用程序中打印以查看堆栈。但是控制台会在几秒钟内消失。我不明白为什么。

4

3 回答 3

2

如果您有兴趣从消失的窗口中捕获文本,您可以启用日志记录。在 Windows 中找到此文件夹:

C:\Users\{username}\AppData\LocalLow\Sun\Java\Deployment\deployment.properties

使用您喜欢的任何目录以这种格式添加这些行:

deployment.log=true
deployment.user.logdir=C\:\\tmp
于 2015-07-29T00:29:37.867 回答
0

我对 CORBA 一无所知,但在将您的 jnlp 文件与您提供的命令行进行比较时,我可以看到一些问题。

在 jnlp 文件中设置属性时,删除前导“D”。在您使用的命令行版本中

-Dorg.omg.CORBA.ORBClass=com.iona.corba.art.artimpl.ORBImpl

这实际上告诉 jvm 将系统属性“org.omg.CORBA.ORBClass”设置为“com.iona.corba.art.artimpl.ORBImpl”。所以属性的名称确实是“org.omg.CORBA.ORBClass”,这是您应该在属性标签中指定的名称:

<property name="org.omg.CORBA.ORBClass" value="com.iona.corba.art.artimpl.ORBImpl"/>

“-ORBdomain_name VOIAMODOMAINNEW 1”命令行参数未设置为系统属性,而是作为命令行参数提供给程序的主类。您应该在 application-desc 标签内的参数标签中指定它们,如下所示:

<application-desc name="CORBADemo Demo Application" main-class="Launch" width="300" height="300">
    <argument>-ORBdomain_name</argument>
    <argument>VOIAMODOMAINNEW </argument>
    <argument>1</argument>
</application-desc>

我不确定这些更改是否足以解决您的问题,但这可能是一个起点。

为了进一步诊断问题,从命令行启动 webstart 应用程序可能会有所帮助,例如

javaws http://www.yourservername.com/yourpath/CORBADemo.jnlp
于 2013-04-03T16:21:47.970 回答
0

smw 是对的,因为您输入了错误的 ORB 类和 ORBSingleton 类属性,将使用 JavaIDL 代替预期的 Orbix ORB。

<j2se initial-heap-size="..." max-heap-size="...">堆大小被设置为JNLP中标记的属性。

请注意,从 Java7u45 开始,您需要对 JNLP 文件进行签名才能使这些属性生效。

于 2014-04-28T21:19:10.733 回答