Reputation: 28665
I want to configure my webstart app/jnlp so that if no internet connection is available, it would start from cache. Nevertheless, when I disconnect from the internet, I always get a NoRouteToHostException or UnknownHostException exception, despite the configuration below.
I've set the offline-allowed and update tags/attributes properly I think; I cannot find the reason why webstart is still trying to lookup the host. I definitely do have the app cached from my previous start when I was connected.
<?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>
Error log:
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)
Upvotes: 6
Views: 5206
Reputation: 10958
This can be achieved by using <update check="background"/>
, but updates are no longer immediately downloaded when available, it requires a second start which is annoying.
This really feels like a Java Web Start bug, <update check="timeout"/>
shouldn't prevent the application from starting if the connection to the server times out.
Upvotes: 0
Reputation: 28665
I've found a solution by calling javaws from command line with the -offline parameter, but I find that weird that this is necessary, wondering why the system cannot automatically detect that I'm offline and therefore timeout on the check and start the app from cache, as defined in my jnlp.
javaws -offline myApp.jnlp
Upvotes: 3