【发布时间】:2012-01-13 19:39:37
【问题描述】:
我正在使用 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.remoteservice 和 org.eclipse.ecf.provider.zookeeper)及其依赖项。
基于该配置,我为客户端和服务器定义了两个独立的产品配置(新建->产品定义->选择运行配置)。
现在,如果我通过单击相应产品配置中的“启动 Eclipse 应用程序”链接来运行它们,一切正常。服务器发布服务,客户端获取它并在输出中显示“Hello”。 netstat -a | grep 6666 表示有人正在监听该端口,netstat -a | grep 30 表示正在使用端口 3030 和 3031。
Eclipse 已配置为正确使用我的代理。
如果我根据上述配置将它们导出为 Eclipse 产品(导出->eclipse 产品->选择产品配置),我会得到两个文件夹:客户端和服务器。
其中包含在外部 OSGi 框架内运行应用程序所需的一切,包括框架 (config.ini) 和 VM (eclipse.ini) 的配置文件。
应用程序以STS.exe -console 启动,这将打开一个 OSGi 控制台,其中安装并启动了所有必需的捆绑包。
启动服务器工作,我看到有人在监听 6666,zookeeper 报告服务已经发布。
如果我启动客户端,什么都不会发生。没有输出,3030 和 3031 上没有连接,没有错误。它什么也没做,但是 zookeeper 说它已经开始发现了。
使用 localhost 而不是我的 IP 没有任何改变,它仍然可以在 Eclipse 内部工作,但不能在外部工作。
【问题讨论】:
-
请把你的答案变成下面的真实答案。您可以在两天后将其标记为已接受。这将使问题从未回答的问题标签中消失。
-
完成,谢谢提示
-
太棒了!我已从您的问题中删除了答案。
标签: eclipse export osgi apache-zookeeper