Expand my Community achievements bar.

Don’t miss the AEM Skill Exchange in SF on Nov 14—hear from industry leaders, learn best practices, and enhance your AEM strategy with practical tips.
SOLVED

how to replace @properties annotation in aem 6.4 using OSGi R6 annotations

Avatar

Level 2

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

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

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

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

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

@Component(label="Myproject Service")

@Properties({

@Property(name = Constants.SERVICE_RANKING, intValue = 400, propertyPrivate = true),

@Property(name = "priority", intValue = 200)

})

@Service({Myservice.class})

The felix scr annotations in aem 6.2 is now replaced with OSGi R6 annotations. But  how to replace it ?

I have tried one method. Please do let me know is it correct and how to use "properties" in OSGI R6.

import org.osgi.service.component.annotations.Reference;

import org.osgi.service.component.annotations.Component;

import org.osgi.service.metatype.annotations.AttributeDefinition;

import org.osgi.service.metatype.annotations.ObjectClassDefinition;

@Component(service=Myservice.class,immediate = true,name="Myproject Service",

property = {"Constants.SERVICE_RANKING="+"400","priority="+"200"  })

Is this correct ?

and how to use properties label in OSGi R6 ?

1 Accepted Solution

Avatar

Correct answer by
Employee
10 Replies

Avatar

Level 2

Thanks @Arun patidar

But I have already gone through the documents but it doesn't contain @properties solution.

Avatar

Community Advisor

Hi,

YOU can do like below:

No need to put properties in quotes.

@Component(service = MyService.class, immediate = true, property = {

Constants.SERVICE_RANKING + "=400",

"priority=200"

})



Arun Patidar

Avatar

Level 2

Thanks @arun patidar

@Service

@Component(metatype = true, immediate = true, label = "Content Insights Page Name Provider", description = "Service to use custom content insights page name variable")

@Properties({

@Property(name = Constants.SERVICE_DESCRIPTION, value = "Content Insights Page Name Resolver implementation"),

@Property(name = Constants.SERVICE_RANKING, intValue = 200, propertyPrivate = false),

@Property(name = "basePath", value = "/content/myproject/language-masters/en", description="The path to be removed from Content Insights URL", label="basePath"),

@Property(name = "blogBasePath", value = "/content/myproject-blog/en", description="The path to be removed from Content Insights URL for Blogs", label="blogBasePath"),

@Property(name = "cqVarContentInsight", value = "pagedata.path", description="The CQ variable used for Content Insights URL", label="cqVarContentInsight"),

@Property(name = "langBasePath", value = "/content/myproject/language-masters", description="The path to be removed from Content Insights URL", label="langBasePath")})

Could you please help me in this ?

Avatar

Level 8

You can use OCD Attribute definitions to convert this into OSGI

EX :

@AttributeDefinition(name = "Constants.SERVICE_DESCRIPTION", description = "Content Insights Page Name Resolver implementation")

String getDescription();

https://blog.osoco.de/2015/11/osgi-components-simply-simple-part-iii/

http://keysandstrokes.info/aem-code-snippets-osgi-annotations/

You need to follow below apprach if you want to convert as it is something like adding Prorperty = { key=value,key=value }

Ex :

@Component(metatype = true, immediate = true, label = "Content Insights Page Name Provider", description = "Service to use custom content insights page name variable")

, Property = { Constants.SERVICE_DESCRIPTION  = "Content Insights Page Name Resolver implementation",

Constants.SERVICE_RANKING, intValue = 200, propertyPrivate = false }

@AttributeDefinition(name = "Feed Url", description = "Feed Url")
String feedUrl();

Avatar

Level 2

But for this I have to declare the new variable ? isn't it ?

Avatar

Level 8

Yes,  you need to declare new variables on top of it add AttributeDefinitions and you need to same variables name which were defined earlier

Avatar

Correct answer by
Employee