2

我正在使用 Java JDK 1.6、Windows XP SP3 开发 Eclipse STS 2.7.2。我在需要身份验证的代理后面工作。

我编写了两个简单的客户端和服务器插件,它们使用 DS 和 Zookeeper 发现。它们指的是捆绑在第三个插件中的 IHello 接口。

服务器发布一个简单的 Hello 服务,当在 192.16.23.28:6666/hello 上调用时返回一个字符串“hello”并使用 VM 参数启动 Zookeper

-Dzoodiscovery.dataDir=bla
-Dzoodiscovery.flavor=zoodiscovery.flavor.standalone=192.168.23.28:3030;clientPort=3031

xml 是:

<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="NOLINKALLOWED" name="it.eng.test.remote.ds.helloservice">
<implementation class="it.eng.test.remote.ds.helloservice.HelloService"/>
<property name="service.exported.interfaces" type="String" value="*"/>
<property name="service.exported.configs" type="String" value="ecf.generic.server"/>
<property name="ecf.exported.containerfactoryargs" type="String" value="ecftcp://192.168.23.28:6666/hello"/>
<service>
<provide interface="it.eng.test.remote.ds.hello.IHello"/>
</service>
</scr:component>

客户端使用 VM 参数启动 Zookeeper

-Dzoodiscovery.autoStart=true
-Dzoodiscovery.flavor=zoodiscovery.flavor.standalone=192.168.23.28:3031;clientPort=3030

在这两种情况下,OSGi 框架都是从-console -consoleLog -clean参数开始的。

然后,我为服务器和客户端创建了两个单独的运行配置(运行方式->运行配置..),添加了所有必需的包(最重要的包:org.eclipse.ecf.provider.remoteserviceorg.eclipse.ecf.provider.zookeeper)及其依赖项。

基于该配置,我为客户端和服务器定义了两个独立的产品配置(新建->产品定义->选择运行配置)。

现在,如果我通过单击相应产品配置中的“启动 Eclipse 应用程序”链接来运行它们,一切正常。服务器发布服务,客户端获取它并在输出中显示“Hello”。netstat -a | grep 6666显示有人正在监听该端口,并netstat -a | grep 30显示正在使用端口 3030 和 3031。

Eclipse 已配置为正确使用我的代理。

如果我根据上述配置将它们导出为 Eclipse 产品(export->eclipse product->select product configuration),我会得到两个文件夹:client 和 server。

在它们内部,有在外部 OSGi 框架内运行应用程序所需的一切,包括框架 ( config.ini) 和 VM ( eclipse.ini) 的配置文件。

应用程序启动时STS.exe -console会打开一个 OSGi 控制台,其中安装并启动了所有必需的包。

启动服务器工作,我看到有人在 6666 上监听,zookeeper 报告该服务已发布。

如果我启动客户端,什么都不会发生。没有输出,3030 和 3031 上没有连接,没有错误。它根本什么都不做,但是动物园管理员说它已经开始发现了。

使用 localhost 而不是我的 IP 没有任何改变,它仍然可以在 Eclipse 内部工作,但不能在外部工作。

4

1 回答 1

1

导出的应用程序的配置存储在:./eclipse.ini 中,OSGi 框架配置在 ./configuration/config.ini

eclipse.ini 包含 Java VM 所需的参数以供 zookepeer 工作:

-consoleLog
-console
-clean
-vmargs
-Declipse.ignoreApp=true
-Dosgi.noShutdown=true
-Dzoodiscovery.autoStart=true;
-Dzoodiscovery.flavor=zoodiscovery.flavor.standalone=localhost:3031;clientPort=3030

启动应用程序没问题,但没有读取该文件。

手动启动应用程序:

java -Dzoodiscovery.autoStart=true; -Dzoodiscovery.flavor=zoodiscovery.flavor.standalone=192.168.23.28:3031;clientPort=3030 -jar org.eclipse.osgi_3.7.0.v20110613.jar -console -configuration c:\temp\zooc\configuration\

从所有 jar 工作的 ./plugins 中。

猜测 Eclipse 自动生成的 .exe 没有很好地配置为读取其配置文件。

于 2012-01-13T11:34:53.390 回答