Cookie

Best Practices - Newsletter Nr. 3 - Properties an Services

Folgendes Beispiel zeigt das Auslesen von Properties an Services im CQ (Felix). Damit für einen Service in der Felix Console Properties konfiguriert werden können, muss die Property metatype = true an der Annotation @Component gesetzt werden. Damit der Service nicht in der Felix Console auftaucht, muss die Property entsprechend auf false stehen oder weggelassen werden. Es ist für die Übersicht in Projekten durchaus sinnvoll, genau zu überdenken, welche Services angezeigt werden müssen.

Eine weitere Fehlerquelle liegt im Auslesen der Properties. Hier sollte wie im Beispiel unten immer das PropertiesUtil verwendet werden, da dies alle Möglichkeiten, wie eine Property persistent abgelegt sein kann, beachtet und die Property immer ermitteln kann. Varianten, die auf verschiedene Typen prüfen, sind in jedem Falle zu vermeiden.

 

import java.util.Map;

import org.apache.felix.scr.annotations.Activate;

import org.apache.felix.scr.annotations.Component;

import org.apache.felix.scr.annotations.Modified;

import org.apache.felix.scr.annotations.Property;

import org.apache.felix.scr.annotations.Service;

import org.apache.sling.commons.osgi.PropertiesUtil;

 

@Component(metatype =true, immediate =true, label ="Projekt X - Service XY", description ="Dieser Service ist hoch konfigurabel")

@Service

publicclass Propertyconfigured {

    // simple example of a boolean property with default value "true"

    @Property(label ="Activated", description ="Enable or disable the Service.", boolValue =true)

    privatestaticfinal String ACTIVATION ="service.activate";

    // Complex example for a property in the form "anyString;anyIntLow;anyIntTop"

    // A colon is a better separator inside the property. So the configuration is presentable in xml

    @Property(label =" Complex", description ="[anyString;anyIntLow;anyIntTop]", cardinality = Integer.MAX_VALUE)

    privatestaticfinal String COMPLEX_PROPERTY ="service.complex";

    privateboolean activated;

    private String[] complex;

    @Activate

    @Modified

    protectedvoid activate(final Map<String, Object> properties){

        activated = PropertiesUtil.toBoolean(properties.get(ACTIVATION),true);

        complex = PropertiesUtil.toStringArray(properties.get(COMPLEX_PROPERTY),new String[0]);

    }

}

Jetzt mit Freunden teilen

  • Auf Facebook teilen
  • Auf Twitter teilen
  • Auf Xing teilen
  • Auf LinkedIn teilen
  • Auf WhatsApp teilen
Durch das Aktivieren der Social Funktionen wird eine Verbindung zu externen Servern (Drittanbietern) hergestellt, die Cookies und andere Tracking-Technologien verwenden, um die Benutzererfahrung zu personalisieren und zu verbessern. Weitere Informationen finden Sie in unseren Datenschutzhinweisen.
> Social Funktionen deaktivieren> Datenschutz

Ihre Ansprechpartnerin