///////////////////////////////////////////////////////////////
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
///////////////////////////////////////////////////////////////

[[library-osgi, OSGi Library]]
= OSGi =

[devstatus]
--------------
source=libraries/osgi/dev-status.xml
--------------

OSGi Library allows you to import OSGi services as Polygene™ Services and to export Polygene™ Services as OSGi Services both
leveraging the Polygene™ Availability and OSGi FallbackStrategy mechanisms.

include::../../build/docs/buildinfo/artifact.txt[]

== Export Polygene™ services to an OSGi Bundle ==

[snippet,java]
----
source=libraries/osgi/src/test/java/org/apache/polygene/library/osgi/DocumentationSupport.java
tag=export
----


== Import OSGi services in a Polygene™ Module ==

[snippet,java]
----
source=libraries/osgi/src/test/java/org/apache/polygene/library/osgi/DocumentationSupport.java
tag=import
----

The fallback strategy is invoked when the OSGi service is not available and a method call is invoked.
