2010-09-14 11 views
6

Je souhaite configurer mon application webstart/jnlp afin que, si aucune connexion Internet n'est disponible, elle démarre à partir du cache. Néanmoins, lorsque je me déconnecte d'Internet, j'obtiens toujours une exception NoRouteToHostException ou UnknownHostException, malgré la configuration ci-dessous.Java Webstart ne fonctionne pas hors ligne (NoRouteToHostException/UnknownHostException)

J'ai défini correctement les tags/attributs de mise à jour et de mise à jour hors ligne correctement; Je ne peux pas trouver la raison pour laquelle webstart essaie toujours de chercher l'hôte. J'ai certainement l'application en cache de mon précédent démarrage quand j'étais connecté.

<?xml version="1.0" encoding="UTF-8"?> 
<jnlp spec="6.0+" codebase="http://cms.mydomain.com/sync/" href="myAppSync.jnlp"> 

<information> 
    <title>My App Sync</title> 
    <vendor>My Company</vendor> 
    <homepage href="http://www.myapp.com/"/> 
    <description>Sync application for My App</description> 
    <icon href="ATTico.png"/>   

    <!-- allow app to run without Internet access --> 
    <offline-allowed/> 

    <shortcut online="true">   
     <desktop/> 
     <!-- create menu item for this app under the major heading 'My App' --> 
     <menu submenu="My App"/> 
    </shortcut> 

</information> 

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

<update check="timeout" policy="always" /> 

<resources> 
    <java version="1.6*" href="http://java.sun.com/products/autodl/j2se"/> 
    <jar href="lib/myAppSync.jar" /> 
    <jar href="lib/apache-mime4j-0.6.jar" /> 
    <jar href="lib/commons-logging-1.1.1.jar" /> 
    <jar href="lib/commons-codec-1.3.jar" /> 
    <jar href="lib/httpclient-4.0.1.jar" /> 
    <jar href="lib/httpcore-4.0.1.jar" /> 
    <jar href="lib/httpmime-4.0.1.jar" /> 
    <jar href="lib/swingx-1.6.jar" /> 
    <jar href="lib/swingx-beaninfo-1.6.jar" />   
</resources> 

<application-desc main-class="com.myapp.sync.forms.Main"/> 

</jnlp> 

journal d'erreur:

java.net.NoRouteToHostException: No route to host: connect 
at java.net.PlainSocketImpl.socketConnect(Native Method) 
at java.net.PlainSocketImpl.doConnect(Unknown Source) 
at java.net.PlainSocketImpl.connectToAddress(Unknown Source) 
at java.net.PlainSocketImpl.connect(Unknown Source) 
at java.net.SocksSocketImpl.connect(Unknown Source) 
at java.net.Socket.connect(Unknown Source) 
at java.net.Socket.connect(Unknown Source) 
at sun.net.NetworkClient.doConnect(Unknown Source) 
at sun.net.www.http.HttpClient.openServer(Unknown Source) 
at sun.net.www.http.HttpClient.openServer(Unknown Source) 
at sun.net.www.http.HttpClient.<init>(Unknown Source) 
at sun.net.www.http.HttpClient.New(Unknown Source) 
at sun.net.www.http.HttpClient.New(Unknown Source) 
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source) 
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source) 
at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source) 
at com.sun.deploy.net.BasicHttpRequest.doRequest(Unknown Source) 
at com.sun.deploy.net.BasicHttpRequest.doGetRequestEX(Unknown Source) 
at com.sun.deploy.net.DownloadEngine.isUpdateAvailable(Unknown Source) 
at com.sun.deploy.net.DownloadEngine.isUpdateAvailable(Unknown Source) 
at com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(Unknown Source) 
at com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(Unknown Source) 
at com.sun.deploy.net.DownloadEngine.getResource(Unknown Source) 
at com.sun.javaws.LaunchDownload.downloadJarFiles(Unknown Source) 
at com.sun.javaws.LaunchDownload.downloadEagerorAll(Unknown Source) 
at com.sun.javaws.Launcher.downloadResources(Unknown Source) 
at com.sun.javaws.Launcher.prepareLaunchFile(Unknown Source) 
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source) 
at com.sun.javaws.Launcher.launch(Unknown Source) 
at com.sun.javaws.Main.launchApp(Unknown Source) 
at com.sun.javaws.Main.continueInSecureThread(Unknown Source) 
at com.sun.javaws.Main$1.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 



java.net.UnknownHostException: cms.mydomain.com 
at java.net.PlainSocketImpl.connect(Unknown Source) 
at java.net.SocksSocketImpl.connect(Unknown Source) 
at java.net.Socket.connect(Unknown Source) 
at java.net.Socket.connect(Unknown Source) 
at sun.net.NetworkClient.doConnect(Unknown Source) 
at sun.net.www.http.HttpClient.openServer(Unknown Source) 
at sun.net.www.http.HttpClient.openServer(Unknown Source) 
at sun.net.www.http.HttpClient.<init>(Unknown Source) 
at sun.net.www.http.HttpClient.New(Unknown Source) 
at sun.net.www.http.HttpClient.New(Unknown Source) 
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source) 
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source) 
at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source) 
at com.sun.deploy.net.BasicHttpRequest.doRequest(Unknown Source) 
at com.sun.deploy.net.BasicHttpRequest.doGetRequestEX(Unknown Source) 
at com.sun.deploy.net.DownloadEngine.isUpdateAvailable(Unknown Source) 
at com.sun.deploy.net.DownloadEngine.isUpdateAvailable(Unknown Source) 
at com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(Unknown Source) 
at com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(Unknown Source) 
at com.sun.deploy.net.DownloadEngine.getResource(Unknown Source) 
at com.sun.javaws.LaunchDownload.downloadJarFiles(Unknown Source) 
at com.sun.javaws.LaunchDownload.downloadEagerorAll(Unknown Source) 
at com.sun.javaws.Launcher.downloadResources(Unknown Source) 
at com.sun.javaws.Launcher.prepareLaunchFile(Unknown Source) 
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source) 
at com.sun.javaws.Launcher.launch(Unknown Source) 
at com.sun.javaws.Main.launchApp(Unknown Source) 
at com.sun.javaws.Main.continueInSecureThread(Unknown Source) 
at com.sun.javaws.Main$1.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 

Répondre

2

J'ai trouvé une solution en appelant javaws de ligne de commande avec le paramètre -offline, mais je trouve que bizarre que cela est nécessaire, se demandant pourquoi le système ne peut pas détecte automatiquement que je suis déconnecté et donc expire sur la vérification et démarre l'application à partir du cache, comme défini dans mon jnlp.

javaws -offline myApp.jnlp 
0

Ceci peut être réalisé en utilisant <update check="background"/>, mais les mises à jour ne sont plus téléchargées immédiatement lorsqu'elles sont disponibles, il faut un second départ qui est gênant. Cela ressemble vraiment à un bug Java Web Start, <update check="timeout"/> ne devrait pas empêcher le démarrage de l'application si la connexion au serveur arrive à expiration.