felix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Stefan Seifert (JIRA)" <j...@apache.org>
Subject [jira] Commented: (FELIX-1010) add java annotation support to felix-scr-plugin
Date Sat, 25 Apr 2009 11:49:30 GMT

    [ https://issues.apache.org/jira/browse/FELIX-1010?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12702686#action_12702686
] 

Stefan Seifert commented on FELIX-1010:
---------------------------------------

update for last comment: there are strange differences in this area between eclipse compiler
and sun jdk javac compiler.
if all static fields in the sample above are declared as public, it works. the eclipse compiler
accepts private static fields in annotation references as well, but not the sun compiler.

beware of any comment marking inside the annotation tags like this:
@Properties( {
    /* this is a property */
    @Property(name = ServiceValueRefAnnotations.STRINGPROP_NAME, value = ServiceValueRefAnnotations.STRINGPROP_VALUE)
})

this breaks the qdox annotation parser and results in a qdox exception as listed in the comment
before.

> 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,
090423_property_sorted_map.patch, FELIX-1010.patch, scrplugin_annot_090422.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.


Mime
View raw message