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.