IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java EE Discussion :

Erreur "classRemote" not bound [EJB3]


Sujet :

Java EE

  1. #1
    Nouveau membre du Club Avatar de divail
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 65
    Points : 36
    Points
    36
    Par défaut Erreur "classRemote" not bound
    Bonjour,
    J'ai essayé de réaliser le tutorial "http://psecheresse.developpez.com/tutoriel/netbeans/java-ee/partie1/" et je rencontre après le test unitaire l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    There was 1 failure:
    1) testAdditionner(demo.ejb3.calculatrice.CalculatriceBeanTest)junit.framework.AssertionFailedError: demo.ejb3.calculatrice.CalculatriceRemote not bound
    Voici le passage de mon code correspondant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    InitialContext ctx;
            try {
     
                Properties jndiProps = new Properties();
                jndiProps.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
                jndiProps.setProperty("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
                jndiProps.setProperty("java.naming.provider.url","jnp://localhost:1099");
                ctx = new InitialContext(jndiProps);
                Object ref = ctx.lookup("demo.ejb3.calculatrice.CalculatriceRemote");
                CalculatriceRemote calc = (CalculatriceRemote)PortableRemoteObject.narrow(ref,CalculatriceRemote.class);
                expResult = calc.additionner(x,y);
     
            } catch (NamingException ex) {
                fail(ex.getMessage());
            }
    J'ai regardé les messages précédents mais les modifications que j'ai essayé d'entreprendre restaient vaines.

    D'avance merci.

  2. #2
    Membre confirmé
    Avatar de bmoussaud
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    218
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 218
    Points : 555
    Points
    555
    Par défaut
    Voici les pistes que tu peux suivres:
    1/Vérifier que ton EJB est déployé (cf Log du server)
    2/Vérifier que ton serveur écoute bien sur le port que tu précises: jnp://localhost:1099
    3/Faire un page JSP ou Servlet qui effectue un appel local, ce qui permet d'eviter de précisier toutes les options (java.naming.factory.initial,java.naming.factory.url.pkgs et java.naming.provider.url
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    InitialContext ctx;
            try {
                ctx = new InitialContext();
                Object ref = ctx.lookup("demo.ejb3.calculatrice.CalculatriceRemote");
                CalculatriceRemote calc = (CalculatriceRemote)PortableRemoteObject.narrow(ref,CalculatriceRemote.class);
                expResult = calc.additionner(x,y);
            } catch (NamingException ex) {
                fail(ex.getMessage());
            }

  3. #3
    Membre confirmé Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Points : 554
    Points
    554
    Par défaut
    tu déploies sous quoi ?

    ton nom JNDI doit être faux... Essaie avec ctx.lookup("ClasseD'implémentation/remote")
    ou
    ctx.lookup("ArchiveEAR/ClasseD'implémentation/remote")

  4. #4
    Nouveau membre du Club Avatar de divail
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 65
    Points : 36
    Points
    36
    Par défaut
    Je déploie sous JBOSS et j'utilise l'IDE NetBeans

    J'ai fait des tests:
    - avec une jsp le code suivant fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    <%
            int x = 2;
            int y = 2;
     
            int expResult = 4;
            InitialContext ctx;
            try {
                ctx = new InitialContext();
                Object ref = ctx.lookup("demo.ejb3.calculatrice.CalculatriceRemote");
                CalculatriceRemote calc = (CalculatriceRemote)PortableRemoteObject.narrow(ref,CalculatriceRemote.class);
                expResult = calc.additionner(x,y);
            } catch (NamingException ex) {
                System.out.println(ex.getMessage());
            }
            %>
            <%= expResult %>
    Donc le problème se situe soit au niveau des properties soit au niveau du jndi...j'ai essayé différentes formes mais toujours la même erreur...

    D'avance merci.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Points : 495
    Points
    495
    Par défaut
    Salut,
    C'est bien un problème JNDI, mais je pense que les propriétés sont correctes. Le problème pourrait venir du nom jndi auquel l'ejb est "bound".
    Essaies un peu ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ctx.lookup("CalculatriceRemote");

  6. #6
    Nouveau membre du Club Avatar de divail
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 65
    Points : 36
    Points
    36
    Par défaut
    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    int x = 2;
            int y = 2;
            CalculatriceBean instance = new CalculatriceBean();
     
            int expResult = 4;
            int result = instance.additionner(x, y);
            assertEquals(expResult, result);
     
            Context ctx;
            try {
     
                Properties jndiProps = new Properties();
                jndiProps.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
                jndiProps.setProperty("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
                jndiProps.setProperty("java.naming.provider.url","jnp://localhost:1099");
                ctx = new InitialContext(jndiProps);
                Object ref = ctx.lookup("CalculatriceRemote");
                CalculatriceRemote calc = (CalculatriceRemote)PortableRemoteObject.narrow(ref,CalculatriceRemote.class);
                expResult = calc.additionner(x,y);
                System.out.println(expResult);
     
            } catch (NamingException ex) {
                fail(ex.getMessage());
            }
    Et voici l'erreur générée:
    Testcase: testAdditionner(demo.ejb3.calculatrice.CalculatriceBeanTest): FAILED
    CalculatriceRemote not bound
    junit.framework.AssertionFailedError: CalculatriceRemote not bound
    at demo.ejb3.calculatrice.CalculatriceBeanTest.testAdditionner(CalculatriceBeanTest.java:61)
    D'avance merci.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Points : 495
    Points
    495
    Par défaut
    Alors là je ne sais plus trop, sauf de continuer à tatonner en essayant autre chose, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Object ref = ctx.lookup("ejb/CalculatriceRemote");
    Mais en tout cas, sauf à forcer toi-même le nom jndi de ton ejb, la meilleure façon de connaitre celui auquel JBoss l'attache par défaut est de bien regarder le log de JBoss au demarrage quand il déploie l'application. Il devrait y en avoir une ligne qui ressemblerait à quelque chose du genre :
    DEBUG [org.jboss.ejb.EjbModule] Bound jndiName=ejb/CalculatriceRemote
    J'espère que ça puisse t'aider.

  8. #8
    Membre confirmé Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Points : 554
    Points
    554
    Par défaut
    Sinon pour retrouver les noms JNDI accessibles déployés sous JBoss, utilise la console jmx comme dans ce message :

    http://www.developpez.net/forums/sho...31&postcount=9

  9. #9
    Nouveau membre du Club Avatar de divail
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 65
    Points : 36
    Points
    36
    Par défaut
    - Je ne vois pas de ligne de type "DEBUG [org.jboss.ejb.EjbModule] Bound jndiName=ejb/CalculatriceRemote" dans les logs au démarrage
    - Par rapport au contenu visualisé dans la console jmx, j'obtiens les passages suivants pour le jndi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    +- TutoEJB (class: org.jnp.interfaces.NamingContext)
      |   +- CalculatriceBean (class: org.jnp.interfaces.NamingContext)
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     +- CalculatriceRemote (proxy: $Proxy85 implements interface demo.ejb3.calculatrice.CalculatriceRemote,interface org.jboss.ejb3.JBossProxy,interface javax.ejb.EJBObject)
      +- CalculatriceBean (class: org.jnp.interfaces.NamingContext)
    Que cela signifie ?

    D'avance merci.

  10. #10
    Membre confirmé Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Points : 554
    Points
    554
    Par défaut
    Citation Envoyé par divail
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    +- TutoEJB (class: org.jnp.interfaces.NamingContext)
      |   +- CalculatriceBean (class: org.jnp.interfaces.NamingContext)

    Ben alors teste : lookup("TutoEJB/CalculatriceBean/remote")

  11. #11
    Nouveau membre du Club Avatar de divail
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 65
    Points : 36
    Points
    36
    Par défaut
    J'ai testé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    lookup("TutoEJB/CalculatriceBean/remote")
    J'obtiens l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    testAdditionner(demo.ejb3.calculatrice.CalculatriceBeanTest)junit.framework.AssertionFailedError: remote not bound
            at demo.ejb3.calculatrice.CalculatriceBeanTest.testAdditionner(CalculatriceBeanTest.java:61)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    En fait il semble reconnaitre la classe CalculatriceBean mais pas CalculatriceRemote...?

  12. #12
    Membre confirmé Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Points : 554
    Points
    554
    Par défaut
    Ben enlève le remote, ou remplace le par un local si c'est un session bean local ^^

    Je sais pas moi, mais la réponse se trouve forcément dans ta console jms

  13. #13
    Nouveau membre du Club Avatar de divail
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 65
    Points : 36
    Points
    36
    Par défaut
    Il y a sans doute quelque chose que je n'ai pas saisi.
    Voici mes classes:
    CalculatriceBean
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    package demo.ejb3.calculatrice;
     
    import javax.ejb.Stateless;
     
    /**
     *
     * @author aubay1
     */
    @Stateless
    public class CalculatriceBean implements CalculatriceRemote {
     
        /** Creates a new instance of CalculatriceBean */
        public CalculatriceBean() {
        }
     
        public int additionner(int x, int y) {
            //TODO implement additionner
            return x+y;
        }
     
    }
    CalculatriceRemote
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    package demo.ejb3.calculatrice;
     
    import javax.ejb.Local;
     
     
    /**
     * This is the business interface for Calculatrice enterprise bean.
     */
    @Local
    public interface CalculatriceRemote {
        int additionner(int x, int y);
     
    }
    CalculatriceBeanTest (pour tests via junit)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    package demo.ejb3.calculatrice;
     
    import java.util.Properties;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
    import junit.framework.*;
    import javax.rmi.PortableRemoteObject;
     
    /**
     *
     * @author aubay1
     */
    public class CalculatriceBeanTest extends TestCase {
     
        public CalculatriceBeanTest(String testName) {
            super(testName);
        }
     
        protected void setUp() throws Exception {
        }
     
        protected void tearDown() throws Exception {
        }
     
        /**
         * Test of additionner method, of class demo.ejb3.calculatrice.CalculatriceBean.
         */
        public void testAdditionner() {
            System.out.println("additionner");
     
            int x = 2;
            int y = 2;
            CalculatriceBean instance = new CalculatriceBean();
     
            int expResult = 4;
            int result = instance.additionner(x, y);
            assertEquals(expResult, result);
     
            Context ctx;
            try {
     
                Properties jndiProps = new Properties();
                jndiProps.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
                jndiProps.setProperty("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
                jndiProps.setProperty("java.naming.provider.url","localhost:1099");
                ctx = new InitialContext(jndiProps);
                Object ref = ctx.lookup("TutoEJB/CalculatriceBean");
                CalculatriceBean calc = (CalculatriceBean)PortableRemoteObject.narrow(ref,CalculatriceBean.class);
                expResult = calc.additionner(x,y);
                System.out.println(expResult);
     
            } catch (NamingException ex) {
                fail(ex.getMessage());
            }
     
        }
     
    }
    J'ai modifié le "@remote" par "@local" puis dans la classe de test mis "lookup("TutoEJB/CalculatriceBean/local")" et j'obtiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Testcase: testAdditionner(demo.ejb3.calculatrice.CalculatriceBeanTest):	FAILED
    local not bound
    junit.framework.AssertionFailedError: local not bound
            at demo.ejb3.calculatrice.CalculatriceBeanTest.testAdditionner(CalculatriceBeanTest.java:61)
    et si je mets lookup("TutoEJB/CalculatriceRemote") j'obtiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Testcase: testAdditionner(demo.ejb3.calculatrice.CalculatriceBeanTest):	FAILED
    CalculatriceRemote not bound
    junit.framework.AssertionFailedError: CalculatriceRemote not bound
            at demo.ejb3.calculatrice.CalculatriceBeanTest.testAdditionner(CalculatriceBeanTest.java:61)
    Encore merci.

  14. #14
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Replace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @Local
    public interface CalculatriceRemote {
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @Remote
    public interface CalculatriceRemote {

  15. #15
    Nouveau membre du Club Avatar de divail
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 65
    Points : 36
    Points
    36
    Par défaut
    C'est ce que j'avais effectivement mis précédemment et cela ne fonctionnait pas ...

  16. #16
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par divail
    C'est ce que j'avais effectivement mis précédemment et cela ne fonctionnait pas ...
    Pourquoi tu fais ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (CalculatriceBean)PortableRemoteObject.narrow(ref,CalculatriceBean.class);
    ?

    (EDIT: je crois que ça c'était en EJB2, je ne suis pas sûr qu'on en ai besoin en EJB3)

    Normalement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CalculatriceBean calc = (CalculatriceBean) ctx.lookup("TutoEJB/CalculatriceBean/remote");
    Non?

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Points : 495
    Points
    495
    Par défaut
    salut,
    Tu pourrais aussi essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ctx.lookup("CalculatriceBean");
    ou bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ctx.lookup("ejb/CalculatriceBean");

  18. #18
    Futur Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Salut !

    Essaie ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @Stateless
    @Remote(CalculatriceRemote.class)
    public class CalculatriceBean implements CalculatriceRemote {
    ...
    }
    Et, supprime l'autre @Remote bien sûr.

    Voilà. @+

  19. #19
    Nouveau membre du Club Avatar de divail
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 65
    Points : 36
    Points
    36
    Par défaut
    Après avoir fait différents tests suite à vos réponses, j'ai finalement mis le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CalculatriceRemote calc = (CalculatriceRemote) tx.lookup("CalculatriceRemote");
    (
    donc sans "CalculatriceRemote calc = (CalculatriceRemote)PortableRemoteObject.narrow(ref,CalculatriceRemote.class)"
    )

    Et comme j'avais encore des exceptions de type "aop" et "aspect" j'ai rajouté les librairies "jboss-aop-jdk50-client.jar" et "jboss-aspect-jdk50-client.jar" dans les librairies de test.

    Savez pourquoi cela est nécessaire ?
    D'avance merci. ( et merci pour vos réponses

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 93
    Points : 50
    Points
    50
    Par défaut
    salut divial,

    je ne sais pas ou tu en ais avec tes test. Mais voila se que j'ai fait sous netbeans 5.5 pour excuter une application client en remote.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    package enterprise.customer_cmp_appclient;
     
    import javax.naming.InitialContext;
    import java.util.List;
    import javax.ejb.EJB;
    import enterprise.customer_cmp_ejb.ejb.session.CustomerSessionRemote;
    import enterprise.customer_cmp_ejb.persistence.*;
     
    public class CustomerAppClient {
     //@EJB 
        private static CustomerSessionRemote sess;
     
        public static void main(String args[]) {
    	try {
    		InitialContext ic = new InitialContext();
                    String CUSTOMER_ID="99999";
     
                    Object o = ic.lookup("enterprise.customer_cmp_ejb.ejb.session.CustomerSessionRemote");
                    sess = (CustomerSessionRemote) o;
     
                    System.out.println("Searching for customer with id:"+CUSTOMER_ID+" sess ="+sess);
                    Customer searchedCustomer= sess.searchForCustomer(CUSTOMER_ID);
    comme tu peux le remarquer le lookup name correpond a l'arborescence de la class a executer (regarder les imports).

    se code n'est valable que pour une appli en standalone (demarrer depuis le client) pour que cela fonctione depuis le serveur il faut supprimer le loockup est remmetre @EJB enfin que l'injection puisse se faire depuis le sserveur.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [EJB2.1] Erreur not bound
    Par c+cool dans le forum Java EE
    Réponses: 9
    Dernier message: 13/01/2006, 12h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo