Expand my Community achievements bar.

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