如何将JavaWebStart与RMI混合使用?

如何将JavaWebStart与RMI混合使用?,java,rmi,java-web-start,Java,Rmi,Java Web Start,我想发布一个使用RMI的webstart应用程序 我希望避免询问用户RMI服务器的地址,因为分发应用程序的网站也是RMI服务器 此外,我在构建时不知道服务器的地址,因此必须使用特殊配置将该地址添加到JNLP,或者必须在执行时提供该地址。这是首选的方法:可以这样做吗?我没有完全使用Java RMI(我只使用Java Web Start和二进制协议来执行类似RMI的操作),但至少将服务器地址传递给Web Start客户端应用程序的部分应该很容易。在应用程序中生成JNLP文件时,将地址添加为属性: &

我想发布一个使用RMI的webstart应用程序

我希望避免询问用户RMI服务器的地址,因为分发应用程序的网站也是RMI服务器


此外,我在构建时不知道服务器的地址,因此必须使用特殊配置将该地址添加到JNLP,或者必须在执行时提供该地址。这是首选的方法:可以这样做吗?

我没有完全使用Java RMI(我只使用Java Web Start和二进制协议来执行类似RMI的操作),但至少将服务器地址传递给Web Start客户端应用程序的部分应该很容易。在应用程序中生成JNLP文件时,将地址添加为属性:

<jnlp>
  [...]
  <resources>
    [...]
    <property name="serverAddress" value="..." />
  </resources>
</jnlp>
我假设分发应用程序的网站知道自己的地址:)

编辑(另外一个限制是在构建时不知道地址):嗯,发布应用程序的网站是动态的还是静态的

  • 动态:动态地生成整个JNLP(使用JSP页面或dom4j或其他什么),或者读取“模板”JNLP XML文件并替换实际的服务器地址
  • 静态:我猜部署站点的人必须在JNLP文件中手动配置正确的地址

  • 我在jnlp中使用变量占位符:

    ...
    <application-desc>
        <argument>{host}</argument>
        <argument>{port}</argument>
    </application-desc>
    ...
    
    。。。
    {host}
    {port}
    ...
    

    并在运行时使用拦截器servlet替换这些,因为JNLP被提供给客户端。

    在我工作的地方,我们正是这样做的,并根据Jonik的回答将RMI注册表的主机名放在JNLP中。在Java6U10或u11中,Sun用Webstart解决了几个安全漏洞,包括动态JNLP的问题。为了满足所有安全警告,您必须在程序的主jar中放置一个相同的JNLP副本。这是为了防止第三方向代码中注入额外的JAR或参数。程序将在没有它的情况下运行,但会向用户显示信任通知


    我们在构建时确实知道地址,但存在其他动态JNLP问题,因此必须为每个可能的运行时设置提供JNLP和JAR。这对我们来说更像是一个部署难题,而不是客户的问题,但是如果您正在签署发行版,那么就值得了解。

    JDK包含servlet的源代码(在samples/jnlp/servlet目录中),该servlet将适当的值插入到jnlp文件中。您可以使用它将主机名插入到JNLP文件中


    谢谢!我根据您的回答更改了问题,以更全面地反映我的需求。。。value=“$$codebase”。
    ...
    <application-desc>
        <argument>{host}</argument>
        <argument>{port}</argument>
    </application-desc>
    ...