【问题标题】:Java Webstart with Tibco Native Libs使用 Tibco 原生库的 Java Webstart
【发布时间】:2010-11-26 19:55:33
【问题描述】:

我正在尝试通过 TibrvJ 库使用 Java Webstart 部署一个使用 Tibrv 本机 实现的应用程序。

我已将 c:\tibco\tibrv\bin 内部的所有 Windows dll 打包到一个 Jar 文件中,并将它们添加到 JNLP 文件中的 nativelib 元素中。

我希望 webstart 会从tibco-7.5.1-nativelibs.jar 文件中获取 dll 文件,并允许它们通过从Tibrv.open() 调用的System.loadLibrary 加载。但是它似乎并不想正常工作。

我的 JNLP 文件如下所示:

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE jnlp PUBLIC "-//Sun Microsystems, Inc//DTD JNLP Descriptor 6.0//EN" "http://java.sun.com/dtd/JNLP-6.0.dtd">
<jnlp spec="6.0+"
 codebase="http://somewhere:8080/my-gui/application"
 href="launch.jnlp">
 <information>
  <title>My GUI</title>
  <vendor>Technology</vendor>
  <description>Dashboard</description>
  <description kind="short">Dashboard</description>
  <icon href="icon/Stocks-128x128.png" />
  <offline-allowed />
  <shortcut online="true">
   <desktop />
   <menu submenu="Dashboard" />
  </shortcut>
 </information>
 <security>
  <all-permissions />
 </security>
 <update check="always" policy="prompt-update" />
 <resources>
  <j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"
   java-vm-args="-Xmx120M -ea />
  <property name="log4j.configuration" value="live/log4j.xml" />
  <property name="swing.aatext" value="true" />

  <jar href="tibrvj-7.5.1.jar" />
  <jar href="dashboard-gui.jar" main="true" />
 </resources>
 <resources>
  <nativelib href="nativelib/tibco-7.5.1-nativelibs.jar" />
 </resources>
 <application-desc main-class="com.somewhere.Main">
  <argument>classpath:/live/client.xml</argument>
  <argument>/live/live.properties</argument>
 </application-desc>
</jnlp> 

应用程序启动,但一旦调用 open tib,它就会崩溃,并出现如下错误:

  • [根异常是 TibrvException[error=22,message=Version mismatch:libtibrv 7.4 版与 tibrvj 共享库 7.5 版不匹配]]

  • TibrvException[error=901,message=找不到库:tibrvj]]

用户已经在他们的 PC 上安装了从 Tib 7.2 到 7.5 的各种。 Webstart 应用程序只能在安装了 7.5 且与包内的 Jar 文件匹配的机器上正常工作。所以它似乎对 nativelib jar 没有任何作用。

我想避免为用户安装的不同版本的 Tib 部署 3 个版本的 web start 应用程序。

还有其他人设法让 TibrvJWebstart 的这种组合工作吗?

【问题讨论】:

    标签: java-web-start jnlp tibco


    【解决方案1】:

    我已经设法让它工作了。问题是使用 Webstart 时对System.loadLibrary 的调用不会加载到指定库的依赖项中,即使它们已打包到 nativelib jar 中。

    请参阅http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6191612 了解更多信息。

    要解决这个问题,有必要以正确的顺序显式加载所有依赖项。还需要把每个dll库放到自己的jar文件中。

    因此,要使用原生 TibrvJ,您需要在调用 Tibrv.Open 之前进行以下调用。

        System.loadLibrary("msvcr71");
        System.loadLibrary("tibrv");
        System.loadLibrary("tibrvcm");
        System.loadLibrary("tibrvft");
        System.loadLibrary("tibrvcmq");
        System.loadLibrary("tibrvj");
    

    快乐的日子!

    【讨论】:

      【解决方案2】:

      我认为您在使用 Webstart 时遇到了问题。

      几年前,我有一个使用 Java 3D 的 Webstart 应用程序在 Mac 上无法运行。最终,我发现所有 Mac 都安装了旧版本的 Java 3D,并且已经安装的版本被用于我包含在 JNLP 文件中的较新版本。您的问题听起来几乎完全一样,所以很可能是同一个问题。

      【讨论】:

        猜你喜欢
        • 2021-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-06
        • 1970-01-01
        相关资源
        最近更新 更多