我正在Glassfish 4.1上构建一个应用程序。该应用程序是一个Rest API。对于客户端部分,我创建了一个java JFrame类,其中包含许多使用Jaxb的Rest API的类。还有很多事要做,但这不是主题。
我正在使用Netbeans进行开发。为了测试我的JFrame类,我只是从Netbeans中运行它(选择类,菜单Run> Run File)。我想更进一步,通过java webstart提供客户端应用程序。我使用其他应用程序也这样做,我认为这是一个简洁的方式将您的Java gui交付给客户端(替代方案欢迎?)。也许我稍后会使用基于浏览器的解决方案,但这不是近期的目标。
现在是webstart。我尝试了两种方法:
在我的Rest API项目中,我创建了一个包含以下行的index.html文件:
<script>
deployJava.launchWebStartApplication("launch.jnlp")
</script>
然后是launch.jnlp:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<jnlp codebase="http://<hostname>:8080/" href="launch.jnlp" spec="1.0+">
<information>
<title>ClientTool</title>
<vendor>Bla</vendor>
<homepage href=""/>
<description>Bla</description>
<description kind="short">Bla</description>
<icon href="bla.png" kind="default"/>
<offline-allowed/>
</information>
<update check="background"/>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.7+"/>
<jar href="ClientTool.jar" main="true"/>
</resources>
<application-desc main-class="gui.ClientFrame">
</application-desc>
</jnlp>
我已经部署了这个,index.html打开并启动launch.jnlp。到目前为止很好,但不是真的:
com.sun.deploy.net.FailedDownloadException: Unable to load resource: http://<hostname>:8080/ClientTool.jar
at com.sun.deploy.net.DownloadEngine.actionDownload(Unknown Source)
at com.sun.deploy.net.DownloadEngine.downloadResource(Unknown Source)
at com.sun.deploy.cache.ResourceProviderImpl.getResource(Unknown Source)
at com.sun.deploy.cache.ResourceProviderImpl.getResource(Unknown Source)
at com.sun.javaws.LaunchDownload$DownloadTask.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
有道理,因为我没有显式创建Jar文件。我显然需要这样做,但是怎么样?我必须在NetBeans中创建一个单独的项目来创建JAR吗?在哪里把它放在glassfish主机上?
这非常有效,你可以开箱即用webstart,将它部署在glassfish上,你就完成了。不是真的,因为自Java 7 21以来,安全性得到了增强,而Glassfish创建webstart配置的方式也没有用。
请参阅以下主题以了解此问题。这是一个报道的错误,但几个月以来处理了nog。而使用比Java 7 21更低版本的替代方案根本不适合imo。版本7甚至无法再下载。
Signed Java web start application with Glassfish 4.1 and Java7 https://java.net/jira/browse/GLASSFISH-21305
还在进一步研究究竟出了什么问题,我发现了以下痕迹:
java.lang.SecurityException: JAR manifest codebase mismatch for http://<hostname>:8080/___JWSappclient/___app/ClientGUI/ClientGUIClient.jar
at com.sun.deploy.security.DeployManifestChecker.verify(Unknown Source)
at com.sun.deploy.security.DeployManifestChecker.verify(Unknown Source)
at com.sun.javaws.security.AppPolicy.grantUnrestrictedAccess(Unknown Source)
at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResourcesHelper(Unknown Source)
at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResources(Unknown Source)
at com.sun.javaws.Launcher.prepareResources(Unknown Source)
at com.sun.javaws.Launcher.prepareAllResources(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(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.access$000(Unknown Source)
at com.sun.javaws.Main$1.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
显然,glassfish在代码库配置方面做错了。
有关如何使Glassfish和Java webstart工作的任何想法吗?
Sapphron