Fuse 6 is no longer supported
As of February 2025, Red Hat Fuse 6 is no longer supported. If you are using Fuse 6, please upgrade to Red Hat build of Apache Camel.このコンテンツは選択した言語では利用できません。
2.6. API/Provider Combination
Overview リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
This section explains how to set up a Maven project for an API/provider bundle.
The
hello-boston bundle exemplifies an API/provider combination bundle. The API/provider bundle exports only its API packages, while the implementation packages are kept private. The API/provider bundle also instantiates and exports an OSGi service, which is accessed through the HelloBoston interface.
Directory structure リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
The
hello-boston bundle has the following directory structure:
The
org.fusesource.example.hello.boston package is public and all of its classes and interfaces are exported from the bundle.
The
org.fusesource.example.hello.boston.impl package is private. By default, the Maven bundle plug-in treats any packages containing the segments .impl or .internal, as private packages.
The
src/main/resources/OSGI-INF/blueprint directory contains a single blueprint file, boston-svc.xml. Any file matching the pattern, *.xml, in this directory is assumed to be a blueprint configuration file.
Sample API リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
The
hello-boston bundle contains an API, which consists of the interface, HelloBoston. The HelloBoston interface returns a localized greeting and a Clock object that tells the local time. It is defined as follows:
Sample implementation リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
The
hello-boston bundle also implements the API. In this example, a single HelloBostonImpl class implements the HelloBoston interface, as follows:
Publish OSGi service リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
The natural way to bootstrap the
HelloBoston implementation in OSGi is to publish the class, HelloBostonImpl, as an OSGi service. Use the bean element to create a HelloBostonImpl instance and use the service element to publish the bean, advertising it as a service of HelloBoston type.
For example, the blueprint file,
OSGI-INF/blueprint/boston-svc.xml, has the following contents:
Maven dependencies リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
In the Maven POM file, the
hello-boston bundle defines dependencies on the following Maven artifact:
time-util
Import and export rules リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
The following import and export rules apply to the
hello-boston bundle:
- Exporting own packages—export the public API package,
org.fusesource.example.hello.boston. Do not export the private package,org.fusesource.example.hello.boston.impl. - Importing own packages—import the public API package,
org.fusesource.example.hello.boston. - Importing dependent packages—any external package dependencies must be imported.
Maven bundle plug-in settings リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
You must export the API package,
org.fusesource.example.hello.boston, by including it in the Export-Package instruction, and add the provide:=true clause to it. This signals that this bundle is acting as the provider of the hello.boston package (and ensures that the API is imported with the correct version range—see Section 3.3, “Automatic Import Versioning”). In this case, the bundle plug-in instructions are as follows:
Example 2.2. Plug-In Settings for API/Provider Combination
Generated MANIFEST.MF file リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
When you build the bundle using Maven, the Maven bundle plug-in automatically generates the following
MANIFEST.MF file:
The
Import-Package header imports both the public API package, org.fusesource.example.hello.boston, and the external package dependencies—for example, org.fusesource.example.time.
The
Export-Package header exports the public API package, org.fusesource.example.hello.boston, while the uses clause declares a transitive dependency on the org.fusesource.example.time package.
The
Export-Service header advertises the OSGi service as a HelloBoston instance. This enables clients to find the HelloBostonImpl instance by searching for a service of HelloBoston type.