Académique Documents
Professionnel Documents
Culture Documents
@EmbeddedId
@EmbeddedId private
private String
String nom;
nom;
private
private ClientPK
ClientPK clientPK;
clientPK;
@Temporal(TemporalType.DATE)
@Temporal(TemporalType.DATE)
private
private int
int age;
age; private
private Date
Date dateDeNaissance;
dateDeNaissance;
…
… ...
...
@Id
@Id private
private String
String nom;
nom; private
private String
String nom;
nom;
@Id
@Id @Temporal(TemporalType.DATE)
@Temporal(TemporalType.DATE) @Temporal(TemporalType.DATE)
@Temporal(TemporalType.DATE)
private
private Date
Date dateDeNaissance;
dateDeNaissance; private
private Date
Date dateDeNaissance;
dateDeNaissance;
...
...
private
private int
int age;
age;
@MappedSuperclass
@MappedSuperclass
public
public class
class Employee
Employee {{
@Id
@Id
protected
protected Integer
Integer employeeId;
employeeId;
...
...
}}
@Entity
@Entity
public
public class
class FullTimeEmployee
FullTimeEmployee extends
extends Employee
Employee {{
protected
protected Integer
Integer salary;
salary;
...
...
}}
@Entity
@Entity
public
public class
class PartTimeEmployee
PartTimeEmployee extends
extends Employee
Employee {{
protected
protected Float
Float hourlyWage;
hourlyWage;
...
...
}}
@Entity
@Entity @Entity
@DiscriminatorValue(value @Entity
@DiscriminatorValue(value == "Etudiant")
"Etudiant") @DiscriminatorValue(value
@DiscriminatorValue(value == "Enseignant")
"Enseignant")
public
public class
class Etudiant
Etudiant extends
extends Personne{
Personne{ public
@Column public class
class Enseignant
Enseignant extends
extends Personne{
Personne{
@Column private
private String
String matricule;
matricule; @Column
@Column private
private String
String specialite;
specialite;
@Column
@Column private
private String
String niveau;
niveau; ….
…. ….
….
Commande
Commande
Client
Client id
id
id
id clientId
clientId
...
... ...
...
45
Personne
Personne Adresse
Adresse
id
id id
id
.... ....
Personne_Adresse
Personne_Adresse
personnes_id
personnes_id
adresses_id
adresses_id
@ManyToMany
@ManyToMany
@JoinTable(name="Personne_Adresse",
@JoinTable(name="Personne_Adresse",
JoinColoumns
JoinColoumns == @JoinColumn(name="p_id"),
@JoinColumn(name="p_id"),
InverseJoinColumns
InverseJoinColumns == @JoinColumn
@JoinColumn (name
(name == "a_id")
"a_id")
))
private
private Set<Adresse>
Set<Adresse> adresses;
adresses;
……
}}
64
Projet tutoré – Douwe Vincent <douwevincent@yahoo.fr> 49 / 173
L’annotation @JoinTable
L’annotation @JoinTable :
» donne des informations sur la table association qui va
représenter l’association
» attribut name donne le nom de la table
» attribut joinColumns donne les noms des attributs de la
table qui référencent les clés primaires du côté propriétaire
de l’association
» attribut inverseJoinColumns donne les noms des attributs
de la table qui référencent les clés primaires du côté qui
n’est pas propriétaire de l’association
» Attribut uniqueConstraints qui permet de définir les
contraintes sur la table de jointure
Projet tutoré – Douwe Vincent <douwevincent@yahoo.fr> 50 / 173
Collections de type simple
Il arrive souvent qu’une entité ait comme attribut une collection
de valeurs de type simple (par exemple un mémoire a un
ensemble de mots clés), JPA nous donne la possibilité de gérer
ces types de situations avec la collection de type simple.
L’annotation @ElementCollection est utilisée à cet effet.
@Entity
@Entity
public
public class
class Memoire{
Memoire{
@Id
@Id
private
private int
int id;
id;
@ElementCollection
@ElementCollection
@CollectionTable(name
@CollectionTable(name == "MOTS_CLES")
"MOTS_CLES")
private
private Set<String>
Set<String> motsCles;
motsCles;
….
….
}} fg
@Entity
@Entity public
public class
class Millionaire
Millionaire extends
extends Personne
Personne {{
……
@ElementCollection
@ElementCollection
protected
protected Set<Adresse>
Set<Adresse> maisonVacances;
maisonVacances;
.. ....
}}
@Embeddable
@Embeddable
public
public class
class InfoContact
InfoContact {{
@Embedded
@Embedded private
private Adresse
Adresse adresse;
adresse;
...
...
}}
@Entity
@Entity public
public class
class Employe
Employe {{
@Id
@Id private
private int
int empId;
empId;
private
private String
String nom;
nom;
private
private InfoContact
InfoContact contact;
contact;
...
...
}}
@Embeddable
@Embeddable
public
public class
class InfoContact
InfoContact {{
@Embedded
@Embedded
private
private Adresse
Adresse adresse;
adresse;
@OneToMany
@OneToMany
private
private Set<Telephone>
Set<Telephone> telephones;
telephones;
...
...
}}
@Entity
@Entity
public
public class
class Employe
Employe {{
@Id
@Id
private
private int
int empId;
empId;
private
private String
String nom;
nom;
private
private InfoContact
InfoContact contact;
contact;
...
...
}}
@Entity
@Entity
public
public class
class Film
Film {{
@Id
@Id
private
private String
String titre;
titre;
private
private String
String metteurEnScene;
metteurEnScene;
...
...
}}
public
public interface
interface PagingAndSortingRepository<T,
PagingAndSortingRepository<T, ID
ID extends
extends Serializable>
Serializable>
extends
extends CrudRepository<T,
CrudRepository<T, ID>ID> {{
Iterable<T>
Iterable<T> findAll(Sort
findAll(Sort sort);
sort);
Page<T>
Page<T> findAll(Pageable
findAll(Pageable pageable);
pageable);
}}
@Entity
@Entity
@NamedQuery(name
@NamedQuery(name == "User.findByEmailAddress",
"User.findByEmailAddress",
query
query == "select
"select uu from
from User
User uu where
where u.emailAddress
u.emailAddress == ?1")
?1")
public
public class
class User
User
}}
public
public interface
interface UserRepository
UserRepository extends
extends JpaRepository<User,
JpaRepository<User, Long>
Long> {{
List<User>
List<User> findByLastname(String
findByLastname(String lastname);
lastname);
User
User findByEmailAddress(String
findByEmailAddress(String emailAddress);
emailAddress);
}}
public
public interface
interface UserRepository
UserRepository extends
extends JpaRepository<User,
JpaRepository<User, Long>
Long> {{
@Query("select
@Query("select uu from
from User
User uu where
where u.emailAddress
u.emailAddress == ?1")
?1")
User
User findByEmailAddress(String
findByEmailAddress(String emailAddress);
emailAddress);
}}
public
public interface
interface UserRepository
UserRepository extends
extends JpaRepository<User,
JpaRepository<User, Long> Long> {{
@Query("select
@Query("select uu from
from User
User uu where
where u.firstname
u.firstname == :firstname
:firstname oror u.lastname
u.lastname ==
:lastname")
:lastname")
User
User findByLastnameOrFirstname(@Param("lastname")
findByLastnameOrFirstname(@Param("lastname") String String lastname,
lastname,
@Param("firstname")
@Param("firstname") String
String firstname);
firstname);
}}
http://www.douwe.com:80/cours?code=ITEL242#web
http://www.douwe.com:80/cours?code=ITEL242#web
protocole
protocole hôte
hôte port
port chemin requête
chemin requête fragment
fragment
ftp://173.168.2.5/dossier/archiver.tar.gz
ftp://173.168.2.5/dossier/archiver.tar.gz
<html>
<head><title>Toto</title></head>
<body>
<h1>Je suis là toto</h1>
</body>
</html>
Projet tutoré – Douwe Vincent <douwevincent@yahoo.fr> 109 / 173
Les codes de statut
Dans une réponse HTTP, il y’a un code de réponse. Le HTTP
distingue 5 grandes classes de codes de statut :
– 1xx : Ces séries de codes donnent des informations sur le contenu
de la réponse.
– 2xx : Ces séries de codes indiquent que la requête s’est
correctement exécutée.
– 3xx : Ces séries de codes indiquent une redirection c’est à dire
que le client a besoin d’effectuer des actions supplémentaires
pour terminer l’exécution de la requête.
– 4xx : Ces séries de codes indiquent une erreur au niveau du client.
– 5xx : Ces séries de codes indiquent une erreur au niveau du
serveur.
CREATE
CREATE POST
POST ou
ou PUT
PUT
READ
READ GET
GET
UPDATE
UPDATE PUT
PUT ou
ou PATCH
PATCH
DELETE
DELETE DELETE
DELETE
Cd
Projet tutoré – Douwe Vincent <douwevincent@yahoo.fr> 121 / 173
Représentation des ressources
Si l’on dispose d’une ressource Etudiant,
nous avons la correspondance suivante :
Méthode
Méthode URL
URL Action
Action
GET
GET /etudiants
/etudiants Renvoie
Renvoie tous
tous les
les étudiants
étudiants
GET
GET /etudiants/2
/etudiants/2 Renvoie
Renvoie l’étudiant
l’étudiant dont
dont l’id
l’id vaut
vaut 22
POST
POST /etudiants/
/etudiants/ Crée
Crée un
un nouvel
nouvel étudiant
étudiant
PUT
PUT /etudiants/2
/etudiants/2 Met
Met àà jour
jour l’étudiant
l’étudiant dont
dont l’id
l’id est
est 22
DELETE
DELETE /etudiants/2
/etudiants/2 Supprime
Supprime l’étudiant
l’étudiant dont
dont l’id
l’id vaut
vaut 22
DELETE
DELETE /etudiants/
/etudiants/ Supprime
Supprime tous
tous les
les étudiants
étudiants
@Path("etudiants")
@Path("etudiants")
public
public class
class EtudiantRessource{
EtudiantRessource{
//// Le
Le reste
reste du
du code
code est
est ici
ici
}}
@Path("etudiants")
@Path("etudiants")
public
public class
class EtudiantRessource{
EtudiantRessource{
@GET
@GET
@Path("count")
@Path("count")
@Produces("text/plain")
@Produces("text/plain")
public
public Integer
Integer getTotalEtudiants(){
getTotalEtudiants(){
return countAllEtudiants() ;
return countAllEtudiants() ;
}}
}}
@Path("etudiants")
@Path("etudiants")
public
public class
class EtudiantRessource{
EtudiantRessource{
@DELETE
@DELETE @Path("{id}")
@Path("{id}")
public
public void
void removeEtudiant(@PathParam("id")
removeEtudiant(@PathParam("id") short
short id){
id){
removeEtudiant(id) ;
removeEtudiant(id) ;
}}
}}
@Produces(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("{country}/{city}
@Path("{country}/{city} ")")
public
public List<Department>
List<Department> findAllDepartments(
findAllDepartments( @PathParam("country")
@PathParam("country") String
String countyCode,
countyCode,
@PathParam("city")
@PathParam("city") String
String cityCode)
cityCode) {{
//Find
//Find all
all departments
departments from
from the
the data
data store
store for
for aa country
country and
and city
city
List<Department>
List<Department> departments = findAllMatchingDepartmentEntities(countyCode, cityCode
departments = findAllMatchingDepartmentEntities(countyCode, cityCode ););
return
return departments;
departments;
}}
@GET
@GET
@Produces(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("matrix")
@Path("matrix")
public
public List<Department>
List<Department> findAllDepartmentsByNameWithMatrix(
findAllDepartmentsByNameWithMatrix(
@MatrixParam("name")
@MatrixParam("name") String
String deptName,
deptName,
@MatrixParam("city")
@MatrixParam("city") String
String locationCode)
locationCode) {{
List<Department>
List<Department> depts=findAllDepartmentsFromDB(deptName,
depts=findAllDepartmentsFromDB(deptName, city);
city);
return
return depts;
depts;
}}
@POST
@POST
public
public void
void createDepartment(@HeaderParam("Referer")
createDepartment(@HeaderParam("Referer")
String
String referer,
referer, Department
Department entity)
entity) {{
logSource(referer);
logSource(referer);
createDepartmentInDB(department);
createDepartmentInDB(department);
}}
@GET
@GET
@Path("cook")
@Path("cook")
@Produces(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public
public Department
Department getDefaultDepartment(@CookieParam("Default-Dept")
getDefaultDepartment(@CookieParam("Default-Dept")
short
short departmentId)
departmentId) {{
Department
Department dept=findDepartmentById(departmentId);
dept=findDepartmentById(departmentId);
return
return dept;
dept;
sqdfdecs
}}
@POST
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public
public void
void createDepartment(@FormParam("departmentId")
createDepartment(@FormParam("departmentId") short
short
DepartmentId,
DepartmentId, @FormParam("departmentName")
@FormParam("departmentName") String
String departmentName)
departmentName) {{
createDepartmentEntity(departmentId,
createDepartmentEntity(departmentId, departmentName);
departmentName);
}}
@GET
@GET
@Produces(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public
public List<Department>
List<Department> findAllDepartmentsInRange
findAllDepartmentsInRange
(@DefaultValue("0")
(@DefaultValue("0") @QueryParam("from")
@QueryParam("from") Integer
Integer from,
from,
@DefaultValue("100")
@DefaultValue("100") @QueryParam("to")
@QueryParam("to") Integer
Integer to)
to) {{
findAllDepartmentEntitiesInRange(from,
findAllDepartmentEntitiesInRange(from, to);
to);
}}
@GET
@GET
@Produces(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public
public List<Department>
List<Department> findAllDepartmentsByName(
findAllDepartmentsByName(
@Context
@Context UriInfo
UriInfo uriInfo){
uriInfo){
String
String deptName
deptName == uriInfo.getPathParameters().getFirst("name");
uriInfo.getPathParameters().getFirst("name");
List<Department>
List<Department> deptsdepts == findAllMatchingDepartmentEntities(deptName);
findAllMatchingDepartmentEntities(deptName);
return
return depts;
depts;
}}
sd
Projet tutoré – Douwe Vincent <douwevincent@yahoo.fr> 149 / 173
L’annotation Context
Voici la liste des classes et interfaces qui sont généralement utilisées avec
l’annotation Context :
– javax.ws.rs.core.Application : cette classe définit les composants d’une
application JAX-RS et fournit les méta data supplémentaires
– javax.ws.rs.core.UriInfo : cette interface fournit les informations sur l’application
et l’URI de la requête.
– javax.ws.rs.core.Request : cette interface fournit des méthodes pour le
traitement de la requête telles lire le type de la méthode et les préconditions
– javax.ws.rs.core.HttpHeaders : cette interface forunit l’accès aux informations
contenues dans l’entête HTTP
– javax.ws.rs.core.SecurityContext : cette interface fournit l’accès aux informations
liées à la sécurité.
– javax.ws.rs.ext.Providers : cette interface donne la possibilité de rechercher à
l’exécution une instance de l’interface provider tel MessageBodyReader,
MessageBodyWriter, ExceptionMapper et ContextResolver
public
public class
class DepartmentBean
DepartmentBean {{
@FormParam("departmentId")
@FormParam("departmentId")
private
private short
short departmentId;
departmentId;
@FormParam("departmentName")
@FormParam("departmentName")
private
private String
String departmentName;
departmentName;
//// Getters
Getters et
et Setters
Setters
}}
@POST
@POST
public
public void
void createDepartment(@BeanParam
createDepartment(@BeanParam DepartmentBean
DepartmentBean deptBean)
deptBean)
{{
createDepartmentEntity(deptBean.getDepartmentId(),
createDepartmentEntity(deptBean.getDepartmentId(),
deptBean.getDepartmentName());
deptBean.getDepartmentName());
}}
public
public MyConfig()
MyConfig() {{
registerMyClasses();
registerMyClasses();
}}
private
private void
void registerMyClasses()
registerMyClasses() {{
register(DepartementResource.class);
register(DepartementResource.class);
register(UtilisateurResource.class);
register(UtilisateurResource.class);
register(EtudiantResource.class);
register(EtudiantResource.class);
}}
}}
GET,
GET, OPTIONS,
OPTIONS, HEAD
HEAD OUI
OUI OUI
OUI
POST,
POST, PATCH
PATCH NON
NON NON
NON
PUT,
PUT, DELETE
DELETE OUI
OUI NON
NON
ds
/etudiants/
/etudiants/ Récupérer
Récupérer Créer
Créer un
un Mise
Mise àà jour
jour de
de Supprimer
Supprimer tous
tous
tous
tous les
les nouvel
nouvel étudiant
étudiant tous
tous les
les les
les étudiants
étudiants
étudiants
étudiants étudiants
étudiants
/etudiants/{id}
/etudiants/{id} Récupérer
Récupérer le le Non
Non supporté
supporté Mise
Mise àà jour
jour de
de Supprimer
Supprimer
département
département l’étufiant
l’étufiant dont
dont l’étudiant
l’étudiant dont
dont
dont
dont l’id
l’id est
est 10
10 l’id
l’id est
est 10
10 l’id
l’id est
est 10
10