Saya memiliki layanan OSGi yang saya buka dan terapkan pada kain sekering jboss. sekarang saya perlu mengakses layanan ini dari bundel lain yang digunakan pada wadah lain di jboss fuse fabric. tetapi layanan tidak dapat diakses dalam wadah klien. sekering jboss V6.3

Ketika saya menggunakan bundel layanan OSGi dan bundel klien dalam wadah yang sama di fuse fabric, itu berfungsi, tetapi ketika saya menggunakan dalam wadah yang berbeda tidak berfungsi dan menunjukkan kesalahan: Tidak dapat memulai wadah cetak biru untuk bundel com.osgi.app .bean-camel-client10/1.0.0 karena dependensi yang belum terselesaikan [(objectClass=org.fusesource.example.service.HelloWorldSvc)]

Di klien:

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>

Di penyedia layanan:

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>

Bagaimana saya bisa mengakses layanan yang digunakan di wadah lain di kain sekering, melalui konteks unta?

0
Maryam 21 September 2019, 12:18

1 menjawab

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

Artinya persis seperti ini: panggil BundleContext.registerService("org.fusesource.example.service.HelloWorldSvc", object, properties).

Setelah pendaftaran, Anda memiliki layanan yang terdaftar di registri OSGi lokal yang dicakup oleh satu instance JVM - yang tidak pernah berarti mengekspos layanan agar dapat diakses di JVM yang berbeda.

Jika Anda ingin layanan tersedia di JVM berbeda (== di registri OSGi yang berbeda), Anda memerlukan semacam remoting - coba gunakan titik akhir CXF atau salah satu komponen unta jarak jauh (camel-cxf, camel -istirahat, ...).

0
Grzegorz Grzybek 23 September 2019, 13:20