2009-09-09 18 views
6

sto cercando di distribuire un'applicazione che utilizza il nativo attuazione Tibrv attraverso il biblioteca TibrvJ utilizzando Java Web Start.Java Web Start con Tibco nativi Libs

ho confezionato su tutte le finestre DLL dall'interno c:\tibco\tibrv\bin in un file JAR e hanno aggiunto questi all'elemento nativelib nel file di JNLP.

Speravo che webstart avrebbe preso il dll file dal file tibco-7.5.1-nativelibs.jar e consentire loro di essere caricati tramite System.loadLibrary che viene chiamato da Tibrv.open(). Tuttavia non sembra voler funzionare correttamente.

mio JNLP di file è simile al seguente:

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

Viene avviata l'applicazione, ma non appena viene effettuata una chiamata per aprire TIB poi cade a pezzi con un errore lungo le linee di:

  • [Root exception è TibrvException [errore = 22, messaggio = Versione non corrispondente: libtibrv versione 7.4 non corrisponde alla versione di libreria condivisa di tibrvj 7.5]]

  • TibrvException [errore = 901, message = Biblioteca non trovato: tibrvj]]

Gli utenti hanno una varietà di Tib installazioni già sul proprio PC da Tib 7.2 fino alla 7.5. L'applicazione Webstart funziona correttamente solo su una macchina con 7.5 installato che corrisponde al file Jar all'interno del pacchetto. Quindi non sembra fare nulla con il vaso nativelib.

Vorrei evitare di dover distribuire 3 versioni dell'applicazione Web Start per le diverse versioni di Tib installate dagli utenti.

Qualcun altro è riuscito a ottenere questa combinazione di TibrvJ e Webstart di lavoro?

risposta

8

Sono riuscito a farlo funzionare. Il problema è che la chiamata a System.loadLibrary quando si utilizza Webstart non viene caricata nelle dipendenze della libreria specificata anche se sono stati impacchettati in un contenitore nativelib.

Vedere http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6191612 per ulteriori informazioni.

Per ovviare a questo problema è necessario caricare in modo esplicito tutte le dipendenze nell'ordine corretto. È inoltre necessario inserire ciascuna libreria DLL nel proprio file jar.

Quindi per utilizzare TibrvJ nativo è necessario effettuare le seguenti chiamate prima di qualsiasi chiamata a Tibrv.Open.

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

Happy Days!

0

Penso che tu abbia riscontrato un problema con Webstart.

Alcuni anni fa, avevo un'applicazione Webstart che utilizzava Java 3D che non funzionava con i Mac. Alla fine ho scoperto che tutti i Mac con una vecchia versione di Java 3D sono stati installati e che la versione già installata è stata utilizzata sulla versione più recente che avevo incluso nel mio file JNLP. Il tuo problema sembra quasi esattamente così, quindi potrebbe benissimo essere lo stesso problema.

+0

Hai risolto il problema? – pjp