web-dev-qa-db-fra.com

Qu'est-ce qu'un conteneur dans J2EE et en quoi cela aide-t-il?

Je lis les spécifications J2EE 1.4 en ce moment et il y a beaucoup de termes que je ne comprends pas. Cela provient des spécifications des conteneurs:

Les conteneurs fournissent le support d'exécution pour les composants d'application J2EE. Les conteneurs fournissent une vue fédérée des API J2EE sous-jacentes aux composants d'application. Les composants d'application J2EE n'interagissent jamais directement avec d'autres composants d'application J2EE. Ils utilisent les protocoles et méthodes du conteneur pour interagir entre eux et avec les services de la plateforme. L'interposition d'un conteneur entre les composants de l'application et les services J2EE permet au conteneur d'injecter de manière transparente les services définis par les descripteurs de déploiement des composants, tels que la gestion déclarative des transactions, les contrôles de sécurité, la mise en commun des ressources et la gestion de l'état.

Étant donné que je viens du monde du développement Web, je ne suis pas en mesure de comprendre ce que cela fait exactement et quel est le but d'un conteneur. Que signifie fournir un support d'exécution? Comment fait-il d'un J2EE un meilleur système en termes d'évolutivité, d'architecture?

34
gizgok

Les applications J2EE/Java EE ne sont pas autonomes. Pour être exécutés, ils doivent être déployés dans un conteneur. En d'autres termes, le conteneur fournit un environnement d'exécution au-dessus de la JVM.

De plus, les applications reposent sur plusieurs API telles que JPA, EJB, servlet, JMS, JNDI, etc. Le rôle du conteneur conforme EE est de fournir une implémentation standard de tout ou partie de ces API. Cela signifie que vous pouvez théoriquement exécuter votre application sur n'importe quel conteneur tant qu'elle repose sur des API standard.

D'un point de vue technique, un conteneur est juste une autre Java SE avec une méthode main(). Les applications EE, quant à elles, sont une collection de services/beans/servlets/etc . Le conteneur trouve ces composants et les exécute, fournissant les implémentations d'API, la surveillance, l'évolutivité, la fiabilité, etc.

67
Tomasz Nurkiewicz

Les conteneurs JEE fournissent un wrapper autour de votre code source.

Les conteneurs typiques sont le bean de données EJB classique et le bean géré par message. Dans une certaine mesure, les servlets et les portlets peuvent également être considérés comme des conteneurs.

Ce que le conteneur fournit un grand nombre de services: -

  • invocation - votre code est chargé et démarré lorsque cela est nécessaire.
  • contexte transactionnel - la plupart du code de conteneur se produit dans un contexte de transaction ACID.
  • configuration - des éléments tels que les connexions JDBC vous sont transmis par le conteneur.
  • sécurité - le conteneur limitera l'accès à votre code et à vos données aux utilisateurs autorisés.
  • évolutivité - puisque le conteneur est en charge de la planification, il peut lancer automatiquement des copies supplémentaires si la charge devient lourde, ou peut être configuré de manière statique pour exécuter plusieurs instances en parallèle.
  • Encapsulation. Votre programme expose une interface unique au conteneur. Cependant, en externe, il peut exposer cette interface sous diverses formes (Corba, WSDL, JSM, etc.).
  • Services communs. tels que la journalisation, les services exposés par d'autres EJB. etc.
6
James Anderson

Habituellement, une application Java application utilise une JVM et possède un processus au niveau du système d'exploitation pour chacune. Le conteneur permet d'exécuter plusieurs applications Java) sous une seule JVM.

3
user3366372

Que signifie fournir un support d'exécution?

Vous venez du monde du développement Web, ce qui signifie que vous savez qu'une application traditionnelle conçue pour le Web doit être accessible via le protocole HTTP. Java est un langage de programmation qui s'exécute sur une JVM par conception.

Alors, comment lier les requêtes HTTP à votre code Java?

Quelque chose doit faire ça. Un serveur HTTP comme Apache peut le faire et en utilisant l'ancienne interface de passerelle commune (CGI), vous pouvez appeler votre code Java lorsque le serveur Apache reçoit des requêtes HTTP.

C'est génial, mais à un moment donné, l'application Web aura besoin d'une authentification - on peut écrire du code pour cela, l'application Web aura besoin d'un accès à la base de données - on peut également écrire le code pour, l'application Web aura besoin d'un code d'interface utilisateur que l'on peut également écrire avec MVC, etc.

Cette application Web a des besoins que d'autres applications Web auront certainement et on peut voir les besoins communs: authentification, sources de données (comme DB, etc.), etc.
Java a déjà beaucoup de ces besoins en tant qu'API, comme mentionné dans les réponses précédentes, alors pourquoi ne pas mettre toutes ces connaissances et exigences communes pour la réutilisation dans quelque chose qui pourrait prendre en charge l'application Web au moment de l'exécution: un conteneur JEE.

Comment fait-il d'un JEE un meilleur système en termes d'évolutivité, d'architecture?

Je pense que la question serait alors pourquoi JEE est un système plus évolutif qu'un simple serveur HTTP avec l'utilisation de CGI?

Cela a été répondu par d'autres, mais avec ma réponse précédente, je pense que c'est encore plus clair.

J'espère que cela t'aides.

2
Johnny Hujol