Pergunta

Estou tentando implantar um aplicativo que use o nativo Implementação de Tibrv através do Tibrvj biblioteca usando Java Webstart.

Eu empacotei todas as janelas DLLS de dentro c:\tibco\tibrv\bin em um arquivo jar e os adicionou ao nativelib elemento no Jnlp Arquivo.

Eu esperava que o webstart levasse o dll arquivos dotibco-7.5.1-nativelibs.jar arquivar e permita que eles sejam carregados via System.loadLibrary que é chamado de Tibrv.open(). No entanto, não parece querer funcionar corretamente.

Meu Jnlp O arquivo se parece com o seguinte:

<?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> 

O aplicativo é lançado, mas assim que uma chamada é feita para abrir o TIB, ele desmorona com um erro ao longo das linhas de:

  • Exceção raiz é tibRvexception [error = 22, mensagem = versão incompatível: libbibibrv versão 7.4 não corresponde à versão da biblioteca compartilhada TIBRVJ 7.5]

  • Tibrvexception [erro = 901, mensagem = biblioteca não encontrada: tibrvj]

Os usuários têm um variedade das instalações do TIB já em seus PCs de TIB 7.2 a 7.5. O aplicativo Webstart funciona apenas corretamente em uma máquina com 7.5 instalada, que corresponde ao arquivo JAR dentro do pacote. Portanto, não parece fazer nada com o frasco do nativeLib.

Gostaria de evitar a necessidade de implantar três versões do aplicativo Start Web para as diferentes versões do TIB que os usuários instalaram.

Alguém mais conseguiu obter essa combinação de Tibrvj e Webstart trabalhando?

Foi útil?

Solução

Consegui fazer isso funcionar. O problema é que o chamado para System.loadLibrary Ao usar Webstart Não carrega as dependências da biblioteca especificada, mesmo que tenham sido embaladas em um frasco de nativeLib.

Ver http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6191612 para mais informações.

Para contornar esse problema, é necessário explicar carregar todas as dependências na ordem correta. Também é necessário colocar cada biblioteca DLL em seu próprio arquivo JAR.

Então, para usar o TIBRVJ nativo, você precisa fazer as seguintes chamadas antes de qualquer chamada para Tibrv.Open.

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

Dias felizes!

Outras dicas

Eu acho que você encontrou um problema com o Webstart.

Alguns anos atrás, eu tinha um aplicativo Webstart usando o Java 3D que não funcionou no MACS. Eventualmente, descobri que todos os Macs alguns com uma versão antiga do Java 3D instalados e que a versão já instalada foi usada na versão mais recente que eu incluí no arquivo JNLP. Seu problema parece quase exatamente assim, por isso poderia muito bem ser o mesmo problema.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top