BlueprintWeb

The Blueprint Web module makes it easy to use OSGi Blueprint as a dependency injection framework outside of OSGi containers such as inside any Servlet Engine.

You can then use Blueprint as a small standards base alternative to the Spring Framework’s XML dependency injection files.

How to use Blueprint Web

Just add the following to your web.xml

<listener>
    <listener-class>org.apache.aries.blueprint.web.BlueprintContextListener</listener-class>
</listener>

This will then make your web application look in the classpath for all files called META-INF/blueprint.xml. Each one will then be loaded and created in a single BlueprintContainer for your web application.

Then in each jar or in the web application itself, just create a file called src/main/resources/META-INF/blueprint.xml which will then get included into jars or into your WAR.

If you wish to use a different name for the location of the blueprint files you can specify the blueprintLocation property as a context parameter as follows:

<context-param>
    <param-name>blueprintLocation</param-name>
    <param-value>META-INF/myName.xml</param-value>
</context-param>

Configuring blueprint through properties

Blueprint beans can be configured using the variable substitutions. You need to declare the ext namespace and add the property placeholder bean in your blueprint xml

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
           xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.2.0">
	<ext:property-placeholder>
    	<ext:default-properties>
        	<ext:property name="myProperty" value="defaultValue" />
    	</ext:default-properties>
	</ext:property-placeholder>
	...
	<bean ...>
		<property name="myProperty" value="${myProperty}" />
	</bean>
</blueprint>

The default value can be overriden by specifying an the blueprintProperties property as a context parameter in the web.xml:

<context-param>
	<param-name>blueprintProperties</param-name>
	<param-value>myConfigFile.properties</param-value>
</context-param>

The value of this parameter is a comma separated list of properties file loaded from the class loader. In this case, adding a file called src/main/resources/myConfigFile.properties will do the trick.