Я работаю над Eclipse STS 2.7.2 с Java JDK 1.6, Windows XP SP3. Я работаю за прокси, который требует аутентификации.
Я написал два простых клиентских и серверных плагина, которые работают с использованием DS и Zookeeper discovery. Они ссылаются на интерфейс IHello, включенный в третий плагин.
Сервер публикует простой сервис Hello, который возвращает строку "hello" при вызове 192.16.23.28:6666/hello и запускает Zookeper с аргументами VM
-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>
клиент запускает Zookeeper с аргументами виртуальной машины
-Dzoodiscovery.autoStart=true
-Dzoodiscovery.flavor=zoodiscovery.flavor.standalone=192.168.23.28:3031;clientPort=3030
В обоих случаях платформа OSGi запускается с аргументами -console -consoleLog -clean
.
Затем я создал две раздельные конфигурации запуска для сервера и клиента (Run as-> run configurations), добавив все необходимые пакеты (наиболее важные из них: org.eclipse.ecf.provider.remoteservice
и org.eclipse.ecf.provider.zookeeper
) и их зависимости.
На основе этой конфигурации я определил две отдельные конфигурации продукта (новый-> определение продукта-> выберите конфигурацию прогона) для клиента и сервера.
Теперь, если я запускаю их, нажимая на ссылку «Запустить приложение Eclipse» внутри соответствующей конфигурации продукта, все работает. Сервер публикует сервис, клиент получает его и показывает «Hello» на выходе. netstat -a | grep 6666
показывает, что кто-то прослушивает этот порт, а netstat -a | grep 30
показывает, что используются порты 3030 и 3031.
Eclipse настроен для правильного использования моего прокси.
Если я экспортирую их как продукт Eclipse на основе вышеупомянутых конфигураций (export-> eclipse product-> select configuration продукта), я получу две папки: клиентскую и серверную.
Внутри них есть все необходимое для запуска приложений во внешней платформе OSGi, в том числе файлы конфигурации как для каркаса (config.ini
), так и для виртуальной машины (eclipse.ini
).
Приложения запускаются с STS.exe -console
, который открывает консоль OSGi со всеми необходимыми пакетами, установленными и запущенными.
Запуск сервера работает, я вижу, что кто-то слушает 6666, и zookeeper сообщает, что сервис опубликован.
Если я запускаю клиент, ничего не происходит. Нет вывода, нет соединений на 3030 и 3031, нет ошибок. Он просто ничего не делает, однако zookeeper говорит, что он начал обнаружение.
Использование localhost вместо моего IP ничего не меняет, оно все еще работает внутри Eclipse, но не снаружи.