EXAMEN - Architecture N-tiers

Page 1 sur 17Lecteur de document UniversityLib

EXAMEN - Architecture N-tiers

Software Architecture and Development · exam

Browse all génie logiciel documents

EXAMEN

Semestre : 1 2

X

Session : Principale

X

Unité d’enseignement : Architecture N-tiers ………………………………………

Modules : Famework Spring - Architecture N-tiers .NET - Architecture Orientée Service « SOA »

Classe(s) : 4INFOB

Nombre de questions : 42 questions

Documents autorisés : OUI NON Nombre de pages : ..

X

Calculatrice autorisée : OUI NON Internet autorisée : OUI NON

X

X

Date : …02/07/2020……………… Heure ...........10h45....... Durée :....1h30.....

Intitulé UE

Intitulé module

ECTS module

Architecture N-tiers

Framework SPRING

Architecture N-tiers .NET

Architecture Orientée Service « SOA »

3

3

3

Partie I : Framework Spring [14 questions]

[Spring Boot - Spring Core - Spring Data JPA - Spring MVC REST - Log4J -AOP – JSF]

Toutes les questions sont à réponse unique.

1 : On se propose de mettre en place une application de gestion

d’une auto-école.

Ci-dessous, le diagramme de classes.

  • L’association bidirectionnelle Candidat-Examen

indique qu’un candidat peut passer plusieurs

examens et qu’un examen peut être passé par un seul

candidat à une date donnée.

  • L’association

Candidat-

SeanceDeFormation indique qu’un candidat peut

assister à une ou plusieurs séances de formation.

bidirectionnelle

  • L’énumération doit être stockée en tant que

chaîne de caractères dans la base.

D'après le diagramme de classes, quel est le nombre de

tables générées ? (/1pt)

A. 3

B. 4

C. 5

D. 6

  • Les identifiants sont auto-générés avec la stratégie

«IDENTITY».

1/17

2 : Compléter QI.2. (/1pt)

@Entity

public class Candidat implements Serializable {

@Id

@GeneratedValue(strategy=GenerationType.IDENTITY)

private int idCd;

private String login;

private String pwd;

private int budgetFormations;

QI.2. ….

@OneToMany(mappedBy="candidat")

List <Examen> examens;

}

A. @OneToMany(mappedBy="candidat")

B. @ManyToOne(mappedBy="candidat")

C. @OneToMany

D. @ManyToOne

3 : Compléter QI.3. (/1pt)

@Entity

public class Examen implements Serializable {

@Id

@GeneratedValue(strategy=GenerationType.IDENT

ITY)

private int idEx;

@Temporal(TemporalType.DATE)

private Date dateExamen;

@Enumerated(EnumType.STRING)

Type type;

@ManyToOne

QI.3. ….

Candidat candidat; }

A. private List <Candidat> candidats;

B. private Candidat candidat;

C. a et b sont possibles

D. Aucune réponse

4 : Les services sont les suivants. Tous les services sont exposés avec Spring REST MVC.

Compléter QI.4. (/1pt)

public interface ICandidatService {

public void ajouterCandidat(Candidat candidat);

public void affecterExamenACandidat(int cdId, int exId);

public void affecterSeanceDeFormationACandidat(int cdId, int idex);

public List<SeanceDeFormation> listerFormations(int cdId);

public Candidat getCandidatByLoginAndPassword(String login, String password) ;

public void reussirExamen(int idex);

public List<Examen> listerExamens(int cdId);

public void desaffecterSeanceDeFormationACandidat(int idcd, int idsf);}

@RestController

public class RestControlCandidat {

@Autowired

ICandidatService icandidatservice;

@Autowired

IExamService iexamenservice;

@Autowired

ISeanceDeFormation iseanceformation;

// http://localhost:8083/affecterExamenACandidat/1/1

@PutMapping(value = "/affecterExamenACandidat/{idcdt}/{idex}")

QI.4. ….

public void affecterExamenACandidat(@PathVariable("idcdt")int cdId,

@PathVariable("idex")int exId) {

icandidatservice.affecterExamenACandidat(cdId, exId);}}

2/17

A. @PostMapping

B. @PutMapping

C. @GetMapping

D. @DeleteMapping

5 : Service : Nous allons affecter une séance de formation, pour laquelle on a des places disponibles,

au candidat Ali selon le type de son examen et à une date antérieure à sa date d’examen. Après

affectation, nous allons mettre jour les places disponibles et le budget du candidat.

En premier lieu, nous avons besoin de chercher la formation correspondante. Compléter QI.5. (/1pt)

@Repository

public interface CandidatRepository extends CrudRepository<Candidat, Integer> {

@Query("Select sf from SeanceDeFormation sf where sf.type=:typeex and")

public SeanceDeFormation getSeanceDeFormation( @Param( "typeex") Type

QI.5

typeex,@Param ("d") Date d);

}

A. Select SeanceDeFormation sf where sf.type=:typeex and sf.dateSeance<:d and sf.nbPlaceLibre>0

B. Select sf from SeanceDeFormation sf where sf.type=:typeex or sf.dateSeance<:d or

sf.nbPlaceLibre>0

C. Select sf from SeanceDeFormation sf where sf.type=:typeex and sf.dateSeance<:d and

sf.nbPlaceLibre>0

D. Aucune réponse n’est correcte.

6 : Compléter QI.6. (/1pt)

@Repository

public interface CandidatRepository extends CrudRepository<Candidat, Integer> {

@Query("Select sf from SeanceDeFormation sf where sf.type=:typeex ")

public SeanceDeFormation getSeanceDeFormation( @Param ("typeex") Type

QI.6

typeex,@Param ("d") Date d);

QI.6

}

A. @PathVariable

B. @Param

C. @QueryParam

D. @ParamQuery

3/17

7 : Authentification (login.xhtml): Le formulaire accepte un login

et un mot de passe, affiche un message d’erreur en cas d’une

éventuelle erreur d’identification et oriente l’utilisateur vers son

espace.

Espace Utilisateur (welcome.xhtml) : Après authentification,

l’utilisateur peut visualiser ses formations. Il peut aussi refuser une

formation. L’accès à cette page est sécurisé en utilisant un filtre

d’authentification.

Étant donné ce Controller, compléter QI.7. (/1pt)

@Scope(value = "session")

@Component(value = "candidatController")

@ELBeanName(value = "candidatController")

@Join(path = "/", to = "/login.jsf")

@Controller

public class IControllerCandidatImpl {

@Autowired

ICandidatService icandidatservice;

private String login;

private String pwd;

private Candidat candidat;

private Boolean loggedIn;

public String dologin() {

String navigateTo = "null";

candidat=icandidatservice.getCandidatBy

LoginAndPassword(login, pwd);

if (candidat != null ) {

navigateTo = "/welcome.xhtml?faces-redirect=true";

loggedIn = true; } return navigateTo; } }

4/17

login.xhtml

<h:form id="form">

<b>Connexion</b>

<h:panelGrid columns="2">

<h:outputText value="Login" />

<h:inputText

value="#{candidatController.login}" />

QI.7

<h:outputText value="Mot de passe" />

<h:inputSecret

value="#{candidatController.pwd}" />

<h:commandButton id="btn" value="Connexion"

Advertisement

action="#{candidatController .dologin}" />

<h:message for="btn"/>

</h:panelGrid>

</h:form>

QI.7

QI.7

A. candidatController

B. iControllerCandidatImpl

C. IControllerCandidatImpl

D. Réponses b et c

8 : Voici une partie du code de welcome.xhtml.

Compléter QI.8. (/1pt)

<h:panelGroup>

<h:form>

<h:outputText value="Bonjour #{candidatCo}"

/>

<b>Bienvenue à ton espace.</b>

<b>Voici tes formations planifiées. </b>

<br />

<h:dataTable value="#{candidatController.

listerFormations(1)}" var="sf">

<h:column>

<f:facet name="header">

<h:outputText value="Date" />

</f:facet>

<h:outputText value="#{sf.dateSeance }"/>

</h:column>

……….

</h:dataTable>

QI.8

<h:commandLink value="Déconnexion" action=

"#{candidatController.doLogout()}" />

</h:form>

</h:panelGroup>

A. Formation.dateSeance

B. sf.dateSeance

C. candidatController.dateSeance

D. Aucune réponse

9 : Nous avons ajouté un filtre d’authentification à notre application. Compléter QI.9. (/1pt)

public class LoginFilter implements Filter {

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

HttpServletRequest hrequest= (HttpServletRequest)request;

HttpServletResponse hresponse= (HttpServletResponse)response;

IControllerCandidatImpl candidatcontroller=(IControllerCandidatImpl)

hrequest.getSession().getAttribute("candidatController");

if(candidatcontroller!=null && candidatcontroller.getLoggedIn())

{chain.doFilter(request, response);}

QI.9

else

{ hresponse.sendRedirect(hrequest.getContextPath()+"/");

}

}

}

A. chain.doFilter(request, response);

B. request.doFilter(request, response);

C. response.doFilter(request, response);

D. Aucune réponse n’est correcte.

10 : Nous avons ajouté à notre projet un aspect qui calcule et affiche dans les logs le temps d’exécution

de chaque méthode des services. Compléter QI.10 (/1pt).

@Component

@Aspect

public class PerformanceAspect {

private static final Logger logger =

LogManager.getLogger(PerformanceAspect.class);

QI.10

@Around("execution( tn.esprit.spring.services..*(..))")

public Object profile(ProceedingJoinPoint pjp) throws Throwable {

long start = System.currentTimeMillis();

Object out=pjp.proceed();

long elapsedTime = System.currentTimeMillis() - start;

logger.info("Method execution time: " + elapsedTime + "

milliseconds.");

return out;

}}

A. @Before("execution( tn.esprit.spring.services..*(..))")

5/17

B. @After("execution( tn.esprit.spring.services..*(..))")

C. @Around("execution( tn.esprit.spring.services..*(..))")

D. A et B

11 : Erreur1 : C'est quoi la cause de cette erreur ? Le

développeur a oublié de mettre (/1pt):

Caused by: org.hibernate.AnnotationException:

@OneToOne or @ManyToOne on

tn.esprit.spring.entities.Examen.candidat references an

unknown entity: tn.esprit.spring.entities.Candidat

A. @Id

B. @Entity

C. @OneToMany

D. @ManyToOne

12 : Erreur 2 : C’est quoi la cause la plus problable de cette

erreur ? (/1pt)

com.mysql.cj.jdbc.exceptions.CommunicationsException:

Communications link failure

The last packet sent successfully to the server was 0

milliseconds ago.

The driver has not received any packets from the server.

At com.mysql.cj.jdbc.exceptions.SQLError.

createCommunicationsException(SQLError.java:174)

~[mysql-connector-java-8.0.18.jar:8.0.18]

A. Le développeur a oublié de créer la base de données.

B. Le développeur a oublié d’annoter les entités par

l’annotation @Entity

C. Le développeur a mis un numéro de port erroné pour

l’accès au serveur de données

D. Aucune réponse n’est correcte

13 : Erreur 3 : C’est quoi la cause de cette erreur ? (/1pt)

Description:

Field icandidatservice in

tn.esprit.spring.controller.RestControlCandidat

required a bean of type

'tn.esprit.spring.services.ICandidatService'

that could not be found.

The injection point has the following

annotations:

@org.springframework.beans.factory.annotation.

Autowired(required=true)

Le développeur a oublié d’annoter la classe

A.

RestControlCandidat par l’annotation @RestController

Le développeur a oublié d’annoter

l’objet

B.

ICandidatService icandidatservice ; par

l’annotation @Autowired

C.

CandidatServiceImpl par l’annotation

@Service

a et b

D.

Le développeur a oublié d’annoter la classe

14 : Erreur 4 : C’est quoi la cause de cette erreur ? (/1pt)

javax.el.PropertyNotFoundException: Target Unreachable,

identifier [candidatControllerTest] resolved to null

at org.apache.el.parser.AstValue.getTarget

(AstValue.java:74) ~[tomcat-embed-el-9.0.27.jar:9.0.27]

at org.apache.el.parser.AstValue.getType

(AstValue.java:58) ~[tomcat-embed-el-9.0.27.jar:9.0.27]

at org.apache.el.ValueExpressionImpl.getType

(ValueExpressionImpl.java:174) ~[tomcat-embed-el-

9.0.27.jar:9.0.27]

A. Le développeur a oublié de vider le dossier Target

B. Le développeur a oublié de créer le dossier Target

C. Le développeur a mis un nom erroné de son

Controller

D. Aucune réponse n’est correcte.

6/17

Partie II : Architecture N-tiers .NET [14 questions]

On se propose d’implémenter une application web de covoiturage. La figure ci-dessous illustre une

version simplifiée du diagramme de classe de l’application.

Question 15 (/1pt)

Choisir

personnalisées EF Code-First.

la bonne définition des conventions

A. C’est un ensemble de règles par défaut pour

construire un modèle basé sur des classes du

domaine.

B. C’est un ensemble de règles qui peuvent être

appliquées à l'aide de Data Annotations et

Fluent API.

C. C’est un ensemble de règles qui remplacent

les comportements par défaut de EF Code-

First.

D. C’est un ensemble de règles personnalisées

qui ne peuvent pas être remplacées.

Question 16 (/1pt)

Selon les conventions par défaut de EntityFramework,

quelle(s) propriété(s) de la classe “Passager” sera

mappée(s) dans une colonne obligatoire (not null) ?

A. DateNaissance

B. Nom

C. Téléphone

D. A et C

Question 17 (/1pt)

Comment créer une convention personnalisée qui

permet de configurer les propriétés qui commencent

par Id comme étant des clés primaires ?

A. Properties().Where(p => p.Name ==

"Id*").Configure(p => p.IsKey());

B. Properties().Where(p => p.Name ==

"Id_").Configure(p => p.IsKey());

C. Properties().Where(p =>

p.Name.StartsWith("Id")).Configure(p =>

p.IsKey());

D. Properties().Where(p =>

p.Name.BeginsWith("Id")).Configure(p =>

p.IsKey());

Question 18 (/1pt)

Advertisement

On souhaite créer une classe de configuration pour

configurer la relation entre les entités «Passager» et

«Trajet» en spécifiant «Participation» comme nom de

la table d’association. Choisir la bonne alternative.

A. HasMany(p=>p.Trajets).WithMany(t=>t.Pas

sagers).Map(a=>a.ToTable("Participation"));

7/17

B. HasMany(p=>p.Trajets).WithMany(t=>t.Pas

Question 22 (/1pt)

sagers).ToTable("Participation");

C. HasMany(p=>p.Trajets).WithRequired(t=>t.

Passagers).Map(a =>

a.ToTable("Participation"));

D. HasMany(p=>p.Trajets).WithOptional(t=>t.P

assagers).ToTable("Participation")

Question 19 (/1pt)

La propriété «DateNaissance» de la classe Passager

doit être une date valide, quelle est l'annotation

correcte à utiliser dans ce cas ?

A. [DataType(DataType.Date)]

B. [DataType(DataType.DateTime)]

C. [DateTime]

D. [Date]

Question 20 (/1pt)

Que se passera-t-il si on spécifie le paramètre

"name=Covoiturage" dans le constructeur de base

d'une classe de contexte ?

A. EF créera la base de données nommée

“Covoiturage” dans le serveur SQL local

sous l’instance (Localdb)\MSSQLLocalDB.

B. EF créera la base de données avec le même

nom que le nom de la classe contexte.

C. EF créera la base de données nommée

"Covoiturage" dans le serveur MySQL local.

D. EF utilisera la chaîne de connexion nommée

“Covoiturage” définie dans le fichier de

configuration pour créer la base de données.

Question 21 (/1pt)

Suite à l’exécution de la commande Add-Migration,

un fichier de migration est généré contenant deux

méthodes Up() et Down(). Quelle est l’utilité de la

méthode Up()?

A. Assurer la création de toutes les tables de la

base de données ainsi que les colonnes et les

ForeignKeys.

B. Assurer la synchronisation entre le modèle

objet et le modèle relationnel.

C. Annuler les anciennes migrations.

D. Ajouter les champs non mappés dans la base

de données.

Le patron de conception unité de travail (unit of work)

permet de :

A. Instancier le contexte seulement

B. Sauvegarder

les données dans

la base

uniquement

C. Sauvegarder les données et fournir une

instance du RepositoryBase

D. Supprimer les données non managées

Question 23 (/1pt)

Dans la couche service, une classe de service

spécifique offre un ensemble de méthodes. Choisir la

description la plus adéquate de ces méthodes.

A. Des méthodes de base pour une entité

particulière.

B. Des méthodes spécifiques pour une entité

particulière.

C. A et B.

D. Des méthodes spécifiques pour toutes les

entités.

Question 24 (/1pt)

Dans la classe “TrajetService”, on souhaite récupérer

les 3 Trajets les plus chers. Choisir la bonne

alternative.

A.

public IEnumerable<Trajet>

GetMostExpensiveTrajets(){

var req = from t in GetMany() orderby t.Prix

descending select t;

return req.Take(3);}

B.

public IEnumerable<Trajet>

GetMostExpensiveTrajets(){

return

GetMany().OrderBy(t=>t.Prix).Reverse().Take(3); }

C.

public IEnumerable<Trajet>

GetMostExpensiveTrajets(){

return

GetMany().OrderByDescending(t=>t.Prix).Take(3);}

8/17

D. Tout ce qui précède

Question 25 (/1pt)

L’URL suivante http://localhost:51644/ (avec 51644

un numéro de port aléatoire) lance :

A. L’action

Index

du

contrôleur

“HomeController”

B. Une page vide

C. L’action Index du premier contrôleur crée

D. Une exception

Question 26 (/1pt)

Dans la vue de création de Trajets, on a implémenté

une liste déroulante qui permet de récupérer les noms

des différents Conducteurs afin de les associer au

Trajet, à travers l’instruction suivante :

@Html.DropDownListFor (model =>

model.ConducteurFk,

new SelectList

(ViewBag.Conducteurs,"IdConducteur","Nom

"))

Quelle serait l’implémentation correcte qui devrait y

correspondre dans le controlleur, sachant que “st” est

une instance de la classe “ServiceTrajet” ?

A.

// GET: Trajet/Create

public ActionResult Create(){

ViewBag.ListeConducteurs =

st.GetMany();

return View();

}

B.

// POST: Trajet/Create

[HttpPost]

public ActionResult Create(){

ViewBag.Conducteurs =

st.GetMany();

return View();

}

C.

// GET: Trajet/Create

public ActionResult Create(){

ViewBag.Conducteurs =

st.GetMany();

return View();

}

D.

// GET: Trajet/Create

public ActionResult Create(){

return View(ViewBag.Conducteurs );

}

Question 27 (/1pt)

Dans le contrôleur “ConducteurController” on a

implémenté la méthode “Create” qui permet d’ajouter

un nouveau conducteur.

Quelle est l'implémentation correcte pour réaliser cette

action, sachant que “sc” est une instance de la classe

“ServiceConducteur”?

A.

// GET: Conducteur/Create

public ActionResult Create(Conducteur c){

if (ModelState.IsValid){

sc.Add(c);

sc.Commit();

return RedirectToAction("Index");

}

return View(c);

}

// POST: Conducteur/Create

[HttpPost]

public ActionResult Create() {

return View();}

B.

// GET: Conducteur/Create

public ActionResult Create(Conducteur c){

if (ModelState.IsValid){

sc.Add(c);

sc.Commit();

return RedirectToAction("Index");

}

return View();

}

// POST: Conducteur/Create

[HttpPost]

public ActionResult Create(Conducteur c){

return View(c);}

C.

// GET: Conducteur/Create

public ActionResult Create(){

return View();

}

// POST: Conducteur/Create

9/17

{

return View(Title = "Création Conducteur");

Advertisement

}

public ActionResult Create(Conducteur c){

if (ModelState.IsValid){

sc.Add(c);

sc.Commit();

return RedirectToAction("Index");

}

return View(c);}

D.

// GET: Conducteur/Create

public ActionResult Create(){

return View();

}

// POST: Conducteur/Create

[HttpPost]

public ActionResult Create(Conducteur c){

if (ModelState.IsValid) {

sc.Add(c);

sc.Commit();

return RedirectToAction("Index");

}

return View(c);}

Question 28 (/1pt)

A partir du contrôleur “ConducteurController”, on se

propose de modifier le titre de la vue “Create” à

“Création Conducteur”. Choisir la bonne alternative.

A.

public ConducteurController()

{

ViewBag.Title = "Création Conducteur";

}

B.

public ConducteurController()

{

@{ ViewBag.Title = "Création Conducteur";}

}

C.

public ActionResult Create(int id)

{

ViewBag.Title = "Création Conducteur";

return View();

}

D.

public ActionResult Create(int id)

10/17

Partie III : Architecture Orientée Service « SOA » [14 questions]

29. Quelle caractéristique est erronée par rapport à un service web ? (/1pt)

A. Autonome

B. Intégrable

C. Composable

D. Configurable

30. Indiquer la déclaration correcte relative à SOA : (/1pt)

A. L'architecture orientée services (SOA) décrit une méthode standard pour demander des services à

partir de composants distribués et gérer les résultats.

B. SOA fournit la couche de traduction et de gestion dans une architecture qui supprime la barrière pour

un client qui obtient les services souhaités.

C. Avec SOA, les clients et les composants peuvent être écrits dans différents langages et peuvent utiliser

plusieurs protocoles de messagerie.

D. Tout ce qui précède

31. Soit l’objet Java suivant (XML) :

@XMLRootElement(name = “Resa”)

public class Reservation

@XMLAttribute(name = “ResaNumber”, required=false)

public int reservationNumber;

public String villeDepart;

@XMLElement(name = “villeArrivee”)

public String destination;

@XMLTransient

public String passportID;

Quel est le document XML qui lui correspond ? (/1pt)

A. <Resa>

<resaNumber>1234567</resaNumber>

<villeDepart>Tunis</villleDepart>

<destination>Paris</destination>

</Resa>

C. <Resa>

<resaNumber>1234567</resaNumber>

<villeDepart>Tunis</villleDepart>

<passportId>ABCDE</passportId>

<villeArrivee>Paris</destination>

</Resa>

B. <Resa>

<villeArrivee>Paris</villleArrivee>

<resaNumber>1234567</resaNumber>

<villeDepart>Tunis</villleDepart>

</Resa>

D. <Reservation resaNumber = “TUN999”>

<villeArrivee>Paris</destination>

<villeDepart>Tunis</villleDepart>

<resaNumber>1234567</resaNumber>

</Reservation>

11/17

32. Soit le document XML suivant :

Veuillez choisir la bonne réponse. (/1pt)

A. 'name' a trois éléments enfants

B. Ce n’est pas un XML bien formé

C. Ceci est un XML bien formé mais ce n'est peut-être pas un XML valide

D. L’élément 'employees' possède deux éléments enfants.

33. Soit l’élément XML suivant de type « montantType »: <montant devise="dinars">1000</prix>. On veut

étendre ce type pour lui ajouter un nouvel attribut « destinataire » de type string :

<montant devise="dinars" destinataire="Khaled">1000</prix>

Quelle est la déclaration XSD correcte ? (/1pt)

A. <xs:complexType name="DetailsType">

<xs:simpleContent>

<xs:extension base="montantType">

<xs:element name="destinataire"

type="xs:string"/>

</xs:extension>

</xs:simpleContent>

</xs:complexType>

B. <xs:complexType name="DetailsType">

<xs:complexContent>

<xs:extension base=" montantType ">

<xs:element name=" destinataire"

type="xs:string"/>

</xs:extension>

</xs:complexContent>

</xs:complexType>

C. <xs:complexType name="DetailsType">

<xs:simpleContent>

<xs:extension base=" montantType ">

<xs:attribute name=" destinataire"

type="xs:string"/>

</xs:extension>

</xs:simpleContent>

</xs:complexType>

D. <xs:complexType name="DetailsType">

<xs:complexContent>

<xs:extension base=" montantType ">

<xs:attribute name=" destinataire"

type="xs:string"/>

</xs:extension>

</xs:complexContent>

</xs:complexType>

34. Soit le document XML suivant :

<researchAssistant employeeNo=”134234”>

<FN>Dominik</FN>

<email>[email protected]</email>

</researchAssistant>

12/17

Veuillez choisir la grammaire XSD correcte ? (/1pt)

A. <xs:complexType name="researchAssistantType"

>

<xs:sequence>

<xs:element name="FN" type ="rs:FNType"/>

<xs:element name="employeeNo" type="xs:integer"/>

<xs:element name="email" type ="rs:emailType"/>

</xs:sequence>

B. <xs:complexType

name="researchAssistantType" >

<xs:sequence>

<xs:element name="FN" type ="xs:String"/>

<xs:element name="employeeNo"

type="xs:integer"/>

<xs:element name="email" type ="rs:emailType"/>

</xs:complexType>

</xs:sequence>

</xs:complexType>

C. <xs:complexType name="researchAssistantType"

>

<xs:sequence>

<xs:element name="FN" type ="xs:String"/>

<xs:element name="email" type ="rs:emailType"/>

</xs:sequence>

<xs:attribute name="employeeNo"

type="xs:integer"/>

</xs:complexType>

<xs:simpleType name="rs:emailType"/>

<xs:restriction base="xs:string">

<xs:pattern value= "[a-z]@[a-z] " />

</xs:restriction>

</xs:simpleType>

D. <xs:complexType

name="researchAssistantType" >

<xs:sequence>

<xs:element name="FN" type ="xs:String"/>

<xs:element name="email" type

="rs:emailType"/>

</xs:sequence>

<xs:attribute name="employeeNo"

type="xs:integer"/>

</xs:complexType>

<xs:simpleType name="rs:emailType"/>

<xs:restriction base="xs:string">

<xs:pattern value= "[A-Z]@[a-z] " />

</xs:restriction>

</xs:simpleType>

35. Une compagnie spécialisée dans l’électronique a déployé une application en ligne afin d’améliorer la qualité de

Advertisement

ses services sous forme d’un service web basé sur XML et composé de plusieurs questions associées à chaque

produit.

@XMLRootEelement (6)

public class Question{

private int id;

private String texte;

private String reponse;

@XMLAttribute(name=”ques

tionID”, required= “false”) (7)

public String getId(){

1.

@XMLRootEelement (1)

public class Produit{

private int code;

private String nom;

private String categorie ;

private List<Question> questions;

@XMLTransient (2)

public int getCode(){

return code;}

@XMLElement() (3)

public String getNom(){

return nom;}

@XMLAttribute(name=”categorie”,

required = “true”) (4)

public String getCategorie(){

return categorie;}

@XMLElement(name=”questions”) (5)

public List<Question> getQuestions(){

2.

3.

4.

5.

6.

7.

8.

13/17

Un exemple XML obtenu est le suivant :

<Produit categorie = "Accessoires">

<nom>Fours</nom>

<questions>

<Question questionID = "123">>

<texte>Etes-vous satisfait par ce produit ? </texte>

<reponse>Oui</reponse>

</Question>

<Question>

<texte>Souhaitez-vous nous revisiter dans l’avenir ? </texte>

<reponse>Oui</reponse>

</Question>

</questions>

<categorie>Accesoires</categorie>

</collection>

</Produit>

Parmi les annotations suivantes identifiées par les numéros (1), (2), (3), (4), (5), (6), (7), lesquelles sont

obligatoire ? (/1pt)

A. (1), (2), (4), (6), (7)

B. (1), (2), (4), (5), (6)

C. (1), (2), (3), (4), (5), (6), (7)

D. (1), (2), (4), (5), (6), (7)

36. Une entreprise vise à déployer un service Web basé sur XML pour améliorer la gestion de ses employés.

@XMLRootEelement(1)

public class Employee{

private int cin;

private String nom;

private String service ;

private long numTel;

@XMLAttribute(name=”id”, required=true) (2)

public int getCin(){

return cin;}

@XMLElement(required=false) (3)

public String getNom(){

return nom;}

@XMLElement (4)

public String getService(){

return service;}

@XMLTransient (5)

public long getNumTel(){

return numTel;}

}

14/17

Veuillez choisir la bonne proposition (/1pt).

A. <employee cin=”07891123”>

<service>marketing</ service >

<numTel>2355687</ numTel >

</employee>

C. <employee id=”07891123”>

<nomEmp>siwar </ nomEmp>

<service>marketing</ service >

<numTel>2355687</ numTel >

</employee>

B. <employee id=”07891123”>

<service>marketing</ service >

</employee>

D. <employee id=”07891123”>

<nomEmp>siwar </ nomEmp>

<service>marketing</ service >

</employee>

37. Dans l’objectif d’améliorer la collaboration entre ses personnels, la société ValueIT souhaite ajouter à son portail

un agenda numérique exposé comme un service Rest. Le service Web fournit plusieurs fonctionnalités de

l’agenda conformément aux spécifications suivantes : (/1pt)

  • Ajouter un événement

o http://server:port/agenda/calendar/event

  • Lister les événements d’une journée

o http://server:port/ agenda/calendar/event/{jour}/{mois}/{annee}

  • Modifier la description d’un événement

o http://server:port/ agenda/calendar/event?id=?

Quelle proposition est correcte ? (/1pt)

A. « event » est défini au niveau de la classe d’activation et permet de configurer l’application contenant le

service web

B. « calendar » est défini au niveau de la ressource et permet d’accéder à différentes méthodes exposées par

le service web

C. Les attributs du jour, du mois et de l’année saisies pour lister les évènements d’une journée sont récupérés

de l’URL à l’aide de plusieurs annotations @PathParam

D. L’attribut « id » pour modifier la description d’un évènement est récupéré de l’URL à l’aide de

l’annotation @PathParam

38. Un développeur se met au développement d’une nouvelle application et doit décider du style d’architecture de

services web (SOAP ou REST) qui serait le choix approprié. Quelle proposition est correcte ? (/1pt)

A. Les services REST sont utiles pour des terminaux ayant une faible bande passante (PDAs, téléphone

mobile...)

B. Les services REST peuvent traiter des exigences non fonctionnelles complexes (comme les transactions,

sécurité)

C. Les services REST exposent des contrats formalisés (comme les messages, les opérations, protocoles et

adresses du service web)

D. Les services REST gèrent les traitements asynchrones

39. Qu'est ce qui est faux dans une définition WSDL? (/1pt)

A. Par défaut, si on ne mentionne pas de TargetNameSpace, le nom du package sera affiché

B. On ne peut pas avoir plusieurs Portypes dans un même contrat WSDL

C. On peut avoir plusieurs ports dans un même contrat WSDL

D. HTTP et SMPT sont les seules protocoles de transports acceptés

15/17

40. Un problème technique a endommagé le serveur qui contenait des contrats de service. La définition en WSDL

pour un service postal a été récupérée, sauf pour l'élément portType, qui n'a été que partiellement récupéré.

<definitions name="Postal"

targetNamespace="http://www.examples.org/wsdl/postal"

xmlns:tns="http:// www.examples.org /wsdl/postal"

xmlns:post="http:// www.examples.org /postal"

xmlns="http://www.schemas.xmlsoap.org/wsdl"

xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<types>

<xsd:schema targetNamespace="http://www.example.org/wsdl/postal">

<xsd:import namespace="http://www.example.org/wsdl/postal" schemaLocation="postal.xsd" />

</xsd:schema>

</types>

<message name="PostalLookup">

<part name="request" element="post:postalLookup"/>

</message>

<message name="PostalLookupResponse">

<part name="response" element="post:postalLookupResponse"/>

</message>

(???)

<binding name="PostalLookupBinding" type="tns: PostalLookupInterface">

</binding>

</definitions>

Les symboles (???) indiquent l’emplacement des données qui manquent. Choisir la bonne proposition qui complète

cette description : (/1pt)

A. <portType name="PostalLookupInterface">

<operation name=" PostalLookupOperation ">

<input message=" tns: PostalLookupMessage" name="PostalLookup"/>

<output message="tns: PostalLookupResponseMessage" name="PostalLookup"/>

</operation>

</portType>

B. <portType name="PostalLookupInterface">

<operation name=" PostalLookup">

<input message=" tns : PostalLookup" name="PostalLookup"/>

<output message="tns: PostalLookupResponse" name="PostalLookupResponce"/>

</operation>

</portType>

C. <portType name="PostalLookupPortType">

<operation name=" PostalLookup ">

<input message=" tns: PostalLookupMessage" name="PostalLookup"/>

<output message="tns: PostalLookupResponseMessage" name="PostalLookup"/>

</operation>

</portType>

D. <portType name="PostalLookupInterface">

<operation name=" PostalLookupOperation">

<input message=" tns : PostalLookup" name="PostalLookupOperationInput"/>

<output

message="tns:

PostalLookupResponse"

name="PostalLookupOperationResponseOutput"/>

16/17

</operation>

</portType>

41. Soit le message SOAP suivant :

Quelle est la méthode correspondante à ce message SOAP ? (/1p...