felix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Carsten Ziegeler (JIRA)" <j...@apache.org>
Subject [jira] Commented: (FELIX-1010) add java annotation support to felix-scr-plugin
Date Tue, 07 Apr 2009 06:50:12 GMT

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

Carsten Ziegeler commented on FELIX-1010:
-----------------------------------------

> to make the annotations really useful in IDE's like eclipse you need this project as
a maven dependency in any way to be included when generating the eclipse project files, and
to get inline documentation of the annotations. the dependency type could be set to "provided",
so its not included in the dependency chain. so, even if we find a way of providing the dependency
only in the plugin's classpath, the IDE support will suffer.

Yepp, you're right of course - and I don't think that adding the dependency to the project
is really a problem; it's just a difference compared to the javadoc stuff.

> yes, i ran into this already. using reflection for reading annotations form generated
classfiles requires to set the policy to RUNTIME. there is no other way with the code implemented
in the way currently. policy SOURCE is really only useful for IDEs an other tools, who are
parsing the source files by themselves. after submitting the patch i thought if the qdox library
can be used for exactly this job - parsing the source files and read the java annotations
(not the doclet tags). but it seems the qdox library does not support this, and i've not checked
if there are other libraries helping reading SOURCE level annotations from source files.

I think RUNTIME as the retention policy is nearly a killer for this; I briefly looked at the
QDox javadocs and they mention annotations. I'll have a look at it later.

> >- The valueRef and nameRef attributes for properties are currently not supported.
This is a very nice feature which allows to reference an existing > I dropped the support
for them by design, because as far as i unterstood the syntax, they helped only referencing
an existing java constant instead of a hard-coded value. but with java annotations, you can
use this already with the value and name properties, and you do not need them any more as
separate properties. or did i miss something that cannot be expressed with the new annotations
in the current implementation?
Ah ok, so how do I reference a constant? (I'm new to annotations...)

> i recommend maintaining the information concerning the qdox annotations and the java
annotations on the same page, because my intention was to name all properties the same way
(where possible), to keep the docs+usage in synch easily. i've not figured out yet where the
documentation of the felix subprojects are maintained or patches can be applied to (is it
a wiki?)
Yes, it's a wiki (http://cwiki.apache.org/confluence/display/FELIX) but only Felix committers
have write access :) If you send a patch with plain text I can easily add it to the page.
Thanks!

> 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
>
>
> 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