|
FAQ has been created by Felix Meschberger (Jan 07, 2008). Content:Frequently Asked QuestionsThis page lists a series of common questions and answers. It is of course work in progress ... Accessing Classes from the EnvironmentMostly when using the Sling Web Application, that is running Sling inside a web application deployed into some servlet container, you might want to share classes between the servlet container and Sling. Some examples of such sharing are:
For such cases the OSGi Core Specification provides a functionality to declare such class sharing. The functionality is defined in terms of two Framework properties org.osgi.framework.system.packages and org.osgi.framework.bootdelegation:
How does Sling support the org.osgi.framework.bootdelegation Property ?Sling supports the org.osgi.framework.bootdelegation property to list additional classes to be used from the environment by interpreting Sling configuration properties starting with sling.bootdelegation (This is done in the org.apache.sling.launcher.app.Sling.resolve() method). If a property starts with the prefix sling.bootdelegation.class. the list of packages defined as the property value is only appended to the org.osgi.framework.bootdelegation property if the fully qualified class taken from the rest of the property name exists in the parent class loader. If the property does not start with this sling.bootdelegation.class. property, the list of packages is just appended to the org.osgi.framework.bootdelegation property. How dose Sling support the org.osgi.framework.system.packages Property ?Currently extending the org.osgi.framework.system.packages property in a Sling configuration file is only possibly by setting the org.apache.sling.launcher.system.packages property. The value of this property, which must start with a comma, is just appended to the org.osgi.framewrok.system.packages property. A more elaborate support as is supported for the org.osgi.framework.bootdelegation Property is being prepared (SLING-147 Should the org.osgi.framework.bootdelegation or the org.osgi.framework.system.packages Property be used ?The org.osgi.framework.bootdelegation property short-circuits the normal class resolution process, as for each class of a package listed in the property, the parent class loader is asked. If the parent class loader finds the class, fine. Otherwise the class is not found and an exception is thrown. That is wirings are completely ignored for these classes. On the other hand the packages listed in the org.osgi.framework.system.packages property are used to enhance the list of exported packages of the system bundle. As such these packages are used just as any packages are used to resolve bundles. So these packages from a bundle point of view are exactly the same as any normal exported package declared in the Export-Package manifest header. In a sense the org.osgi.framework.system.packages property may be seen as the Export-Package manifest header of the system bundle. The problem with the org.osgi.framework.bootdelegation property is, that it completely bypasses any bundle import wirings and just asks the parent classloader. Such situations are not easily recognizable. Therefore the Sling Console will be enhanced to mark any package import which matchs an entry in the org.osgi.framework.bootdelegation appropriately (SLING-148 |
Unsubscribe or edit your notifications preferences
