Repetition des annotations

44 views
Skip to first unread message

Rémi Forax

unread,
Aug 21, 2012, 5:41:23 AM8/21/12
to lescast...@googlegroups.com
Salut � tous,
on vient de commencer les travaux sur la r�p�titions des annotations [1],
qui devrait �tre inclue dans le jdk8, pour faire court, actuellement,
on ne peux pas avoir deux fois la m�me annotations pour, par exemple,
une m�thode,
il faut alors l'encapsuler dans une annotation container

supposons que l'on est:

@interface Resource {
String value();
}

class A {
@Resource("foo") @Resource("bar") // compile pas
void foobar() { ... }
}

donc on d�clare une annotation container genre

@interface Resources {
Resource[] value();
}

et on peut �crire,

class A {
@Resources({@Resource("foo") @Resource("bar")}) // compile maintenant
void foobar() { ... }
}

le probl�me est que c'est pas super lisible, le but de la JEP 120 [1]
est de pouvoir mettre plusieurs annotations sur la m�me d�finition et de
laisser le compilo utiliser l'annotation container pour vous,
donc pour d�clarer l'annotation Resource avec une m�ta annotation
indiquand que l'on peut en avoir plusieurs, genre

@CanBeContainedBy(Resources.class)
@interface Resource {
String value();
}

Bon maintenant, vous vous dites pourquoi je vous raconte tous cela,
en fait j'aimerais identifier toutes les annotations containers qui
existe d�j�
histoire de voir si qu'elle doivent �tre les r�gles pour �tre une
annotations container,
n'�tant pas moi m�me un utilisateur r�gulier des bouzins JEE, spring et
autre play,
je me suis dit pourquoi pas crownsourcer le job sur la liste,
je suis s�re qu'il y a plein de gens qui utilisent des frameworks que je
connais m�me pas.

donc j'attends vos r�ponses :)

[1] http://openjdk.java.net/jeps/120

R�mi

Henri Gomez

unread,
Aug 21, 2012, 9:00:40 AM8/21/12
to lescast...@googlegroups.com
Un sujet passionnant mais qui tombe en période de vacances ;(

A relancer dès Lundi prochain !

Le 21 août 2012 11:41, Rémi Forax <fo...@univ-mlv.fr> a écrit :
> Salut à tous,
> on vient de commencer les travaux sur la répétitions des annotations [1],
> qui devrait être inclue dans le jdk8, pour faire court, actuellement,
> on ne peux pas avoir deux fois la même annotations pour, par exemple, une
> méthode,
> il faut alors l'encapsuler dans une annotation container
>
> supposons que l'on est:
>
> @interface Resource {
> String value();
> }
>
> class A {
> @Resource("foo") @Resource("bar") // compile pas
> void foobar() { ... }
> }
>
> donc on déclare une annotation container genre
>
> @interface Resources {
> Resource[] value();
> }
>
> et on peut écrire,
>
> class A {
> @Resources({@Resource("foo") @Resource("bar")}) // compile maintenant
> void foobar() { ... }
> }
>
> le problème est que c'est pas super lisible, le but de la JEP 120 [1] est de
> pouvoir mettre plusieurs annotations sur la même définition et de laisser le
> compilo utiliser l'annotation container pour vous,
> donc pour déclarer l'annotation Resource avec une méta annotation indiquand
> que l'on peut en avoir plusieurs, genre
>
> @CanBeContainedBy(Resources.class)
> @interface Resource {
> String value();
> }
>
> Bon maintenant, vous vous dites pourquoi je vous raconte tous cela,
> en fait j'aimerais identifier toutes les annotations containers qui existe
> déjà
> histoire de voir si qu'elle doivent être les rêgles pour être une
> annotations container,
> n'étant pas moi même un utilisateur régulier des bouzins JEE, spring et
> autre play,
> je me suis dit pourquoi pas crownsourcer le job sur la liste,
> je suis sûre qu'il y a plein de gens qui utilisent des frameworks que je
> connais même pas.
>
> donc j'attends vos réponses :)
>
> [1] http://openjdk.java.net/jeps/120
>
> Rémi
>
> --
> Vous recevez ce message, car vous êtes abonné au groupe Google Groupes
> lescastcodeurs.
> Pour envoyer un message à ce groupe, adressez un e-mail à
> lescast...@googlegroups.com.
> Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse
> lescastcodeur...@googlegroups.com.
> Pour plus d'options, consultez la page de ce groupe :
> http://groups.google.com/group/lescastcodeurs?hl=fr
>

Pierre-Yves Ricau

unread,
Aug 21, 2012, 9:31:06 AM8/21/12
to lescast...@googlegroups.com
Jvais ptet dire une connerie, mais jcrois qu'il y en a un certain nombre dans Hibernate, et ptet ben Hibernate Search. Jcrois même qu'Emanuel Bernard était assez content de l'idée d'utiliser une inner annotation pour utiliser des listes d'annotations. Genre :

public @interface Resource {
    String value();

    public @interface List {
        Resource[] value();
    }
}

Ce qui permet :

@ Resource.List({ @ Resource("foo"), @ Resource("bar") })
void foobar() { ... }
--
Pierre-Yves Ricau


Frédéric Camblor

unread,
Aug 21, 2012, 10:50:23 AM8/21/12
to lescast...@googlegroups.com
Ca ne touche pas tout à fait à la question initiale (en fait, c'est plutôt "l'inverse" de la question initiale), mais est-il prévu, dans cette JEP, de parler de "stereotypes" d'annotation, sorte d'alias pour un ensemble d'annotations.

Du genre [1] :
@Bean
@Transactionnal(timeout=10000)
public MyService { ... }

qui pourrait se voir "simplifié" en une annotation @Service qu'on déclarerait alors de la manière suivante :
@StereotypeOf(@Bean, @Transactionnal(timeout=10000))
public @interface Service { ... }

Ce qui permettrait d'écrire le code [1] :
@Service
public MyService { ... }

Bon, par contre, on est d'accords qu'on ne pourrait pas (je pense) faire "transiter" un paramètre d'un stéréotype à une annotation aliasée (si par exemple, je souhaitais faire transiter l'attribut "name" de mon annotation @Bean), mais ça serait déjà un premier début.

Peut-être est-ce que cette fonctionnalité existe déjà ?
Moi en tous cas, je sais qu'elle me servirait bien (lorsque j'ai tout un paquasse d'annotations récurrentes sur tout un tas de beans qui ont le même domaine d'intervention).


Frédéric Camblor  
Bordeaux JUG Board member
Jenkins community member & plugin commiter




2012/8/21 Pierre-Yves Ricau <py.r...@gmail.com>

Emmanuel Bernard

unread,
Aug 21, 2012, 12:58:01 PM8/21/12
to lescast...@googlegroups.com
Oui y a deux ecoles que je connais:
- le pluriel quand ca passe Resource -> Resources
- l'annotation inner nommée List que j'ai beaucoup utilisé dans Bean Validation et ailleurs

Je en sais pas si l'inner annotation List est beaucoup répandu. Je crois bien être le premier à l'avoir utilisé celui là.

Apres te lister tous les annotations container ça va faire un sacré boulot, il y en a partout.

2012/8/21 Pierre-Yves Ricau <py.r...@gmail.com>

Thibaud Vibes

unread,
Aug 21, 2012, 1:12:39 PM8/21/12
to lescast...@googlegroups.com

Le 21/08/2012 16:50, Frédéric Camblor a écrit :
Ca ne touche pas tout à fait à la question initiale (en fait, c'est plutôt "l'inverse" de la question initiale), mais est-il prévu, dans cette JEP, de parler de "stereotypes" d'annotation, sorte d'alias pour un ensemble d'annotations.

[...]

Peut-être est-ce que cette fonctionnalité existe déjà ?
Moi en tous cas, je sais qu'elle me servirait bien (lorsque j'ai tout un paquasse d'annotations récurrentes sur tout un tas de beans qui ont le même domaine d'intervention).
Tu veux dire, comme @javax.enterprise.inject.Stereotype ?
http://docs.oracle.com/javaee/6/api/javax/enterprise/inject/Stereotype.html

Rémi Forax

unread,
Aug 21, 2012, 2:28:36 PM8/21/12
to lescast...@googlegroups.com
On 08/21/2012 06:58 PM, Emmanuel Bernard wrote:
> Oui y a deux ecoles que je connais:
> - le pluriel quand ca passe Resource -> Resources
> - l'annotation inner nomm�e List que j'ai beaucoup utilis� dans Bean
> Validation et ailleurs
>
> Je en sais pas si l'inner annotation List est beaucoup r�pandu. Je
> crois bien �tre le premier � l'avoir utilis� celui l�.
>
> Apres te lister tous les annotations container �a va faire un sacr�
> boulot, il y en a partout.

C'est bien l� mon probl�me, tout le monde me dit qu'il y en a bcp donc
je voudrais pas louper un pattern,
est-ce que rechercher les

@interface Foo {
Bar[] value();
}

est suffisant ?, ou est-ce qu'avoir des valeurs par d�faut est
acceptable, genre

@interface Foo {
Bar[] value();
boolean quux() default true;
}

et vu que cela doit �tre fini pour janvier, on aura pas le droit � une
deuxi�me tentative.

R�mi

>
> 2012/8/21 Pierre-Yves Ricau <py.r...@gmail.com
> <mailto:py.r...@gmail.com>>
>
> Jvais ptet dire une connerie, mais jcrois qu'il y en a un certain
> nombre dans Hibernate, et ptet ben Hibernate Search. Jcrois m�me
> qu'Emanuel Bernard �tait assez content de l'id�e d'utiliser une
> inner annotation pour utiliser des listes d'annotations. Genre :
>
> public @interface Resource {
> String value();
>
> public @interface List {
> Resource[] value();
> }
> }
>
> Ce qui permet :
>
> @ Resource.List({ @ Resource("foo"), @ Resource("bar") })
> void foobar() { ... }
>
> Le 21 ao�t 2012 15:00, Henri Gomez <henri...@gmail.com
> <mailto:henri...@gmail.com>> a �crit :
>
> Un sujet passionnant mais qui tombe en p�riode de vacances ;(
>
> A relancer d�s Lundi prochain !
>
> Le 21 ao�t 2012 11:41, R�mi Forax <fo...@univ-mlv.fr
> <mailto:fo...@univ-mlv.fr>> a �crit :
> > Salut � tous,
> > on vient de commencer les travaux sur la r�p�titions des
> annotations [1],
> > qui devrait �tre inclue dans le jdk8, pour faire court,
> actuellement,
> > on ne peux pas avoir deux fois la m�me annotations pour, par
> exemple, une
> > m�thode,
> > il faut alors l'encapsuler dans une annotation container
> >
> > supposons que l'on est:
> >
> > @interface Resource {
> > String value();
> > }
> >
> > class A {
> > @Resource("foo") @Resource("bar") // compile pas
> > void foobar() { ... }
> > }
> >
> > donc on d�clare une annotation container genre
> >
> > @interface Resources {
> > Resource[] value();
> > }
> >
> > et on peut �crire,
> >
> > class A {
> > @Resources({@Resource("foo") @Resource("bar")}) //
> compile maintenant
> > void foobar() { ... }
> > }
> >
> > le probl�me est que c'est pas super lisible, le but de la
> JEP 120 [1] est de
> > pouvoir mettre plusieurs annotations sur la m�me d�finition
> et de laisser le
> > compilo utiliser l'annotation container pour vous,
> > donc pour d�clarer l'annotation Resource avec une m�ta
> annotation indiquand
> > que l'on peut en avoir plusieurs, genre
> >
> > @CanBeContainedBy(Resources.class)
> > @interface Resource {
> > String value();
> > }
> >
> > Bon maintenant, vous vous dites pourquoi je vous raconte
> tous cela,
> > en fait j'aimerais identifier toutes les annotations
> containers qui existe
> > d�j�
> > histoire de voir si qu'elle doivent �tre les r�gles pour
> �tre une
> > annotations container,
> > n'�tant pas moi m�me un utilisateur r�gulier des bouzins
> JEE, spring et
> > autre play,
> > je me suis dit pourquoi pas crownsourcer le job sur la liste,
> > je suis s�re qu'il y a plein de gens qui utilisent des
> frameworks que je
> > connais m�me pas.
> >
> > donc j'attends vos r�ponses :)
> >
> > [1] http://openjdk.java.net/jeps/120
> >
> > R�mi
> >
> > --
> > Vous recevez ce message, car vous �tes abonn� au groupe
> Google Groupes
> > lescastcodeurs.
> > Pour envoyer un message � ce groupe, adressez un e-mail �
> > lescast...@googlegroups.com
> <mailto:lescast...@googlegroups.com>.
> > Pour vous d�sabonner de ce groupe, envoyez un e-mail � l'adresse
> > lescastcodeur...@googlegroups.com
> <mailto:lescastcodeurs%2Bunsu...@googlegroups.com>.
> > Pour plus d'options, consultez la page de ce groupe :
> > http://groups.google.com/group/lescastcodeurs?hl=fr
> >
>
> --
> Vous recevez ce message, car vous �tes abonn� au groupe Google
> Groupes lescastcodeurs.
> Pour envoyer un message � ce groupe, adressez un e-mail �
> lescast...@googlegroups.com
> <mailto:lescast...@googlegroups.com>.
> Pour vous d�sabonner de ce groupe, envoyez un e-mail �
> l'adresse lescastcodeur...@googlegroups.com
> <mailto:lescastcodeurs%2Bunsu...@googlegroups.com>.
> Pour plus d'options, consultez la page de ce groupe :
> http://groups.google.com/group/lescastcodeurs?hl=fr
>
>
>
>
> --
> Pierre-Yves Ricau
>
> http://www.piwai.info
>
> --
> Vous recevez ce message, car vous �tes abonn� au groupe Google
> Groupes lescastcodeurs.
> Pour envoyer un message � ce groupe, adressez un e-mail �
> lescast...@googlegroups.com
> <mailto:lescast...@googlegroups.com>.
> Pour vous d�sabonner de ce groupe, envoyez un e-mail � l'adresse
> lescastcodeur...@googlegroups.com
> <mailto:lescastcodeurs%2Bunsu...@googlegroups.com>.
> Pour plus d'options, consultez la page de ce groupe :
> http://groups.google.com/group/lescastcodeurs?hl=fr
>
>
> --
> Vous recevez ce message, car vous �tes abonn� au groupe Google
> Groupes lescastcodeurs.
> Pour envoyer un message � ce groupe, adressez un e-mail
> � lescast...@googlegroups.com.
> Pour vous d�sabonner de ce groupe, envoyez un e-mail � l'adresse

Emmanuel Bernard

unread,
Aug 21, 2012, 2:49:49 PM8/21/12
to lescast...@googlegroups.com


2012/8/21 Rémi Forax <fo...@univ-mlv.fr>
On 08/21/2012 06:58 PM, Emmanuel Bernard wrote:
Oui y a deux ecoles que je connais:
- le pluriel quand ca passe Resource -> Resources
- l'annotation inner nommée List que j'ai beaucoup utilisé dans Bean Validation et ailleurs

Je en sais pas si l'inner annotation List est beaucoup répandu. Je crois bien être le premier à l'avoir utilisé celui là.

Apres te lister tous les annotations container ça va faire un sacré boulot, il y en a partout.

C'est bien là mon problème, tout le monde me dit qu'il y en a bcp donc je voudrais pas louper un pattern,

est-ce que rechercher les

@interface Foo {
   Bar[] value();
}

est suffisant ?, ou est-ce qu'avoir des valeurs par défaut est acceptable, genre


@interface Foo {
   Bar[] value();
   boolean quux() default true;
}

Personnellement, je n'ai jamais vu le second pattern. Tu as une idée de à quoi pourrait servir les attributs supplémentaires? 

Rémi Forax

unread,
Aug 21, 2012, 3:28:50 PM8/21/12
to lescast...@googlegroups.com
On 08/21/2012 08:49 PM, Emmanuel Bernard wrote:
>
>
> 2012/8/21 R�mi Forax <fo...@univ-mlv.fr <mailto:fo...@univ-mlv.fr>>
>
> On 08/21/2012 06:58 PM, Emmanuel Bernard wrote:
>
> Oui y a deux ecoles que je connais:
> - le pluriel quand ca passe Resource -> Resources
> - l'annotation inner nomm�e List que j'ai beaucoup utilis�
> dans Bean Validation et ailleurs
>
> Je en sais pas si l'inner annotation List est beaucoup
> r�pandu. Je crois bien �tre le premier � l'avoir utilis� celui l�.
>
> Apres te lister tous les annotations container �a va faire un
> sacr� boulot, il y en a partout.
>
>
> C'est bien l� mon probl�me, tout le monde me dit qu'il y en a bcp
> donc je voudrais pas louper un pattern,
> est-ce que rechercher les
>
> @interface Foo {
> Bar[] value();
> }
>
> est suffisant ?, ou est-ce qu'avoir des valeurs par d�faut est
> acceptable, genre
>
> @interface Foo {
> Bar[] value();
> boolean quux() default true;
> }
>
>
> Personnellement, je n'ai jamais vu le second pattern. Tu as une id�e
> de � quoi pourrait servir les attributs suppl�mentaires?

Nan, mais je me m�fie toujours car lorsque tu cr�es une API assez
ouverte comme celle des annotations,
tu as toujours des petits malins qui trouve une fa�on habile d'utiliser
l'API que tu avais jamais pr�vu.

R�mi

Frédéric Camblor

unread,
Aug 21, 2012, 5:21:27 PM8/21/12
to lescast...@googlegroups.com
2012/8/21 Thibaud Vibes <tvi...@onyme.com>
Antonio nous avait en effet parlé de cette annotation lorsqu'il était venu nous présenter JEE6 (il y a bien longtemps maintenant ! ;)).

Je pense que c'est un peu dans l'idée _sauf_ :
- Qu'il s'agit d'une annotation JEE, Rémi nous parle ici de travaux qui arriveraient à terme dans le JDK.
- Du fait qu'il s'agisse d'une annotation JEE, elle est très teintée "web" (cf la notion de scope), alors que c'est une notion qui, selon moi, pourrait être élargie à un domaine beaucoup plus large (n'importe quelle appli java).
- Il y a quelque chose qui me gêne un peu dans la conception des stereotypes tels qu'ils sont présentés : il n'y a pas de distinction entre les annotations qui font parti du "stereotypage" (@Secure, @Transactional etc...) de celles qui ne le sont pas (@Target, @Retention, @Stereotype elle-même...)
J'aurais pensé plus naturellement à une annotation dédiée comme je le dénotais dans mon exemple : @StereotypeOf(@Secure, @Transactional).

Antonio Goncalves

unread,
Aug 22, 2012, 10:26:54 AM8/22/12
to lescast...@googlegroups.com
Wahou, un vrai boulot de fourmi. Dans le monde Java EE il y en a pas mal. Qques pointeurs (non exhaustifs) :

...

...

Ad libidum

Antonio

PS : Bon, je repars me baigner moi


2012/8/21 Rémi Forax <fo...@univ-mlv.fr>
On 08/21/2012 06:58 PM, Emmanuel Bernard wrote:
Oui y a deux ecoles que je connais:
- le pluriel quand ca passe Resource -> Resources
- l'annotation inner nommée List que j'ai beaucoup utilisé dans Bean Validation et ailleurs

Je en sais pas si l'inner annotation List est beaucoup répandu. Je crois bien être le premier à l'avoir utilisé celui là.

Apres te lister tous les annotations container ça va faire un sacré boulot, il y en a partout.

C'est bien là mon problème, tout le monde me dit qu'il y en a bcp donc je voudrais pas louper un pattern,

est-ce que rechercher les

@interface Foo {
   Bar[] value();
}

est suffisant ?, ou est-ce qu'avoir des valeurs par défaut est acceptable, genre


@interface Foo {
   Bar[] value();
   boolean quux() default true;
}

et vu que cela doit être fini pour janvier, on aura pas le droit à une deuxième tentative.

Rémi


2012/8/21 Pierre-Yves Ricau <py.r...@gmail.com <mailto:py.r...@gmail.com>>


    Jvais ptet dire une connerie, mais jcrois qu'il y en a un certain
    nombre dans Hibernate, et ptet ben Hibernate Search. Jcrois même
    qu'Emanuel Bernard était assez content de l'idée d'utiliser une

    inner annotation pour utiliser des listes d'annotations. Genre :

    public @interface Resource {
      String value();

        public @interface List {
          Resource[] value();
      }
    }

    Ce qui permet :

    @ Resource.List({ @ Resource("foo"), @ Resource("bar") })
    void foobar() { ... }

    Le 21 août 2012 15:00, Henri Gomez <henri...@gmail.com
    <mailto:henri...@gmail.com>> a écrit :


        Un sujet passionnant mais qui tombe en période de vacances ;(

        A relancer dès Lundi prochain !

        Le 21 août 2012 11:41, Rémi Forax <fo...@univ-mlv.fr
        <mailto:fo...@univ-mlv.fr>> a écrit :

        > Salut à tous,
        > on vient de commencer les travaux sur la répétitions des
        annotations [1],
        > qui devrait être inclue dans le jdk8, pour faire court,
        actuellement,
        > on ne peux pas avoir deux fois la même annotations pour, par
        exemple, une
        > méthode,

        > il faut alors l'encapsuler dans une annotation container
        >
        > supposons que l'on est:
        >
        > @interface Resource {
        >   String value();
        > }
        >
        > class A {
        >    @Resource("foo") @Resource("bar")   // compile pas
        >    void foobar() { ... }
        > }
        >
        > donc on déclare une annotation container genre
        >
        > @interface Resources {
        >   Resource[] value();
        > }
        >
        > et on peut écrire,

        >
        > class A {
        >    @Resources({@Resource("foo") @Resource("bar")})   //
        compile maintenant
        >    void foobar() { ... }
        > }
        >
        > le problème est que c'est pas super lisible, le but de la

        JEP 120 [1] est de
        > pouvoir mettre plusieurs annotations sur la même définition

        et de laisser le
        > compilo utiliser l'annotation container pour vous,
        > donc pour déclarer l'annotation  Resource avec une méta

        annotation indiquand
        > que l'on peut en avoir plusieurs, genre
        >
        > @CanBeContainedBy(Resources.class)
        > @interface Resource {
        >   String value();
        > }
        >
        > Bon maintenant, vous vous dites pourquoi je vous raconte
        tous cela,
        > en fait j'aimerais identifier toutes les annotations
        containers qui existe
        > déjà
        > histoire de voir si qu'elle doivent être les rêgles pour
        être une
        > annotations container,
        > n'étant pas moi même un utilisateur régulier des bouzins

        JEE, spring et
        > autre play,
        > je me suis dit pourquoi pas crownsourcer le job sur la liste,
        > je suis sûre qu'il y a plein de gens qui utilisent des
        frameworks que je

        > connais même pas.
        >
        > donc j'attends vos réponses :)
        >
        > [1] http://openjdk.java.net/jeps/120
        >
        > Rémi
        >
        > --
        > Vous recevez ce message, car vous êtes abonné au groupe
        Google Groupes
        > lescastcodeurs.
        > Pour envoyer un message à ce groupe, adressez un e-mail à
        > lescastcodeurs@googlegroups.com
        <mailto:lescastcodeurs@googlegroups.com>.

        > Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse
        > lescastcodeurs+unsubscribe@googlegroups.com
        <mailto:lescastcodeurs%2Bunsu...@googlegroups.com>.

        > Pour plus d'options, consultez la page de ce groupe :
        > http://groups.google.com/group/lescastcodeurs?hl=fr
        >

        --
        Vous recevez ce message, car vous êtes abonné au groupe Google
        Groupes lescastcodeurs.
        Pour envoyer un message à ce groupe, adressez un e-mail à
        lescastcodeurs@googlegroups.com
        <mailto:lescastcodeurs@googlegroups.com>.

        Pour vous désabonner de ce groupe, envoyez un e-mail à
        l'adresse lescastcodeurs+unsubscribe@googlegroups.com
        <mailto:lescastcodeurs%2Bunsu...@googlegroups.com>.

        Pour plus d'options, consultez la page de ce groupe :
        http://groups.google.com/group/lescastcodeurs?hl=fr




    --     Pierre-Yves Ricau

    http://www.piwai.info

    --     Vous recevez ce message, car vous êtes abonné au groupe Google
    Groupes lescastcodeurs.
    Pour envoyer un message à ce groupe, adressez un e-mail à
    lescastcodeurs@googlegroups.com
    <mailto:lescastcodeurs@googlegroups.com>.

    Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse
    lescastcodeurs+unsubscribe@googlegroups.com
    <mailto:lescastcodeurs%2Bunsu...@googlegroups.com>.

    Pour plus d'options, consultez la page de ce groupe :
    http://groups.google.com/group/lescastcodeurs?hl=fr


--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes lescastcodeurs.
Pour envoyer un message à ce groupe, adressez un e-mail à lescastcodeurs@googlegroups.com.
Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse lescastcodeurs+unsubscribe@googlegroups.com.

Pour plus d'options, consultez la page de ce groupe : http://groups.google.com/group/lescastcodeurs?hl=fr

--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes lescastcodeurs.
Pour envoyer un message à ce groupe, adressez un e-mail à lescastcodeurs@googlegroups.com.
Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse lescastcodeurs+unsubscribe@googlegroups.com.

Pour plus d'options, consultez la page de ce groupe : http://groups.google.com/group/lescastcodeurs?hl=fr




--
Antonio Goncalves
Software architect and Java Champion

Web site | TwitterLinkedInParis JUG | Devoxx France
Reply all
Reply to author
Forward
0 new messages