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

Questionnaire Java / Java EE


Sujet :

Java

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 196
    Points : 242
    Points
    242
    Par défaut Questionnaire Java / Java EE
    Bonjour,

    Je suis actuellement en train de réaliser un petit questionnaire Java / Java EE. L'idée est de répertorier les points importants du langage Java.

    Si certains d'entre vous pouvaient tout d'abord jeter un œil aux réponses afin de vérifier que je n'ai pas écrit trop d'âneries. Il y a surement des erreurs ainsi il ne faut pour l'instant pas se fier au réponses qui sont écrites avant qu'elles ne soient corrigées par des membres confirmés.

    L'idée est ensuite d'étoffer ce questionnaire, donc si vous avez des idées de nouvelles questions plus poussées portant sur des thèmes non abordés (par exemple la généricité, la réflexivité etc...), ça serait sympa de les poster.

    Voici le questionnaire pour l'instant :

    1) Quand Java a-t-il été présenté pour la première fois ?
    Java a été présenté pour la première fois en 1995

    2) Qui sont les fondateurs de Java ?
    James Gosling et Bill Joy.

    3) Qui s’occupe actuellement du développement de Java ?
    C’est la société Oracle qui a racheté Sun Microsytems en 2009.

    4) Java est-il un langage compilé ou interprété ?
    Java est à la fois un langage compilé et interprété.
    Compilé car le code source est transformé en byte code durant la phase de compilation.
    Interprété car c’est la JVM qui interprète le byte code en langage machine (je n'en suis pas certain). Cela permet notamment la portabilité d’une application sur différents OS.

    5) Qu’est-ce qu’une classe ?
    Une classe définit la structure d’un objet, elle contient des attributs et des méthodes.

    6) Quelle est la différence entre une classe abstraite et une interface ?
    La classe abstraite permet de factoriser du code.
    Une interface permet de présenter un ensemble de services sans se préoccuper de comment ils seront implémentés.

    7) Qu’est-ce que l’opérateur this ?
    Le mot-clé this permet de désigner l’instance de la classe qui est manipulée.

    8) Une interface peut-elle contenir une méthode statique ?
    Non, une interface ne peut en aucun cas contenir une méthode statique.
    Les méthodes déclarées dans une interface sont par défaut abstraite et publique.

    9) Qu’est ce que le downcasting explicite et implicite ? Lequel est interdit ?
    Le downcasting permet de caster une classe vers une de plus bas niveau (qui dérive ou implémente la classe initiale). Le downcasting implicite n’est pas autorisé, il faut toujours préciser le type de classe vers lequel on souhaite effectuer le cast.

    10) Le downcasting explicit est-il toujours autorisé ?
    Non, il faut que la classe qui fait l’objet du cast soit bien du type de l’objet référencé ou d’une classe dérivée.

    11) Qu’est ce que l’upcasting ? Est-il toujours autorisé ?
    L’upcasting permet de caster une classe en une classe de plus haut niveau. L’upcasting est toujours autorisé.

    12) Qu’est qu’un wrapper ?
    Un wrapper aussi appelé enveloppeur est la représentation d’un type primitif sous la forme d’une classe qui contient des méthodes facilitant sa manipulation.

    13) Qu’est ce que l’autoboxing ?
    C’est le mécanisme qui permet de transformer un type primitif en un wrapper. Le cheminement inverse est appelé unboxing.

    14) Qu’est ce que la sérialisation ?
    La sérialisation permet de transformer un objet en un flux de données binaires, permettant de faire transiter des objets à travers le réseau ou encore de les stocker sur disque dur afin de les récupérer à l’identique.

    15) Que signifie le mot clé transient ?
    Le mot clé transient permet d’indiquer à un attribut qu’il ne doit pas être sérialisé.

    16) Qu’est ce qu’une variable de classe ?
    Une variable de classe est une variable commune à toutes les instances de la classe.

    17) Que signifie le mot clé finalize ?
    La méthode finalize est appelée par le garbage collector avant qu’une instance ne soit détruite de la mémoire.

    18) Quels sont les 4 types d’encapsulation en Java ?
    Privée : attribut ou méthode accessible uniquement à l’intérieur de la classe.
    Protégé : attribut ou méthode accessible au sein de la classe ainsi que dans les classes filles et également aux classes du package.
    Publique : attribut ou méthode accessible aussi bien à l’intérieur qu’à l’extérieur de la classe.
    Défaut : attribut ou méthode accessible par les classes présentes dans le même package.

    19) Peut-on déclarer une classe statique ?
    Uniquement si cette classe est définit à l’intérieur d’une classe.

    20) Qu’est ce que la signature d’une méthode ?
    La signature d’une méthode permet d’identifier une méthode dans une classe. Elle se compose du nom de la méthode, de son type de retour ainsi que le nombre et le type des paramètres de la méthode.

    21) Qu’est ce que la surcharge de méthode ?
    La surcharge de méthode intervient lorsque deux méthodes définies dans une même classe possèdent les mêmes noms mais un nombre ou des types d’arguments différents.

    22) Qu’est ce que la redéfinition d’une méthode ?
    La redéfinition d’une méthode intervient lorsqu’une classe dérivée redéfinit une méthode existante dans la classe mère. Elle doit avoir la même signature que la méthode définie dans la classe mère.

    23) Qu’elle est la différence entre un int et un long ?
    Un long permettra de représenter un nombre plus grand qu’un int. Un long est codé sur 8 octets tandis qu’un int est lui codé sur 4 octets.

    24) Quels types de données peuvent être utilisés pour représenter un nombre réel ?
    Les types float et double permettent de représenter un nombre réel.

    25) Que signifient les mots-clés suivants : final, finally et finalize ?
    Final permet de signifier pour une variable que sa valeur ne pourra pas être modifiée.
    Finally est le bloc situé après un Try ou un Try/Catch dont les instructions seront toujours exécutées.
    Finalize correspond à la fonction qui est appelée par le GC avant la destruction d’une instance de la mémoire.

    26) Qu’est-ce qu’un EJB ?
    Un EJB est une classe permettant d’exécuter la logique métier au sein d’une application Java EE.

    27) Qu’est-ce qu’une servlet, une jsp ?
    Une servlet est une classe qui s'exécute sur le serveur pour traiter une requête HTTP.
    Une jsp (Java Server Pages) correspond à une page web dont le contenu est dynamique du fait qu’elle permet d’exécuter du code java côté serveur. Au moment de l’appel d’une page JSP, le moteur de JSP va transformer la page JSP en servlet qui sera ainsi exécutée côté serveur afin de renvoyer une page html au navigateur.

    28) Une méthode non statique peut-elle manipuler des variables statiques ?
    Oui, les variables statiques sont accessibles par toutes les instances de la classe.

    29) En quoi consiste JNI ?
    JNI (Java Native Interface) permet d’écrire du code natif (spécifique au matériel et au système d’exploitation de la machine)

    30) L’héritage multiple est-il possible en Java ?
    Non contrairement au C++, l’héritage multiple est interdit en Java.

    31) Une HashMap accepte-t-elle deux clés identiques ?
    Non une Map permet de stocker des tuples <clé, valeur> ou la clé doit obligatoirement être unique.

    32) Qu’est-ce qu’une classe immuable ?
    Une classe immuable est une classe qui définit des objets dont la valeur ne pourra être modifiée après l’initialisation. Exemple : les wrappers, la classe String.

    33) Qu’elle est la différence entre String et StringBuffer ?
    String est une classe immuable contrairement à StringBuffer.

    34) Qu’elle classe est la plus adaptée pour concaténer plusieurs chaînes de caractères ?
    La classe StringBuffer, car elle n’est pas immuable alors que la classe String renverra une nouvelle chaîne de caractères à chaque utilisation de l’opérateur +.

    35) Est-il possible de faire un override sur une méthode statique ?
    Faux, on ne peut pas redéfinir une méthode statique

    36) Une méthode d’une interface est publique et abstraite par défaut ?
    Oui, on ne peut déclarer une méthode privée ou protégée dans une interface.

    37) Qu’est-ce qu’une inner class ?
    Une inner classe (classe interne) correspond à une classe définie à l’intérieur d’une autre classe.

    38) Une variable déclarée dans une interface est par défaut publique, statique et finale ?
    Vrai, on ne peut pas modifier une variable déclarée au sein d’une interface.

    39) Le passage de paramètre dans une méthode se fait par valeur ou par référence ?
    En java, les paramètres pour les types primitifs sont passés par valeur. Pour les types objets c’est une copie de la référence Java qui est transmise. Ainsi lorsqu’on change la valeur de l’objet passé en paramètre, cela n’affecte pas l’objet qui a été passé en paramètre lors de l’appel de la méthode.
    Exemple :
    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
    public class TestParam {
    
    	private int i;
    	
    	public TestParam(int i) {
    		this.i = i;
    	}
    	
    	public int getI() {
    		return i;
    	}
    	
    	public static void modifyTestParam (TestParam t) {
    		t = new TestParam(5);
    	}
    	
    	public static void main(String[] args) {
    		TestParam t1 = new TestParam(1);
    		TestParam.modifyTestParam(t1);
    		System.out.println(t1.getI()); -> Retourne 1
    	}
    
    }
    40) Quelles sont les étapes à effectuer pour créer une classe immuable ?
    Il faut :
    - Déclarer la classe en tant que final pour éviter la redéfinition de méthodes par une classe fille.
    - Que tous les champs soient privés et final pour interdire toutes modifications après l’initialisation.
    - Ne pas définir les setters, ni de méthodes permettant de modifier la valeur des données de la classe.
    - Que pour une méthode dont le but est de modifier les valeurs de l’objet qu’elle renvoie une nouvelle instance de l’objet.
    - Que les getters renvoient une valeur immuable ou une copie de l’objet.
    - Ne pas implémenter l’interface Cloneable

    41) Quelle API Java permet de se connecter à une base de données ?
    JDBC

    42) Quelle est la différence entre la méthode equals et == ?
    == fait le test sur l’égalité des deux objets (si l’adresse en mémoire est identique).
    equals fait le test sur l’égalité de la valeur (du contenu) de deux objets.

    43) A quoi sert la méthode hashCode() ?
    La fonction de hashCode sera utilisée pour retrouver des objets dans une table de hachage (HashMap par exemple) avec un temps de performance minimal.
    Deux objets identiques doivent renvoyer la même valeur de hachage. Elle doit également être en cohérence avec la méthode equals, en effet deux objets dont la méthode equals retourne true doivent retourner la même valeur de hachage. Cependant deux objets n’ayant pas les mêmes valeurs peuvent très bien renvoyer la même valeur de hachage.

    D’après ce que j’ai compris, une HashMap fonctionne comme un tableau de Vecteur d’une taille donnée T. Pour stocker un couple <clé, valeur>, on hache la clé, ce qui nous retourne un nombre que l’on calcule modulo T pour récupérer l’index i du tableau. On stocke le couple <clé, valeur> dans le vecteur situé à l’index i du tableau. Pour récupérer un couple, on fait le même processus pour récupérer l’index du tableau et on utilise la méthode equals pour retrouver la clé dans le vecteur.
    On comprend donc que deux objets dont la méthode equals retourne true, doivent retourner la même valeur de hachage sinon dans le cas contraire on ne retrouvera pas le bon indice du tableau.

    44) Différence entre Comparable et Comparator ?
    Comparable permet de définir la comparaison la plus naturelle pour cet objet. Elle est implémentée directement au sein de la classe.
    Comparator permet de définir une comparaison possible selon un besoin particulier. On implémente généralement l’interface Comparator dans une nouvelle classe.

    45) Singleton est-il thread safe ?
    Le design pattern est thread safe si l’on ajoute le mot-clé synchronized à la méthode getInstance().

    46) Quels sont les différents types de classes internes ?
    - Les classes statiques. Elles ne font référence à aucune instance de la classe englobante.
    - Les classes membres qui sont des classes non statiques déclarées à l’intérieur d’une classe.
    - Les classes locales. Elles sont déclarées à l’intérieur d’une méthode.
    - Les classes anonymes. Elles sont déclarées directement au sein d’une instruction. Elles permettent directement d’implémenter une interface où d’étendre une classe.

    47) Quelle est la différence entre JAR, WAR et EAR ?
    War contient une application web (JSP/servlet).
    Jar contient une application Java / EJB.
    Ear peut contenir à la fois des Jars et des Wars.

    48) A quoi sert l’opérateur instanceof ?
    L’opérateur instanceof permet de vérifier si un objet correspond l’instance d’une classe particulière.

    49) Différence entre throw et throws ?
    Throw est utilisé pour lancer une exception.
    Thows permet d’indiquer qu’une méthode est susceptible de lever une exception.

    50) Expliquer le fonctionnement d’une exception contrôlée et d’une exception non-contrôlée.
    Les exceptions contrôlées héritent de la classe Exception et doivent obligatoirement être gérées par l’utilisateur
    Les exceptions non contrôlées héritent de RuntimeException et n’obligent pas l’utilisateur à la gestion de l’exception.

    51) A quoi correspond l’opérateur ^ ?
    Il correspond à l’opérateur OU exclusif.

  2. #2
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Les erreurs que j'ai remarqués :

    9) Qu’est ce que le downcasting explicite et implicite ? Lequel est interdit ?
    Le downcasting permet de caster une classe vers une de plus bas niveau (qui dérive ou implémente la classe initiale). Le downcasting implicite n’est pas autorisé, il faut toujours préciser le type de classe vers lequel on souhaite effectuer le cast.
    J'aurai plutôt dit "les deux". Avoir besoin de downcast représente généralement un problème d'abstraction/de conception.

    18) Quels sont les 4 types d’encapsulation en Java ?
    Privée : attribut ou méthode accessible uniquement à l’intérieur de la classe.
    Protégé : attribut ou méthode accessible au sein de la classe ainsi que dans les classes filles.
    Publique : attribut ou méthode accessible aussi bien à l’intérieur qu’à l’extérieur de la classe.
    Défaut : attribut ou méthode accessible par les classes présentes dans le même package.
    Protected est faux. Il est accessible à la classe, à ses filles, mais aussi à son package.

    25) Que signifient les mots-clés suivants : final, finally et finalize ?
    Final permet de signifier pour une variable que sa valeur ne pourra pas être modifiée.
    Finally est le bloc situé après un Try/Catch dont les instructions seront toujours exécutées.
    Finalize correspond à la fonction qui est appelée par le GC avant la destruction d’une instance de la mémoire.
    Finally n'a pas besoin d'être accompagné d'un try/catch, juste d'un try. Le contre-exemple étant les blocs try/finally pour la gestion des ressources en Java <1.7

    31) Une HashMap accepte-t-elle deux clés identiques ?
    Non une Map permet de stocker des tuples <clé, valeur> ou la clé doit obligatoirement être unique.
    En complément : tenter de mettre une n-ième fois la clé mets simplement à jour la valeur.

    33) Qu’elle est la différence entre String et StringBuffer ?
    String est une classe immuable contrairement à StringBuffer.

    34) Qu’elle classe est la plus adaptée pour concaténer plusieurs chaînes de caractères ?
    La classe StringBuffer, car elle n’est pas immuable alors que la classe String renverra une nouvelle chaîne de caractères à chaque utilisation de l’opérateur +.
    Il faudrait plutôt poser les questions avec StringBuilder, je pense. Les deux ont le même principe, mais StringBuffer est synchronisée, donc plus coûteuse.
    De mémoire, l'opération de concaténation entre deux chaînes fait quelque chose comme :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    StringBuilder builder = new StringBuilder(firstString);
    builder.append(secondString);
    return builder.toString();
    Question bonus pour le coup : quelle est la différence entre StringBuilder et StringBuffer ?

    45) Singleton est-il thread safe ?
    Le design pattern est thread safe si l’on ajoute le mot-clé synchronized à la méthode getInstance().
    Je trouve cette question bizarre. Singleton étant juste un concept, ça ne peut pas être le cas. Son implémentation, par contre, peut être soumise à caution.

    Je passe sur toute la partie Java web par contre... n'en ayant jamais fait.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  3. #3
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 320
    Points : 3 740
    Points
    3 740
    Billets dans le blog
    12
    Par défaut
    6) Quelle est la différence entre une classe abstraite et une interface ?
    La classe abstraite permet de factoriser du code.
    Une interface permet de présenter un ensemble de services sans se préoccuper de comment ils seront implémentés.
    => Avec Java 8, il sera possible de créer des méthodes par défaut.
    Personnellement, je dirais que les interfaces représente la couche la plus abstraite d'un concept, que sont des classes sans attributs (sauf constantes), et qu'ils sont là pour éviter les pièges de l'héritage multiple (comme le dod).



    8) Une interface peut-elle contenir une méthode statique ?
    Non, une interface ne peut en aucun cas contenir une méthode statique.
    Les méthodes déclarées dans une interface sont par défaut abstraite et publique.
    => J'ai un doute concernant la visibilité public, parce qu'il est possible de ne pas préciser le type d'accès. Du coup soit c'est public par défaut, ou soit "default" est accepté.
    8 et 36 tu te répètes


    16) Qu’est ce qu’une variable de classe ?
    Une variable de classe est une variable commune à toutes les instances de la classe.
    => Tu ne confonds pas avec attribut static ? :/



    44) Différence entre Comparable et Comparator ?
    Comparable permet de définir la comparaison la plus naturelle pour cet objet. Elle est implémentée directement au sein de la classe.
    Comparator permet de définir une comparaison possible selon un besoin particulier. On implémente généralement l’interface Comparator dans une nouvelle classe.
    => Je dirais qu'on utilise plus Comparator sous forme de classe Anonyme dans la méthode sort de Collections.
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 196
    Points : 242
    Points
    242
    Par défaut
    Finally n'a pas besoin d'être accompagné d'un try/catch, juste d'un try.
    Protected est faux. Il est accessible à la classe, à ses filles, mais aussi à son package.
    Exact merci pour ces corrections

    J'aurai plutôt dit "les deux". Avoir besoin de downcast représente généralement un problème d'abstraction/de conception.
    Le downcasting explicite est autorisé par le compilateur, en revanche il est peut être déconseillé dans une application.

    => Tu ne confonds pas avec attribut static ? :/
    Pour moi variable de classe = variable statique, c'est juste l'appellation qui diffère.

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Points : 1 825
    Points
    1 825
    Par défaut
    7) Qu’est-ce que l’opérateur this ?
    Le mot-clé this permet de désigner l’instance de la classe qui est manipulée.


    ou un autre Constructeur de la classe quand on appelle un constructeur dans un autre constructeur


    18) Quels sont les 4 types d’encapsulation en Java ?
    Privée : attribut ou méthode accessible uniquement à l’intérieur de la classe.
    Protégé : attribut ou méthode accessible au sein de la classe ainsi que dans les classes filles et également aux classes du package.



    tu peux aussi avoir des Constructeurs en private ou protected: les enumerations peuvent etre déclarées sous forme de classe avec un (ou des) constructeur(s) private.



    27) Qu’est-ce qu’une servlet, une jsp ?
    Une servlet est une classe qui s'exécute sur le serveur pour traiter une requête HTTP.



    pas seulement, GenericServlet permet à une servlet de de traiter plusieurs protocole: http, smtp, ftp, etc...

    HttpServlet étant une sous-classe de GenericServlet


    30) L’héritage multiple est-il possible en Java ?
    Non contrairement au C++, l’héritage multiple est interdit en Java.


    si, dans le cas particulier des interfaces, une interface peut hériter (extends) de plusieurs interfaces

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Citation Envoyé par Gugelhupf Voir le message
    8) Une interface peut-elle contenir une méthode statique ?
    Non, une interface ne peut en aucun cas contenir une méthode statique.
    Les méthodes déclarées dans une interface sont par défaut abstraite et publique.
    => J'ai un doute concernant la visibilité public, parce qu'il est possible de ne pas préciser le type d'accès. Du coup soit c'est public par défaut, ou soit "default" est accepté.
    Tout ce qu'on met dans une interface est implicitement et obligatoirement public : méthodes, variables, classes, interfaces et enums, si c'est dans une interface, c'est public.
    On peut indiquer explicitement le mot-clé public, mais il est superflu.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Citation Envoyé par Hizin Voir le message
    J'aurai plutôt dit "les deux". Avoir besoin de downcast représente généralement un problème d'abstraction/de conception.
    Pas forcément. Dans swing, par exemple, les listeners baladent souvent des parametres sous forme d'Object. Il est donc necessaire de downcaster...


    Citation Envoyé par Gugelhupf Voir le message
    => J'ai un doute concernant la visibilité public, parce qu'il est possible de ne pas préciser le type d'accès. Du coup soit c'est public par défaut, ou soit "default" est accepté.
    J'ajouterais que tout ce qui est definit dans une interface DOIT etre public. En effet, une interface définit un contrat que toutes les classes qui l'implémentent doivent respecter. Si certains membres pouvaient etre autre chose que public, selon les cas, on pourrait ne pas pouvoir utiliser les attributs d'une classe implémentant une interface (dans le cas default, une classe d'un autre package) donc le contrat ne serait pas respecté.

    Citation Envoyé par oliv37 Voir le message
    4) Java est-il un langage compilé ou interprété ?
    Java est à la fois un langage compilé et interprété.
    Compilé car le code source est transformé en byte code durant la phase de compilation.
    Interprété car c’est la JVM qui interprète le byte code en langage machine (je n'en suis pas certain). Cela permet notamment la portabilité d’une application sur différents OS.
    En fait, je ne sais pas si c'est toujours le cas mais les implémentation de JVM les plus classiques font de la compilation à la volée (elles convertissent le bytecode en code natif au fur et à mesure de l'execution). On peut ajouter qu'un avantage est que ca permet de faire un code natif optimisé sur la machine hote. Et meme d'optimiser certaines parties de code particulierement utilisées (on parle de compilation dynamique).

    Citation Envoyé par oliv37 Voir le message
    19) Peut-on déclarer une classe statique ?
    Uniquement si cette classe est définit à l’intérieur d’une classe.
    Je prendrais plutot les choses dans l'autre sens. On disant : peut on instancier une classe interne depuis une autre classe que celle ou elle est définie ? => Oui si celle-ci est public et static.
    Je le vois comme ca parce qu'une classe principale est forcément static (non liée à une autre classe). Et la différence entre une classe interne static et non static est le lien avec la classe ou elle est définie.

    Citation Envoyé par oliv37 Voir le message
    24) Quels types de données peuvent être utilisés pour représenter un nombre réel ?
    Les types float et double permettent de représenter un nombre réel.
    Comme dans la question précédente, j'ajouterais que le float est codé sur 4 bits et le double sur 8.

    Citation Envoyé par oliv37 Voir le message
    29) En quoi consiste JNI ?
    JNI (Java Native Interface) permet d’écrire du code natif (spécifique au matériel et au système d’exploitation de la machine)
    Non, JNI permet d'utiliser une librairie systeme (dll, so, ...). Par ailleurs, j'incluerais bien une petite référence à JNA et, pourquoi pas, quelle est la différence entre les 2 ?

    Citation Envoyé par oliv37 Voir le message
    33) Qu’elle est la différence entre String et StringBuffer ?
    String est une classe immuable contrairement à StringBuffer.
    Il y a plus de différences que ca entre un String et StringBuffer. C'est pour ca que je ne poserais pas la question comme ca mais plutot sur l'utilisation : Pour faire des traitements de chaines de caracteres, quelle classe faut il utiliser (grosso modo ta question 34) ?

    Citation Envoyé par oliv37 Voir le message
    35) Est-il possible de faire un override sur une méthode statique ?
    Faux, on ne peut pas redéfinir une méthode statique
    C'est pas faux, c'est non

    Citation Envoyé par oliv37 Voir le message
    39) Le passage de paramètre dans une méthode se fait par valeur ou par référence ?
    En java, les paramètres pour les types primitifs sont passés par valeur. Pour les types objets c’est une copie de la référence Java qui est transmise. Ainsi lorsqu’on change la valeur de l’objet passé en paramètre, cela n’affecte pas l’objet qui a été passé en paramètre lors de l’appel de la méthode.
    J'ajouterais bien à ta classe TestParam quelque chose qui montre le passage par référence :
    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
    public class TestParam {
    
    	private int i;
    	
    	public TestParam(int i) {
    		this.i = i;
    	}
    	
    	public int getI() {
    		return i;
    	}
    	
    	public int setI(int i) {
    		this.i = i;
    	}
    	
    	public static void modifyTestParam (TestParam t) {
    		t = new TestParam(5);
    	}
    	
    	public static void modifyTestParam2 (TestParam t) {
    		t.setI(3);
    	}
    	
    	public static void main(String[] args) {
    		TestParam t1 = new TestParam(1);
    		TestParam.modifyTestParam(t1);
    		System.out.println(t1.getI()); -> Retourne 1
    		TestParam.modifyTestParam2(t1);
    		System.out.println(t1.getI()); -> Retourne 3
    	}
    
    }
    Citation Envoyé par oliv37 Voir le message
    40) Quelles sont les étapes à effectuer pour créer une classe immuable ?
    Il faut :
    - Déclarer la classe en tant que final pour éviter la redéfinition de méthodes par une classe fille.
    - Que tous les champs soient privés et final pour interdire toutes modifications après l’initialisation.
    - Ne pas définir les setters, ni de méthodes permettant de modifier la valeur des données de la classe.
    - Que pour une méthode dont le but est de modifier les valeurs de l’objet qu’elle renvoie une nouvelle instance de l’objet.
    - Que les getters renvoient une valeur immuable ou une copie de l’objet.
    - Ne pas implémenter l’interface Cloneable
    La, je ne rentrerais pas dans ces détails. Par exemple, je ne vois pas le probleme à ce qu'une classe immuable implémente Cloneable (meme si je suis d'accord que ca ne sert à rien). Par ailleurs, la classe peut ne pas etre final mais avoir un constructeur private. Elle peut aussi definir des setters mais ils ne doivent pas modifier les attributs de la classe (par exemple, les listes immuables de Collections.unmodifiableList). De plus, j'ajouterais que dans la liste que tu donnes, il faudrait ajouter que toute référence à une classe non immuable dans une classe immuable doit etre gardée sous forme de copie (si on passe un java.util.Date au constructeur d'une classe immuable, elle doit garder lune copie et pas l'original si elle a besoin de la conserver).

    Citation Envoyé par oliv37 Voir le message
    45) Singleton est-il thread safe ?
    Le design pattern est thread safe si l’on ajoute le mot-clé synchronized à la méthode getInstance().
    Ca dépend de l'implémentation. Il suffit de lire les tutos sur Singleton pour se rendre compte que c'est pas forcément aussi simple...

  8. #8
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 196
    Points : 242
    Points
    242
    Par défaut
    Citation Envoyé par Hizin Voir le message
    Question bonus pour le coup : quelle est la différence entre StringBuilder et StringBuffer ?
    L'objet StringBuffer est synchronisé tandis que StringBuilder ne l'est pas.
    Ainsi dans une application multi-threadé, il faut utiliser StringBuffer, dans le cas contraire il est préférable d'utiliser StringBuilder pour obtenir de meilleures performances.

  9. #9
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Citation Envoyé par oliv37 Voir le message
    L'objet StringBuffer est synchronisé tandis que StringBuilder ne l'est pas.
    Ainsi dans une application multi-threadé, il faut utiliser StringBuffer, dans le cas contraire il est préférable d'utiliser StringBuilder pour obtenir de meilleures performances.
    Enfin personnellement, même dans mes applis multithreadées, mes différents threads ont chacun leur StringBuilder. Ils en partagent pas un en commun.
    Je veux bien croire que le besoin puisse arriver dans certaines circonstances précises, mais elles me semblent assez rare pour considérer que StringBuffer n'a plus aucune raison d'exister (protéger un StringBuilder par synchronized n'étant pas plus compliqué que pour n'importe quelle autre ressource partagée.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 196
    Points : 242
    Points
    242
    Par défaut
    Après vos réponses sur les premières questions faisant référence au langage Java, sur le même principe je propose une nouvelle série de questions plus orientée sur Java EE.

    Je répète que les réponses à l'heure actuelle ne sont pas fiables, elles doivent tout d'abord être corrigées par des membres professionnels.

    1) Que se passe-t-il au niveau de la servlet lorsque qu’une requête faisant référence à celle-ci arrive sur le serveur ?
    Lorsqu’une requête arrive sur le serveur d’application, ce dernier regarde si la servlet correspondante existe déjà. Si ce n’est pas le cas, alors il créé une instance de la servlet et la méthode init est appelée. La servlet peut ensuite traiter la requête. Pour chaque requête arrivant sur le serveur un thread sera créé afin de traiter la méthode service() qui appellera ensuite la méthode doPost ou doGet. Lors de la destruction de la servlet, la méthode destroy est appelée.

    2) Où doit être placé le fichier web.xml dans une application web ?
    Le fichier web.xml doit être placé dans le dossier WEB-INF.

    3) Quels sont les 3 contextes d’exécutions d’une servlet ?
    - Le contexte d’application : Il représente le contexte global à toutes les servlet.
    - Le contexte de session : Il représente le contexte de la session en cours si elle existe.
    - Le contexte de la requête : Il représente le contexte de la requête en cours.

    4) Dans quel package est contenu l’api Servlet ?
    L’api Servlet est contenue dans le package javax.servlet

    5) Comment définit-on les paramètres d’initialisation d’une servlet ?
    On les définit habituellement dans le descripteur de déploiement web.xml à l’aide des balises <init-param>, <param-name>, <param-value>

    6) A quoi correspond l’objet ServletConfig ?
    ServletConfig correspond à l’objet représentant les paramètres d’initialisation de la servlet. Cet objet est passé en paramètre de la méthode init().

    7) Comment définit-on les paramètres d’application d’une servlet ?
    On les définit dans le fichier web.xml grâce aux balises <context-param>, <param-name>, <param-value>.

    8) Quelle est la méthode appelée lors de la création d’une servlet ?
    C’est la méthode init() qui est appelée en premier lors de la création d’une servlet.

    9) Quelle est la méthode appelée lors de la destruction d’une servlet ?
    La méthode destroy().

    10) Quels objets modélisent : le contexte d’application, le contexte de la session, la configuration de la servlet ?
    Le contexte de l’application est modélisé par l’objet ServletContext, celui de la session par l’objet HttpSession (pour une requête http). La configuration de la servlet est modélisée par l’objet ServletConfig.

    11) A quoi correspondent le ContextPath et le ServletPath ?
    ContextPath correspond au nom de l’application web.
    ServletPath correspond au nom de la servlet dans l’url, il a été défini par l’utilisateur dans le web.xml.

    12) A quoi correspondent les objets ServletResponse et ServletRequest ?
    ServletResponse et ServletRequest correspondent respectivement aux objets contenant les informations de la réponse et de la requête. C’est grâce à ces objets que la servlet peut traiter la requête et renvoyer une réponse.

    13) Expliquer le fonctionnement d’une session avec le protocole http.
    Une session est utilisée afin de palier le fait que le protocole http est sans état signifiant donc qu’on ne peut se souvenir d’un utilisateur à travers les différentes requêtes. Ainsi une requête est créée par le serveur permettant de suivre un utilisateur pendant une certaine durée d’activité. Le serveur fournit au client un identifiant de session unique. Ainsi à chaque fois que le client émettra une requête vers le serveur, il lui indiquera son identifiant de session. Il y a deux façons de le stocker. Soit le client accepte les cookies et peut donc sauvegarder cet identifiant dans un cookie. Soit il peut passer cet identifiant en tant que paramètre dans l’url. Le nom du cookie ou du paramètre dans l’url sera JSESSIONID.

    14) Comment créer/fermer une session avec l’objet HttpServletRequest ?
    Pour créer une Session on utilise la méthode getSession(true) cela permet de créer une session si elle n’existe pas déjà. Pour fermer une session on utilise la méthode invalidate().

    15) A l’aide de quelle balise placée dans le web.xml gère-t-on l’ordre de chargement des servlet ?
    C’est avec la balise <load-on-startup> que l’on gère l’ordre de chargement des servlets. Son paramètre correspond à un entier supérieur ou égal à 0. La servlet chargée en premier lieu sera celle qui aura le plus petit paramètre dans sa balise <load-on-startup>

    16) Expliquer le fonctionnement d’un Filtre.
    Un filtre agit comme un intercepteur sur une servlet. Lorsqu’une requête faisant référence à une servlet arrive sur le serveur, et qu’un filtre est déclaré sur cette servlet, alors le serveur appellera la méthode doFilter de ce filtre au lieu d’entrer directement dans la méthode doGet ou doPost de la servlet.

    17) Quelle interface doit être implémentée pour définir un filtre dans l’application ?
    C’est l’interface Filter qu’il faut implémenter pour définir un filtre. Il s’agira ensuite d’implémenter la méthode doFilter.

    18) Comment déclarer un rôle dans une application web ?
    Un rôle permet de restreindre l’accès de certaines pages à un groupe défini d’utilisateurs.
    On déclare un rôle dans le fichier web.xml à l’aide des balises <security-role>, <role-name>.

    19) A quoi sert la balise <login-config> ?
    Cette balise permet de définir la méthode d’authentification d’un utilisateur.

    20) Qu’est ce qu’un Realm ?
    Un realm correspond à un élément permettant d’assurer l’authentification et les habilitations d’un ensemble d’utilisateurs. Ainsi on peut authentifier un utilisateur grâce à une base de données, un annuaire LDAP, un document XML (ne doit pas être utiliser en production).

    21) Quel est le rôle d’une JSP ?
    Une JSP permet de définir des pages dynamiques avec la possibilité au développeur d’écrire du code java au sein d’une page html.

    22) A quoi sert une balise JSP ?
    Une balise JSP va permettre d’écrire simplement du code java au sein de la page.

    23) Quelles sont les 4 principales balises incluses dans JSP ?
    - Les directives : elles permettent de donner des informations sur la page. <%@directive %>
    - Les expressions : elles permettent de retourner des chaînes de caractères au navigateur. Le code à l’intérieur des balises est passé en argument de la fonction out.print(). <%= %>
    - Les scriptlets : elles permettent d’écrire du code java qui sera recopié tel quel dans la servlet. <% %>
    - Les déclarations : elles permettent de déclarer une variable ou une méthode. <%! %>

    24) Qu’est-ce qu’un tag JSP ?
    Un tag est une simple balise XML a laquelle est associée une classe Java. A la compilation de la page JSP, ces tags seront remplacés par le code de la classe java en question. Il permet donc de simplifier l’écriture d’un code java dans une page JSP.
    Un tag est composé de la manière suivante <prefixe :nomDuTag attributs…> Corps </prefixe :nomDuTag>
    Le prefixe permet de renseigner la librairie utilisée.
    Le nom du tag correspond au nom du tag de la librairie.
    On peut ensuite définir un ensemble d’attributs puis un corps.

    25) Citer les différents contextes que peut prendre un bean qui est rattaché à une page JSP.
    Un bean rattaché à une JSP, peut exister dans les contextes suivant :
    - page : les objets sont uniquement accessibles dans la page JSP en question.
    - request : les objets sont accessibles durant l’existence de la requête.
    - session : les objets sont accessibles durant l’existence de la session.
    - application : les objets sont accessibles au sein de toute l’application.

    26) Quelles sont les 3 règles que doit respecter un bean ?
    Il doit implémenter l’interface Serializable, il doit posséder un constructeur vide et il doit déclarer les getters/setters de ses différentes propriétés.

    27) Comment déclarer un bean dans un page jsp ?
    On déclare un bean dans une page jsp à l’aide du tag <jsp:useBean >
    On doit déclarer un attribut id qui correspondra au nom du champ faisant référence au bean. Il faut également préciser la classe correspondante au bean.

    28) Quels paramètres doivent être saisis lors de la réutilisation d’un bean déjà créé ?
    Les paramètres beanName et scope doivent obligatoirement être déclarés.

    29) Qu’est ce qu’une Expression Language ?
    Les EL permettent de manipuler des données au sein d’une page JSP plus simplement qu’avec les scriptlets Java. Ils permettent notamment d’accéder très simplement aux beans associés à la JSP.

    30) Qu’est-ce qu’une bibliothèque de tags ?
    Une librairie de tags permet de regrouper un ensemble de tags décrivant un ensemble d’actions destinées à être utilisées dans une page JSP. Cela permet de minimiser l’utilisation des scriplets. Pour créer une librairie de tags il faut définir ces éléments :
    - Le Tag Library Descriptor (.tld) qui permet d’effectuer le mapping entre les tags et les classes JSP. Il correspond à un document XML
    - Les classes Java décrivant le fonctionnement des différents tags.
    Les balises standard aux pages JSP sont préfixées par jsp, exemple <jsp:useBean >

    31) Comment déclarer une librairie de tags dans une page jsp ?
    Grâce à la balise directive suivante : <%@taglib prefix= uri= %>

    32) Comment se nomme la bibliothèque standardisée à l’api JSP ? Citer les quatre librairies qui composent cette bibliothèque et expliquer leur rôle ?
    La bibliothèque standardisée à l’api JSP est la JSTL (Java Standard Tag Library)
    Les quatre librairies sont :
    - core (c) : Elle regroupe tous les tags de base de la JSTL. Les autres librairies utilisent la librairie core.
    - format (fmt) : Elle expose toutes les fonctionnalités d’affichage de données (dates, messages i18n…).
    - xml (x) : Elle permet de traiter le format xml.
    - sql (sql) : Elle permet d’interagir avec une BDD.

    33) Qu’est ce que JSF ?
    JSF est un framework MVC basé sur les composants. C'est-à-dire qu’il fonctionne avec une unique servlet jouant le rôle de Front Controller qui va regrouper, convertir, valider les paramètres de la requête afin de mettre à jour le modèle. Les interfaces sont définies dans des vues qui contiendront les informations indiquant au Front Controller comment regrouper, convertir et mettre à jour le modèle. Le framework est construit sur l’api Servlet et contient une bibliothèque de tags similaire à la JSTL.

    34) Qu’est ce qu’un facelet ?
    Un facelet correspond à une vue dans JSF. Concrètement c’est une page xhtml qui est un fichier xml pur ne contenant pas de scriptlets. On n’écrit donc pas de code Java dans un facelet.

    35) Comment se nomme la servlet principale jouant le rôle de contrôleur dans JSF ?
    C’est la FacesServlet qui correspond à la servlet principale jouant le rôle de contrôleur unique pour le traitement des requêtes.

    36) Qu’est-ce que le FacesContext ?
    Le FacesContext représente les informations de la requête en cours de traitement ainsi que les éléments de la réponse destinés à être envoyés au client.

    37) Comment sont modélisées les trois parties MVC dans JSF ?
    Le Modèle de données : Il est représenté par des entités (des beans)
    La Vue : Elle est représentée par des facelets (pages xhtml)
    Le Contrôleur : Il s’agit ici d’une unique servlet jouant le rôle de super contrôleur (la FacesServlet) pour le traitement des requêtes. Un JavaBean (managed-bean) est ensuite associé à une vue permettant de manipuler le modèle de données.

    38) Quelles sont les 3 librairies de tags intégrées nativement dans JSF ?
    - La bibliothèque html (h)
    - La bibliothèque de templating et de composition (ui)
    - La bibliothèque core (f)

    A noter qu’un facelet est un fichier xml pur, on ne peut donc pas utiliser la directive taglib. Pour importer une librairie, on utilise l’attribut xmlns au sein de la balise html.

    39) Décrire le cycle de vie d’une requête dans JSF en 6 étapes.
    - Restauration de la vue courante. Si la vue n’existe pas alors elle sera créée. Elle est ensuite sauvegardée dans l’objet FacesContext.
    - Récupération des paramètres de la requête. Chacun des composants a été récupéré à l’étape précédente, il s’agit maintenant de leur assigner les valeurs qui ont été passées dans la requête. Elles seront donc converties en fonction du type spécifié au sein du composant.
    - Validation des données. Le développeur a pu définir des validateurs permettant la validation des données. Si la validation échoue, alors la prochaine étape est le rendu de la réponse sinon c’est la mise à jour des valeurs du modèle.
    - Mise à jour des valeurs du modèle. Les propriétés des managed-beans sont mises à jour avec les nouvelles valeurs des composants associés et fraichement validés.
    - Appel au code métier de l’application. Une fois les valeurs du modèle mises à jour, les fonctions métiers peuvent être exécutées.
    - Rendu de la réponse au client. La vue définie dans la navigation est affichée au client.


    40) Qu’est-ce qu’un EJB ?
    Un EJB est un composant permettant de manipuler les objets métiers et s’exécutant au sein d’un conteneur d’EJB présent dans un serveur d’application. L’EJB est un objet managé, c’est le conteneur d’EJB qui se charge de son instanciation.

    41) Décrire les 3 types d’EJB.
    Les EJB entité : Ils correspondent aux objets métiers de l’application. Ils n’implémentent pas d’interface spécifique aux EJBs, ce sont de simples POJOs enrichies d’annotations. Ils doivent être sérialisable et contenir un constructeur sans argument.

    Les EJB session : Ils peuvent être vus comme une façade présentant un ensemble de fonctionnalités. Ils se déclinent en deux catégories :
    - Stateless : Ils ne conservent pas d’état entre deux appels. Ils sont relativement véloces du fait que le conteneur gère un pool d’instances qui sont utilisées en fonction du besoin.
    - Stateful : L’état est conservé entre deux appels de l’EJB par le même utilisateur. Ils sont moins performants que les Stateless.
    Les EJB message : Les Message Driven Bean (MDB) fonctionnent avec l’api JMS. Ils permettent d’effectuer un traitement asynchrone lors de la réception d’un message dans une queue.

    42) Un EJB peut-il être déployé sur un simple serveur web tel que Tomcat ?
    Non, un EJB nécessite un conteneur d’EJB pour être déployé. Il lui faut donc un serveur d’application de type JBoss, WebLogic, Glassfish afin de pouvoir être créé.

    43) Donner les principales caractéristiques d’un serveur d’application (JBoss, Glassfish etc…) ?
    Un serveur d’application intègre généralement un serveur web tel que Tomcat afin de traiter les requêtes entrantes. Il possède également un module d’annuaire JNDI afin d’enregistrer les ressources gérées par le serveur. Il peut se connecter à un service de messagerie type mail puis exposer ce service dans son annuaire. Il gère les files de messages (JMS). Il contient un conteneur d’EJB. Il peut se connecter à une BDD et exposer ses connexions sous forme de data-source. Il permet la gestion de la journalisation. Enfin il a une vision globale de tous les éléments qu’il gère et peut les faire dialoguer les uns avec les autres notamment sous forme d’injection de dépendance.

    44) Quel élément gère le cycle de vie des EJBs ?
    C’est le conteneur d’EJB qui gère le cycle de vie des EJBs, l’utilisateur n’a donc pas à s’en soucier.

    45) Comment un client peut-il accéder à la référence d’un EJB déployé sur un serveur ?
    Un EJB déployé est disponible grâce à l’annuaire JNDI du serveur d’application. Pour se connecter à l’annuaire, le client a besoin de définir un certain nombre d’informations qui sont fixées dans des variables d’environnement. Ces variables peuvent être écrites dans un fichier de properties (jndi.properties).

    46) Qu’est ce qu’une source de données ?
    Une source de données définira les paramètres permettant de se connecter à une base de données et de gérer ces connexions. Ces paramètres sont saisis dans un fichier xml.

    47) Qu’est-ce qu’une unité de persistance ?
    Une unité de persistance correspond à un ensemble de classes persistantes regroupées entre elles et associées à une même base de données.

    48) Dans quel fichier est décrite une unité de persistance ?
    Une unité de persistance est décrite dans le fichier persitence.xml.

    49) Comment fait-on référence à une unité de persistance dans un EJB ?
    Grâce à l’injection de dépendance avec l’annotation @PersitenceContext(unitName=’’) qui permet de récupérer un objet de type EntityManager.

    50) Un EJB est-il un composant multi-thread ?
    Un EJB n’est pas multithreadé. Une même instance ne peut pas servir plusieurs clients à la fois.

    51) Une instance d’un EJB sans état pourra-t-elle être utilisée par différents clients ? Qu’en est-il pour une instance d’un EJB avec état ?
    Oui une même instance d’un EJB sans état pourra être utilisée par plusieurs clients à des instants distincts. Pour un EJB avec état, plusieurs clients ne peuvent accéder à la même instance étant donné qu’une instance est propre à un seul client.

    52) Décrire le cycle de vie d’un EJB sans état et d’un EJB avec état.
    Pour un EJB sans état le cycle de vie est le suivant :
    - Non existant (l’EJB n’existe pas et ne peut donc répondre aux requêtes du client)
    - Prêt (l’EJB peut répondre aux requêtes du client)
    Pour un EJB avec état le cycle de vie est le suivant :
    - Non existant (l’EJB n’existe pas pour ce client)
    - Prêt (l’EJB existe pour ce client)
    - Passivé (l’EJB est détruit de la mémoire, il est passivé en attendant une requête du même client)

    53) Citer 3 annotations d’injection de dépendances disponible au sein d’un EJB.
    L’annotation @PersistenceContext permet d’injecter un entityManager.
    L’annotation @EJB permet de faire référence à un autre EJB.
    L’annotation @Ressource permet d’injecter tout type de ressource disponible dans l’annuaire JNDI.

    54) Quels sont les deux types de gestion de transaction au sein d’un EJB ?
    bean managed transaction : les transactions sont gérées manuellement dans les méthodes métiers des EJB.
    container managed transaction : c’est le conteneur qui gère les transactions. Cependant l’application a tout de même la main sur quelques aspects de la transaction.

    55) A quoi correspond l’annotation TransactionAttribute ? Quelles valeurs peut-elle prendre ?
    L’annotation @TransactionAttribute permet de spécifier au conteneur comment il doit gérer les transactions. Ses différentes valeurs peuvent être : REQUIRED, REQUIRED_NEW, NEVER, MANDATORY, SUPPORTS, NOT_SUPPORTED.

    56) Qu’est ce qu’un intercepteur pour les EJBs ?
    Un intercepteur correspond à une classe Java classique qui possède une méthode appelée juste avant l’appel à une méthode métier particulière.

    57) Quelle annotation doit être utilisée dans un intercepteur ?
    L’intercepteur doit déclarer une méthode avec l’annotation @AroundInvoke. C’est cette fonction annotée qui sera appelée avant la méthode métier, elle devra posséder comme argument un objet de type InvocationContext.

    58) Comment un EJB signifie qu’il peut être intercepté ?
    Il déclare l’annotation @Interceptors soit sur l’EJB complet, soit sur une ou plusieurs de ses méthodes.

Discussions similaires

  1. Questionnaire en java
    Par jonathanC dans le forum Débuter
    Réponses: 9
    Dernier message: 04/06/2009, 17h06
  2. erreur java : "java.lang.NoClassDefFoundError: java"
    Par Emilie MARQUOIS-OGEZ dans le forum Langage
    Réponses: 10
    Dernier message: 27/11/2006, 16h10
  3. Réponses: 16
    Dernier message: 10/01/2006, 23h02

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