Публикация и доступ к сервису OSGI с помощью JBoss Fuse Fabric - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть служба OSGi, которую я открыл и развернул на фабрике предохранителей jboss.теперь мне нужно получить доступ к этому сервису из другого пакета, развернутого в другом контейнере в структуре предохранителей jboss.но услуга недоступна в клиентском контейнере.jboss fuse V6.3

при развертывании пакета OSGi-службы и клиентского пакета в одном и том же контейнере в fuse fabric, это работает, но при развертывании в разных контейнерах не работает и выдает ошибку: Unableзапустить контейнер чертежа для пакета com.osgi.app.bean-camel-client10 / 1.0.0 из-за неразрешенных зависимостей [(objectClass = org.fusesource.example.service.HelloWorldSvc)]

В клиенте:

POM.xml:

<dependency>
    <groupId>com.osgi.app</groupId>
    <artifactId>bean-app-service1</artifactId>
    <version>1.0</version>
</dependency>

config.xml:

<reference id="helloWorld"
    interface="org.fusesource.example.service.HelloWorldSvc"/>
<camelContext xmlns="http://camel.apache.org/schema/blueprint" >
<route>
  <from uri="timer:foo?period=5000"/>
  <to uri="bean:org.fusesource.example.service.HelloWorldSvc?method=sayHello"/>

  <log message="The message contains: ${body}"/>
 </route>

в поставщике услуг:

pom.xml:

<groupId>com.osgi.app</groupId>
<artifactId>bean-app-service2</artifactId>
<version>1.0</version>
<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <version>${version.maven-bundle-plugin}</version>
    <extensions>true</extensions>
    <configuration>
      <instructions>
        <Bundle-SymbolicName>${pom.groupId}.${pom.artifactId}</Bundle-SymbolicName>
        <Export-Package>org.fusesource.example.service</Export-Package>
      </instructions>
    </configuration>
  </plugin>

config.xml:

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
         http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
         http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">
<bean id="hello" class="org.fusesource.example.service.impl.HelloWorldSvcImpl"/>

 <service ref="hello" interface="org.fusesource.example.service.HelloWorldSvc"/>
 </blueprint>

Как получить доступ к службе, развернутой в другом контейнере в плавкой перегородке, через контекст верблюда?

1 Ответ

0 голосов
/ 23 сентября 2019
<service ref="hello" interface="org.fusesource.example.service.HelloWorldSvc"/>

означает именно это: вызов BundleContext.registerService("org.fusesource.example.service.HelloWorldSvc", object, properties).

После регистрации у вас есть служба, зарегистрированная в локальном реестре OSGi , которая ограничена одним экземпляром JVM - что никогдаозначало предоставление доступа к сервису в другой JVM.

Если вы хотите, чтобы сервис был доступен в другой JVM (== в другом реестре OSGi), вам нужно какое-то удаленное взаимодействие -попробуйте использовать конечную точку CXF или один из удаленных компонентов верблюда (camel-cxf, camel-rest, ...).

...