how to replace @properties annotation in aem 6.4 using OSGi R6 annotations | Community
Skip to main content
Level 2
October 11, 2018
Solved

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

  • October 11, 2018
  • 10 replies
  • 9900 views

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 ?

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.

10 replies

swati_kadAuthor
Level 2
October 11, 2018

Thanks @Arun patidar

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

arunpatidar
Community Advisor
Community Advisor
October 11, 2018

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
swati_kadAuthor
Level 2
October 11, 2018

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 ?

Shashi_Mulugu
Community Advisor
Community Advisor
October 11, 2018

You need to declare Object Class Definitions(OCD).

Using OSGi annotations (>= AEM6.2) - Experience Delivers

raj_mandalapu
Level 7
October 11, 2018

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();
swati_kadAuthor
Level 2
October 11, 2018

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

raj_mandalapu
Level 7
October 11, 2018

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

Feike_Visser1
Adobe Employee
Feike_Visser1Adobe EmployeeAccepted solution
Adobe Employee
October 11, 2018
smacdonald2008
Level 10
October 11, 2018

Excellent community input everyone!