Create configurable parameters in an OSGi component

In this session, you will see how to configure values for various parameters in an OSGi bundle and obtain the same for further processing.
We will also learn about ComponentContext object that helps to interact with a component.

(As usual, it’s a continuation of the previous session. Obtain the latest package and project from GitHub.)

Following are the prerequisites:

  • You should have installed the aem-company package.
  • You should have downloaded the AEM project and would had imported it into Eclipse.
    (Both these packages are available in my GitHub account.)

We will accomplish the following in this session:

  • We will modify the bundle service component that prints “Hello Apache Jackrabbit Oak.” We created the component to see how to print the value returned by a service in a bundle.
  • We will develop a component that will help us to configure the salutation. That is, it prints the salutation (now, Hello), based what we configure. We may configure it to print as “Hi Apache Jackrabbit Oak.

 

Update the project with the dependent jar files
We need to import org.apache.sling.commons.osgi class. Means, we need to add the corresponding jar to the Maven project.

  1. Go to http://mvnrepository.com/.
  2. Search for org.apache.sling.commons.osgi.
  3. Select the first class displayed.
    Following is the entry that we need in the POM file.

    <!-- http://mvnrepository.com/artifact/org.apache.sling/org.apache.sling.commons.osgi -->
      <dependency>
        <groupId>org.apache.sling</groupId>
        <artifactId>org.apache.sling.commons.osgi</artifactId>
      <version>2.4.0</version>
    </dependency>
  4. Open the bundle POM and add the following:
    <dependency>
      <groupId>org.apache.sling</groupId>
      <artifactId>org.apache.sling.commons.osgi</artifactId>
    </dependency>
  5. Right-click Maven > Update Project.
    This will download the required jar to the project.

Add a property to the component
Add a property that can be configured:

  • Add the following to the class as shown below:
    @Component(immediate = true, metatype = true, label = "Salutation Service")
    @Service
    @Property(name = "Label", description = "The Salutation", value = "Hello")

    It creates a service with configurable property, The Salutation.
    Default value of salutation is Hello.

Update the project with the logic

  1. Create a protected activate() method.
    Activate method gets executed when a component is activated. It takes a single argument, ComponentContextComponentContext object helps to interact with the execution context of a component. This needs to be called from the activate() method. We will later setting the class variable salutation based on the value entered in the component.

     protected void activate(ComponentContext componentContext)
       {
        this.salutation= PropertiesUtil.toString(componentContext.getProperties().get("Label"),null);
       }

    PropertiesUtil is a utility class that is used converting property types. The componentContext.getProperties().get(“Label”) method gets the value in the Label property; null is the default value. Rest is simple.

  2. Add a getSalutation method that returns salutation.
     public String getSalutation()
      {
       LOGGER.info(salutation);
       return salutation;
      }
  3. In the HelloService interface, add the method that we just implemented.
    public String getSalutation();

Remove the existing bundle
We are not doing a clean install now. We will handle that topic later.

  1. Log in CRXDE Lite.
  2. Move to aem-company/install.
  3. Delete the bundle.
  4. Now build the project.

Test the component

  1. Let us update the bundle-service component.
  2. Add the following in the default jsp script:
     <%= repositoryService.getSalutation()%>

    The code becomes:

    <%= repositoryService.getSalutation()%> <B><%= repositoryService.getRepositoryName() %> </B>

    Using the sling.getService() method, we created an object to the HelloService interface, and called the methods it exposed.

  3. Go to system console.
  4. Go to the Components tab.
  5. Locate the HellService component.
  6. Select the Configure button.
  7. Enter the label as Hi.
  8. Refresh the web page we created earlier.
    Notice that it has updated.

That’s about the session. You learned how to obtain values from a component using the ComponentContext.
See you soon.

 

Comments are closed.