Return-Path: Delivered-To: apmail-felix-dev-archive@www.apache.org Received: (qmail 53725 invoked from network); 15 Apr 2009 15:37:37 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 15 Apr 2009 15:37:37 -0000 Received: (qmail 98384 invoked by uid 500); 15 Apr 2009 15:37:36 -0000 Delivered-To: apmail-felix-dev-archive@felix.apache.org Received: (qmail 98332 invoked by uid 500); 15 Apr 2009 15:37:36 -0000 Mailing-List: contact dev-help@felix.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@felix.apache.org Delivered-To: mailing list dev@felix.apache.org Received: (qmail 98322 invoked by uid 99); 15 Apr 2009 15:37:36 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 15 Apr 2009 15:37:36 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.140] (HELO brutus.apache.org) (140.211.11.140) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 15 Apr 2009 15:37:35 +0000 Received: from brutus (localhost [127.0.0.1]) by brutus.apache.org (Postfix) with ESMTP id 00C4F29A0014 for ; Wed, 15 Apr 2009 08:37:15 -0700 (PDT) Message-ID: <200256564.1239809835002.JavaMail.jira@brutus> Date: Wed, 15 Apr 2009 08:37:15 -0700 (PDT) From: "Carsten Ziegeler (JIRA)" To: dev@felix.apache.org Subject: [jira] Commented: (FELIX-1010) add java annotation support to felix-scr-plugin In-Reply-To: <618293319.1238350970564.JavaMail.jira@brutus> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 X-Virus-Checked: Checked by ClamAV on apache.org [ https://issues.apache.org/jira/browse/FELIX-1010?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12699242#action_12699242 ] Carsten Ziegeler commented on FELIX-1010: ----------------------------------------- Re artifactId: yes, I was thinking about this as well but didn't had a good idea :) I guess "org.apache.felix.scr.annotations" is good enough; Not sure if people would search for the annotations in scr itself; these annotations are not tied to our scr implementation, therefore I guess they should be a standalone module. Re default for metatype at @Component; the orignal patch from Stefan had it in line with the @scr.component tag which means it defaults to true. I changed this to false, as I think false should be the default value and we did it wrong for the javadoc tags. I think we can live with this inconsistency. (I'm not completly against changing it to true either) But I completly agree to the other changes :) Thanks for the patch! > add java annotation support to felix-scr-plugin > ----------------------------------------------- > > Key: FELIX-1010 > URL: https://issues.apache.org/jira/browse/FELIX-1010 > Project: Felix > Issue Type: New Feature > Components: Maven SCR Plugin > Affects Versions: maven-scr-plugin-1.0.10 > Reporter: Stefan Seifert > Assignee: Carsten Ziegeler > Fix For: maven-scr-plugin-1.0.11 > > Attachments: 090329_felix_scrplugin_annotationsupport.patch, 090406_component_patch.patch, FELIX-1010.patch > > > goals of this proposal: > - allow definition of SCR components with java annotations instead of QDox tags > - advantages: strong typing, auto-completion and jump to source documentation in modern IDEs > - support built-in annotations with 1:1 matching the old scr.* tags, and allow definition of custom annotations for other felix/scr-based projects to minimalize syntax overhead > - the QDox tags are still supported, but cannot be mixed with annotations whithing the same source file > attached to this ticket is a full implemented and tested patch, that supports all feates supported by the scr.* QDox tags today. some of the more "exotic" features are not tested in detail, only the generated descriptors where compared. > i created a new project "scrplugin-annotations", that contains only the annotations for easy referencing without unwanted transitive dependencies. i'm not sure if the package and artifact name are well chosen. > Example 1 > --------- > QDox version: > /** > * Service class with QDox annotations. > * > * @scr.component > * @scr.property name="testProperty" value="testValue" > * @scr.service > */ > public class MinimalServiceQDox implements { > ... > Annotation version: > /** > * Service class with java annotations. > */ > @Component > @Property(name = "testProperty", value = "testValue") > @Service > public class MinimalServiceAnnotations { > ... > Example 2 > --------- > QDox version: > /** > * Service class with QDox annotations. > * > * @scr.component name="QDoxName" label="theLabel" description="theDescription" > * immediate="false" enabled="false" factory="xx.yy.zz" > * @scr.service interface="org.osgi.service.component.ComponentInstance" > * servicefactory="true" > * @scr.service interface="java.lang.Readable" > * @scr.property name="stringProp" value="theValue" label="thePropLabel" > * description="thePropDesc" options 0="option0" 1="option1" > * 2="option2" > * @scr.property name="intProp" value="5" type="Integer" > * @scr.property name="multiProp" values.0="multiValue1" values.1="multiValue2" > */ > public class ServiceQDox implements ComponentInstance, Readable { > /** > * @scr.reference cardinality=0..1, dynamic=true > */ > MinimalServiceQDox reference; > ... > Annotation version: > /** > * Service class with java annotations. > */ > @Component(name = "AnnotName", label = "theLabel", description = "theDescription", immediate = false, enabled = false, factory = "xx.yy.zz") > @Services( { @Service(value = ComponentInstance.class, serviceFactory = true), @Service(Readable.class) }) > @Properties( { > @Property(name = "stringProp", value = "theValue", label = "thePropLabel", description = "thePropDesc", options = { > @PropertyOption(name = "0", value = "option0"), @PropertyOption(name = "1", value = "option1"), > @PropertyOption(name = "2", value = "option2") }), > @Property(name = "intProp", value = "5", type = Integer.class), > @Property(name = "multiProp", value = { "multiValue1", "multiValue2" }) }) > public class ServiceAnnotations implements ComponentInstance, Readable { > @Reference(cardinality = ReferenceCardinality.ZERO_TO_ONE, policy = ReferencePolicy.DYNAMIC) > MinimalServiceAnnotations reference; > ... > Example 3 - using Custom Annotation from other project > ------------------------------------------------------ > QDox version: > /** > * Sample servlet with sling mappings. > * > * @scr.component immediate="true" > * @scr.service interface="javax.servlet.Servlet" > * @scr.property name="sling.servlet.methods" value="GET" > * @scr.property name="sling.servlet.resourceTypes" > * value="/apps/test/components/samplecomponent" > * @scr.property name="sling.servlet.extensions" values.0="html" values.1="json" > */ > public class SlingServletQDox implements Servlet { > Annotation version: > /** > * Sample servlet with sling mappings. > */ > @SlingServlet(methods = "GET", resourceTypes = "/apps/test/components/samplecomponent", extensions = { "html", "json" }) > public class SlingServletAnnotation implements Servlet { > Custom annotation mappings can be integrated by defining a class implementing "org.apache.felix.scrplugin.tags.annotation.AnnotationTagProvider" for the new plugin property "annotationTagProviders" in the pom. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.