glassfish服务器4.1上的Java webstart

时间:2015-09-15 16:22:27

标签: java netbeans glassfish

我正在Glassfish 4.1上构建一个应用程序。该应用程序是一个Rest API。对于客户端部分,我创建了一个java JFrame类,其中包含许多使用Jaxb的Rest API的类。还有很多事要做,但这不是主题。

我正在使用Netbeans进行开发。为了测试我的JFrame类,我只是从Netbeans中运行它(选择类,菜单Run> Run File)。我想更进一步,通过java webstart提供客户端应用程序。我使用其他应用程序也这样做,我认为这是一个简洁的方式将您的Java gui交付给客户端(替代方案欢迎?)。也许我稍后会使用基于浏览器的解决方案,但这不是近期的目标。

现在是webstart。我尝试了两种方法:

  1. 遵循java教程:https://docs.oracle.com/javase/tutorial/deployment/webstart/index.html
  2. 在我的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主机上?

    1. 通过在Netbeans中创建新项目,键入Enterprise application client。
    2. 这非常有效,你可以开箱即用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

0 个答案:

没有答案