C’est une question très populaire pour les architectes Java et les développeurs JEE expérimentés. Vous devez tirer parti de votre expérience pour aborder cette question car il n'y a pas de bonnes ou de mauvaises réponses. Ces diagrammes de haut niveau et résumé vous aideront à rafraîchir votre mémoire.

Question. Quelle devrait être une architecture Java EE typique pour, disons, une application Web de taille moyenne ?

Réponse. Avant de commencer à dessiner les composants sur un tableau blanc, vous devez rassembler les exigences techniques de l’application.

#1. Posez des questions telles que combien de transactions par minute ou heure le système doit-il gérer ? Combien d'utilisateurs simultanés doit-il gérer ?, Etc.

# 2. Dessinez un schéma global. Marquez les niveaux, les couches, les composants clés, les frontières, etc. Il s'agit d'une vue globale des composants.


Soyez prêt pour des questions détaillées comme :

1) Client pull Vs Server push. Client pull nécessite une directive spéciale dans l'en-tête du document HTML. Cette directive indique au client de récupérer un document spécifié après un certain temps. En d'autres termes, le client ouvre une nouvelle connexion au serveur. Server push implique l'envoi périodique de paquets de données au client. La connexion HTTP entre le client et le serveur est maintenue ouverte indéfiniment. Par exemple, vous pouvez utiliser une servlet asynchrone.

2) Quand utiliser une Queue Vs Topic. Une Queue est utilisée pour un seul destinataire et une Topic concerne plusieurs abonnés.

3) Quand utiliser LDAP vs base de données. LDAP stocke les données de manière hiérarchique et convient mieux aux opérations de lecture intensive comme la recherche d'utilisateurs, de rôles, etc. pour l'autorisation, et la base de données est plus adaptée aux opérations CRUD.

4) Qu'est-ce que Rich Internet Application (RIA) ? Les applications Web modernes sont des applications riches d'une seule page qui utilisent du code JavaScript et des frameworks comme AngularJS. Une seule page riche effectue des appels ajax aux composants backend pour remplir une section ou un onglet particulier d'une page riche. Cette architecture est résumée ci-dessous avec un schéma d'architecture.

Les applications Web modernes utilisant AngulaJS ou tout autre framework MVC basé sur JavaScript peuvent avoir deux fichiers war. Un pour l'interface graphique et le second pour exposer les données via des services Web au format JSON ou XML


Lorsque vous utilisez plusieurs domaines comme indiqué ci-dessus, vous devez utiliser CORS (Cross Origin Resource Sharing) pour surmonter la restriction JavaScript sur les domaines croisés. CORS vous permet de partager les demandes GET, POST, PUT et DELETE.

CORS est pris en charge par les navigateurs modernes,il utilise 2 requêtes :

Requête 1: requête «OPTIONS» dans le cadre de la négociation pour déterminer si le domaine croisé est autorisé par le serveur.

Requête 2: requête GET, POST, PUT ou DELETE qui effectue l'opération réelle sur le serveur.


# 3. Considérations de sécurité

Les applications d'entreprise utilisent SSO (Single-Sign-On) avec des produits comme SiteMinder, Tivoli Access Manager, etc.

Par exemple, une application SSO comme SiteMinder est configurée pour intercepter les appels pour authentifier l'utilisateur. Une fois l'utilisateur authentifié, un en-tête HTTP «SM_USER» est ajouté avec le nom d'utilisateur authentifié. Par exemple «123». L'en-tête utilisateur est transmis au Spring Security 3. Le «Security.jar» est un composant personnalisé qui sait comment récupérer des rôles d'utilisateur pour un utilisateur donné comme 123 à partir d'une base de données ou d'un serveur LDAP. Ce composant personnalisé est responsable de la création d'un objet UserDetails Spring qui contient les rôles en tant qu'autorités. Une fois que vous disposez des droits ou des rôles pour un utilisateur donné, vous pouvez restreindre les URL et les fonctions de votre application pour fournir un contrôle d'accès approprié.



# 4. Gestion des transactions

La gestion des transactions a lieu au niveau de la couche service. Vous pouvez utiliser un gestionnaire de transactions Spring avec des annotations telles que @Transactional pour délimiter les limites transactionnelles. La classe de service peut appeler plusieurs objets d'accès aux données (DAO) dans un contexte transactionnel.


# 5. Considérations sur la qualité de service (QoS)

Les exigences de qualité de service (QoS) sont des spécifications techniques qui définissent la qualité des fonctionnalités du système telles que la disponibilité, l'évolutivité, la facilité de maintenance etc ...

Enfin, les applications modernes sont hautement distribuées en utilisant divers styles d'architecture et d'intégration. Une application d'entreprise typique utilisera une combinaison de ces styles d'intégration et de l'architecture. Par exemple, voici une application de trading très simplifiée utilisant des appels «synchrones» et «asynchrones». Cela permet aux traders de placer des transactions d'achat / vente en ligne.


Comme vous pouvez le constater, ce système utilise :

1) Les brokers intermédiaires orientées message (MOM) comme WebMethods ou Tibco pour publier ou souscrire des messages (c'est-à-dire des échanges).

2) Services Web pour effectuer des opérations CRUD (créer, lire, mettre à jour et supprimer).

3) Architecture MVC pour afficher les données sur l'interface graphique pour fournir une interface utilisateur.

4) JDBC pour sauvegarder / lire les interactions des utilisateurs via les opérations CRUD.

5) Protocole FIX pour communiquer avec la bourse. C'est une norme pour échanger des informations financières.