Event Listener module
Job module
Language module
Macro Module
Servlet Filter module
Servlet module
Theme module
Web UI modules
Workflow module

Component Import module

Purpose of this Module Type

Component Import plugin modules allow you to access Java components shared by other plugins, even if the component is upgraded at runtime.

Configuration

The root element for the Component Import plugin module is component-import. It allows the following attributes and child elements for configuration:

Attributes

Name*

Description

interface

The Java interface of the component to import.

This attribute is only required if the interface elements are not used.

key

The unique identifier of the plugin module. You refer to this key to use the resource from other contexts in your plugin, such as from the plugin Java code or JavaScript resources.

1
2
<component-import
key="appProps"
interface="com.atlassian.sal.api.ApplicationProperties"/>

In the example, appProps is the key for this particular module declaration, for component-import, in this case.

That is, the identifier of the component to import.

filter

The LDAP filter to use to match public components (OSGi services).

The format of the filter must be a valid LDAP filter. (Plugin Framework 2.3 and later.)

*interface and key attributes are required.

Elements

  • interface - the Java interface under which the component to retrieve is registered. This element can appear zero or more times, but is required if the interface attribute is not used. Required.

Example

Here is an example atlassian-plugin.xml file containing a single component import:

1
2
<atlassian-plugin name="Hello World" key="example.plugin.helloworld" plugins-version="2">
    <plugin-info>
        <description>A basic component import module test</description>
        <vendor name="Atlassian Software Systems" url="http://www.atlassian.com"/>
        <version>1.0</version>
    </plugin-info>

    <component-import key="helloWorldService">
        <interface>com.myapp.HelloWorldService</interface>
    </component-import>
</atlassian-plugin>

It consumes a component made available via a different plugin:

1
2
<atlassian-plugin name="Hello World Provider" key="example.plugin.helloworld.provider" plugins-version="2">
    <plugin-info>
        <description>A basic component module test</description>
        <vendor name="Atlassian Software Systems" url="http://www.atlassian.com"/>
        <version>1.0</version>
    </plugin-info>

    <component key="helloWorldService" class="com.myapp.internal.MyHelloWorldService" public="true">
        <interface>com.myapp.HelloWorldService</interface>
    </component>
</atlassian-plugin>

Here is an example of matching via an LDAP filter. Since a component import is really just matching an OSGi service, you can optionally specify an LDAP filter to match the specific service. Here is an example that matches a dictionary service that provides a language attribute that equals English:

1
2
<component-import key="dictionaryService" interface="com.myapp.DictionaryService"
                  filter="(language=English)" />

Notes

Some information to be aware of when developing or configuring a Component Import plugin module:

  • Component imports, at installation time, are used to generate the atlassian-plugins-spring.xml Spring Framework configuration file, transforming Component Import plugin modules into OSGi service references using Spring Dynamic Modules.
  • The imported component will have its bean name set to the component import key, which may be important if using 'by name' dependency injection.
  • If you wish to have more control over how imported services are discovered and made available to your plugin, you can create your own Spring configuration file containing Spring Dynamic Modules elements, stored in META-INF/spring in your plugin jar. This is recommended if you are needing to import multiple services that implement an interface, for example.
  • You can use component imports to customise the bean name of host components, particularly useful if you plan to use 'by name' dependency injection.

Writing Confluence Plugins
Information sourced from Plugin Framework documentation

Rate this page: