OSGi bundle MANIFEST file is core resource of bundle and we can say its bundle deployment configuration file. OSGi containers will read the information from MANIFEST file and do subsequent actions. We can use many standard OSGi bundle headers in bundle MANIFEST file. Each header have their own significant meaning. Bundle header and its value separated with colon:
The following are headers which proposed by OSGi Alliance. We have other vendor specific headers like Eclipse Foundation, Spring Source and aQute.
OSGi Alliance Standard Headers
The headers proposes by OSGi alliance supported by all OSGi implementation environments like Apache Felix, Equinox and Knopflerfish.
Bundle-ActivationPolicy
Bundle-ActivationPolicy will notify to the container when should bundle available to use or activated. Usually when we deploy bundle, it is immediately available.
Bundle-ActivationPolicy value is lazy it means when bundle will get first request then bundle will be activated.
Example:
Bundle-ActivationPolicy: lazy |
Bundle-Activator
Bundle-Activator header specify the bundle activator java class. Bundle Activator is java class, which manage the bundle life cycle. Each bundle must have activator class and OSGi container invoke the lifecycle methods based on bundle lifecycle stages.
Example:
Bundle-Activator : com.liferaysavvy.bundle.Activator |
Bundle-Classpath
Bundle-Classpath is list of values separated by comma delimiter. The values may be jar files or directories and directories have jar files or java classes. Bundle will look for required classes in the given location.
Example:
Bundle-Classpath : apache-commons.jar, apache-logs.jar OR Bundle-Classpath : .,WEB-INF/classes,foo1.jar OR Bundle-ClassPath: ., A.jar, B.jar, C.jar |
Note:
The values separated by comma and dot will specify the current bundle directory.
Bundle-ContactAddress
Bundle-ContactAddress its just information which will use to contact bundle vendors. It’s some text or may be company URL
Example:
Bundle-ContactAddress : Liferay Savvy India OR Bundle-ContactAddress : http://www.liferaysavvy.com |
Bundle-Copyright
Bundle-Copyright is just copyright information.
Bundle-Description
Bundle-Description is description about bundle and its simple human readable text.
Bundle-License
Bundle-License specify the license information of bundle and it is a text.
Bundle-ManifestVersion:
This header is required and marks the jar as a bundle, the value is always 2 (newer OSGi specifications might add more features in which case the number would be increased).
Value 1 indicates OSGi release 3
Value 2 indicate OSGi release 4
Example:
Bundle-ManifestVersion : 2 |
Bundle-Name:
Bundle-Name is human readable name for bundle.
Example:
Bundle-Name: LSServiceProvider |
Bundle-SymbolicName
Bundle-SymbolicName is unique identification name for bundle. This name will used by other bundle when they have dependency.
Example:
Bundle-SymbolicName: com.ls.de.LSServiceProvider |
Bundle-Vendor
Bundle-Vendor is vendor name who implemented the bundle.
Example:
Bundle-Vendor : Liferay Savvy |
Bundle-RequiredExecutionEnvironment
Bundle-RequiredExecutionEnvironment is specify the JRE execution environment.
Example:
Bundle-RequiredExecutionEnvironment: JavaSE-1.8 OR Bundle-RequiredExecutionEnvironment: JavaSE-1.7 OR Bundle-RequiredExecutionEnvironment: JavaSE-1.6 |
Bundle-Version
Bundle-Version specify the version number for bundle.
Example:
Bundle-Version: 1.0.0.qualifier OR Bundle-Version: 1.0.0 |
Export-Package
Export-Package contains list of java packages separated by comma delimiter that will be exported and available to other bundles. Only the packages specified by the header will be exported, the rest will be private and will not be seen outside the bundle.
Example:
Export-Package: com.ls.de.lsserviceprovider.services OR Export-Package:org.springframework.core.task;uses:="org.springframework.core,org.springframework.util";version=2.5.1 org.springframework.core.type;uses:=org.springframework.core.annotation;version=2.5.1[...] |
Export-Service
Export-Service specify the services, which are exported from the bundle, and it will be available to other bundles. List separated by comma delimiter. This header will work when we work with multiple bundles and there is dependency between each other.
Example:
Export-Service: org.osgi.service.log.LogService,org.osgi.service.log.LogReaderService |
Import-Package
Import-Package specify the list of bundle packages, which required in the current working bundle. What are the packages exported by other bundles, can import in the current bundle with help of Import-Package header. This header will work when we work with multiple bundles and there is dependency between each other.
Example:
Import-Package: com.ls.de.lsserviceprovider.services OR Import-Package:org.apache.commons.logging,edu.emory.mathcs.backport.java.util.concurrent;resolution:=optional[...] |
Import-Service
Import-Service is similar to Export-service but it is vice versa. The list of service class names which required by the bundle. Services which are already exported can use in the list.
Example:
Import-Service: org.osgi.service.log.LogService,org.osgi.service.log.LogReaderService |
Provide-Capability
More details you can found here |
Require-Bundle
Require-Bundle specify the dependency on other bundle. The bundle we specified in the header must be required to activate current bundle. This bundle similar to Import-Bundle header proposed by Spring Source.
Example:
Require-Bundle: org.example.foo; bundle-version=3.0,org.example.bar; bundle-version=1.0 |
The following are very important headers and we use very regular in the OSGi bundle development.
Manifest-Version Bundle-ManifestVersion Bundle-Name Bundle-SymbolicName Bundle-Version Bundle-Activator Bundle-Vendor Bundle-RequiredExecutionEnvironment Export-Package Import-Package |
The following are Spring Source proposed MANIFEST headers. To use these headers we must have vendor specific implementation bundle in the OSGi container.
Import-Bundle
Import-Bundle is similar to Require-Bundle proposed by OSGi Alliance and both are same meaning.
Example:
Import-Bundle: org.example.foo; bundle-version=3.0,org.example.bar; bundle-version=1.0 |
Web-ContextPath.
The default context from which the web content is hosted. You must set the value of the Web-ContextPath header to the value of the <context-root> element for the corresponding web module in the application.xml file. The presence of this header identifies this bundle as a web application bundle.
Example:
Web-ContextPath: /contextRoot |
Web-DispatcherServletUrlPatterns
Web-DispatcherServletUrlPatterns specify the URL patterns for Dispatcher servlet.
Example:
Web-DispatcherServletUrlPatterns : /spring/* |
Web-FilterMappings
Web-FilterMappings specify the application filter mappings
Example:
Web-FilterMappings : /secure/* |
aQute MANIFEST headers
The following are aQuteproposed MANIFEST headers. To use these headers we must have vendor specific implementation bundle in the OSGi container.
Include-Resource
Include-Resource is path where bundle resource files are available like properties files
Example
Include-Resource: src/main/resources |
Private-Package
List of packages, which are specific, the current bundle and it will not be available outside. Other bundles cannot access these packages. This header will used in bnd tools developed OSGi environment. Usually we specify the bundle services implementation packages in the list.
Example:
Private-Package: com.ls.de.lsserviceprovider.services.impl |
Eclipse Foundation MANIFEST headers
The following are Eclipse Foundation proposed MANIFEST headers. To use these headers we must have vendor specific implementation bundle in the OSGi container. Equinox implementation support these headers.
The following are headers proposed by Eclipse Foundation.
Eclipse-BuddyPolicy Eclipse-BundleShape Eclipse-ExtensibleAPI Eclipse-PlatformFilter Eclipse-RegisterBuddy |
Reference Links
Author
0 comments:
Post a Comment