Vous êtes sur la page 1sur 6

INSA Centre Val de Loire / Campus de Bourges 5eme Année ASL

Contrôle de Composants Logiciels


Novembre 2019

Nom : Prénom :

Première partie : Trouver l'erreur (6 points)

Indiquer les 12 erreurs de ce bout de code, extrait du fameux jeu Komepon Og...
@Entity
public class Dresseur {
private int idD;
private String nomD;
@ManyToOne(mappedBy="dresseurs")
private ArrayList<Komepon> bestioles;
@ManyToOne
private List<Dresseur> adversaires;
@ManyToOne
private Equipe equ ;

public int getIdD() {


return idD; }

public void setIdD(int idD) {


this.idD = idD; }

public String getNomD() {


return nomD; }

public void setNomD(String nomD) {


this.nomD = nomD; }

public ArrayList<Komepon> getBestioles() {


return bestioles; }

public void setBestioles(ArrayList<Komepon> bestioles) {


this.bestioles = bestioles; }

public List<Dresseur> getAdversaires() {


return adversaires; }

public void setAdversaires(List<Dresseur> adversaires) {


this.adversaires = adversaires; }
}

@Entity
public class Komepon {
@Id
@GeneratedValue
int idK;
String nomK;
Komepon evolution;

public Komepon(int idK, String nomK) {


super();
this.idK = idK;
this.nomK = nomK;
this.evolution = null;
}
public int getIdK() {
return idK;
}

public void setIdK(int idK) {


this.idK = idK;
}

public String getNomK() {


return nomK;
}

public Komepon getEvolution() {


return evolution;
}

public void setEvolution(Komepon evolution) {


this.evolution = evolution;
}

public class Equipe {


@Id
private String idEqu;
private String nomEqu;

public String getIdEqu() {


return idEqu; }

public void setIdDEqu(String idEqu) {


this.idEqu = idEqu; }

public String getNomEqu() {


return nomEqu; }

public void setNomEqu(String nomEqu) {


this.nomEqu = nomEqu; }

@Service
public class PoGo {
@Persistence
EntityManager em;

public void createDresseur(String nomD) {


Dresseur d=new Dresseur();
d.setNomD(nomD);
em.persist(d);

public void capture(int idD,int idK) {


Dresseur d=em.find(Dresseur.class,idD);
Komepon k=em.find(Komepon.class, idK);
d.getBestioles().add(k);
}

// etc.
}
Deuxième Partie : QCM (3 points)
V F
1. Les entities doivent explicitement avoir un constructeur vide
(c’est-à-dire sans paramètres).......................................................................□ □
2. L’information « mapped_by » indique sous quel nom est mappé un
attribut d’un entity dans la table correspondante dans la BD ......................□ □
3. Quand un objet entity est attaché à l’entity manager, cela signifie
que la synchro avec la BD se fait à intervalle de temps régulier..................□ □
4. Dans une requête JPQL, il faut respecter la casse
(majuscule/minuscule) des classes et attributs utilisée dans les EJB entity..□ □
5. On ne peut faire au maximum qu’une seule injection par autowired
dans un objet ................................................................................................□ □
6. On peut utiliser Spring en dehors d’une application
web................................................................................................................□ □

Troisième Partie : Compréhension (4 points)

Quel concept vous a semblé le plus compliqué dans ce module ? Citez aussi un concept que vous
avez découvert ou redécouvert.

Avantages et inconvénients de l’utilisation de JPA (entities et entity manager) par rapport à une
accès direct par jdbc.
Quatrième Partie : Modélisation (7 points)

Une école d‘ingénieurs souhaite bâtir son système d’évaluation par compétences (en parallèle à
l’attribution des notes on valide le fait que les étudiants aient plus ou moins acquis diverses
compétences).

La première étape consiste à saisir la liste des filières et des responsables pédagogiques (un par
filière). Cette saisie est faite par le superutilisateur de l’application.
Ensuite chaque responsable pédagogique saisit la liste des membres de son équipe pédagogique,
puis la liste des matières de la filière, organisées en semestre (une matière = un code, un intitulé, un
nombre d’heures (CM/TD/TP) et un nombre de crédits).
Le responsable et les membres peuvent alors accéder à une liste globale de compétences (globale à
la formation) et en ajouter à la liste. Les compétences peuvent être reliées aux modules (en relation
N-N), avec une explication (en quoi le module est lié à la compétence).
Le responsable pédagogique peut aussi inscrire des membres extérieurs. Les membres extérieurs et
l’équipe pédagogique ont accès à l’autre facette : définir une liste de métiers et les compétences
nécessaires. Les membres extérieurs peuvent créer des métiers. Ils ne peuvent pas créer de
nouvelles compétences.

Dans la phase d’exploitation, les membres de l’équipe pédagogique se voient affecter la


responsabilité d’un ou plusieurs modules (un responsable par module). La liste des étudiants est
importée automatiquement en début d’année avec une mise à jour quotidienne pour les inscriptions
tardives.
En fin de semestre les responsables de module évaluent les compétences des étudiants. Leurs
évaluations sont validées par le responsable pédagogique de la formation.

Donner la liste :
• des entities et des liens existant entre eux (on peut faire un diagramme de classe UML ou
une liste d’entities en java mais sans les constructeurs ni les getters/settters)
• des interfaces des façades* (une ou plusieurs, à justifier). Comme il s’agit d’interface, on ne
donnera que la signature des méthodes, pas leur code.
* par façade on entend ici la ou les classes (services spring) qui se placent entre le contrôleur
et les entities (ou leurs DAO).

Vous aimerez peut-être aussi