Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

SCR Annotations for Fun and Profit

Talk held by Mike Pfaff at the .adaptTo() conference 2012 in Berlin

  • Login to see the comments

SCR Annotations for Fun and Profit

  1. 1. SCR Annotations for Fun and ProfitLightningtalks.adaptTo(Berlin, 2012) Mike Pfaff Freelance CQ Consultant
  2. 2. Huh?Short intro on how to use SCR annotations toeasily define servlets and services, usereferences to access services, defineconfigurable components, etc.Show ease of “new style” annotationscompared to “old style” JavaDoc comments
  3. 3. How to: Use annotations...<dependencies> ... <dependency> <groupId>org.apache.felix</groupId> <artifactId>org.apache.felix.scr.annotations</artifactId> <version>1.7.0</version> <scope>provided</scope> </dependency> ...</dependencies>...
  4. 4. How to: Maven plugin...<build> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-scr-plugin</artifactId> <version>1.8.0</version> </plugin> ... </plugins></build>...
  5. 5. Reference: Old Style.../*** @scr.reference*/private SlingRepository repo;...
  6. 6. Reference: New Style...@Referenceprivate SlingRepository repo;...
  7. 7. Servlet: Old Style/*** Foo Bar Servlet** @scr.component metatype="false"* @scr.service interface="javax.servlet.Servlet"* name="sling.servlet.methods" value="POST"* name="sling.servlet.selectors" value="foobar"* name="sling.servlet.resourceTypes" value="adaptto2012/components/page"**/public class FooBarServlet extends SlingAllMethodsServlet { ...}
  8. 8. Servlet: New Style/*** Foo Bar Servlet**/@SlingServlet( resourceTypes = {"adaptto2012/components/page"}, methods = {"POST"}, selectors = {"foobar"})public class FooBarServlet extends SlingAllMethodsServlet { ...}
  9. 9. SlingServlet optionsBased on resourceType (recommended!) resourceTypes - Required selectors - Optional extensions - Optional methods - OptionalBased on path (caution - no access control!) paths - Required
  10. 10. Configurable Component: Define@Component( label = "adaptTo() - Sample Configurable Component", description = "This is a sample for a configurable component", metatype = true)public class SampleConfigurableComponent { @Property( label = "Hostname", description = "Hostname of some external service" ) static final String PROP_HOSTNAME = "hostname";}
  11. 11. Configurable Component: Configure
  12. 12. Configuration: Retrieveprotected void activate(ComponentContext context) { Dictionary configProperties = context.getProperties(); String hostName = (String)configProperties.get(PROP_HOSTNAME);}
  13. 13. Other annotationsDefine a service (which you can then @Reference) @ServiceSling filters: @SlingFilter @SlingFilterScopeOverride default method names: @Activate @Deactivate @Modified
  14. 14. Some best practicesOnly set metatype to true if you want yourcomponent to be configurable through theApache Felix web console. Defaults are falsefor annotations (so better than JavaDoc tags)Always set nice labels and descriptions toavoid cryptic entries in the Apache Felix webconsole (also applies to non configurablecomponents!)
  15. 15. DocumentationSCR Annotations SCR Annotations Plugin
  16. 16. Thank you!