159 votes

Qu'est-ce qu'un EJB et que fait-il?

Essayé d'apprendre ce qu' EJB haricots sont, ce qui signifie leurs instances sont gérés dans une piscine, bla bla. Vraiment ne pouvez pas obtenir une bonne adhérence.

Pouvez-vous m'expliquer ce qu'ils sont vraiment (pratiquement pour un Programmeur Java)? Que font-ils? Qui sont leurs fins? Pourquoi vraiment les utiliser? (Pourquoi ne pas simplement s'en tenir à l' POJO?) Peut-être un exemple d'application?

Veuillez vous référer uniquement à la mise à jour de l'information, c'est - EJB 3.1. Des renseignements à jour sur les EJB peut être trompeuse.

Pour EJB apprentissage des débutants s'il vous plaît noter:

Les EJB sont basés sur les objets distribués, les ce font référence à des logiciels de pièces en cours d'exécution sur plusieurs machines (virtuelles ou physiques), reliés par un réseau.

167voto

Glen Best Points 11455

Pourquoi vraiment les utiliser? (Pourquoi ne pas simplement s'en tenir à des POJO?)

SI vous avez besoin d'un composant qui accède à la base de données, ou accède à d'autres connectivité/ répertoire des ressources, ou est accessible à partir de plusieurs clients, ou est conçu comme un service SOA, Ejb aujourd'hui sont généralement "plus grand, plus fort, plus vite, ou au moins plus évolutif) et plus simple" Pojo. Ils sont les plus précieux pour l'entretien d'un grand nombre d'utilisateurs sur le web ou un réseau d'entreprise, et un peu moins intéressante pour les petites applications au sein d'un ministère.

  1. La réutilisation/le Partage de la Logique à travers de multiples applications/clients avec Couplage Lâche.
    Les ejb peuvent être emballés dans leur propre pots, de déploiement, et appelée à de nombreux endroits différents. Ils sont des éléments communs. Vrai, Pojo peut être (bien!) conçu comme les bibliothèques et les emballés comme des pots. Mais les Ejb soutien à la fois en local et à distance accès au réseau - y compris par l'intermédiaire d'interface java, transparent RMI, JMS message asynchrone et SOAP/REST web services, l'enregistrement à partir de couper et coller le pot avec de multiples dépendances (incompatible?) les déploiements.
    Ils sont très utiles pour créer des services SOA. Lorsqu'il est utilisé pour l'accès local, ils sont Pojo (avec la gratuité des services de conteneurs ajouté). La loi de la conception distincte de l'EJB de la couche favorise des soins supplémentaires pour maximiser l'encapsulation, le couplage et la cohésion, et favorise une interface propre (Façade), le blindage des appelants à partir de complexes de traitement de données et modèles.

  2. L'évolutivité et la Fiabilité Si vous appliquez un grand nombre de demandes de divers appelant messages/processus /fils, ils sont distribués à travers le disponible EJB cas dans la première piscine et puis en file d'attente. Cela signifie que si le nombre de demandes par seconde est de plus que le serveur peut gérer, nous dégrader gracieusement - il y a toujours quelques requêtes en cours de traitement efficace et l'excès de demandes sont à attendre. Nous ne pas atteindre le serveur "fusion" - où TOUTES les demandes de l'expérience terrible de temps de réponse simultanément, plus le serveur tente d'accéder à plus de ressources que le matériel et les OS peut gérer et donc des accidents. Les ejb peut être déployé sur des tier, qui peut être cluster - ce qui donne la fiabilité par le basculement d'un serveur à un autre, plus le matériel peut être ajoutée à l'échelle linéaire.

  3. Gestion De La Concurrence. Le conteneur s'assure que les EJB instances sont automatiquement accessibles en toute sécurité (en série) par plusieurs clients. Le conteneur gère l'EJB de la piscine, le pool de threads, le l'invocation de la file d'attente, et effectue automatiquement la méthode de niveau d'écriture de verrouillage (par défaut) ou lire verrouillage (via @Lock(LIRE)). Ce qui protège les données contre la corruption par le biais de d'écriture simultanées-écrire les affrontements, et permet la lecture des données de manière constante par la prévention lire-écrire des affrontements.
    Ceci est principalement utile pour @Singleton beans de session, où le haricot est la manipulation et la le partage commun de l'état à travers les clients appelants. Ceci peut être facilement désactivé manuellement configurer ou par programmation de contrôle avancé des scénarios simultanées dans l'exécution de code et d'accès aux données.

  4. Automatisé de traitement des transactions.
    Ne rien faire à toutes et à tous de votre EJB méthodes sont exécutées dans une transaction JTA. Si vous accédez à une base de données en utilisant JPA ou JDBC, il est automatiquement enrôlé dans la transaction. Même pour JMS et JCA invocations. Spécifier @TransactionAttribute(someTransactionMode) avant une méthode pour spécifier si/comment méthode particulière participe à la transaction JTA, en remplaçant le mode par défaut: "Requis".

  5. Très simple ressource/dépendance accès par injection.
    Le conteneur de recherche de ressources et d'établir des références de ressources comme des champs d'instance dans les EJB: comme JNDI stockées les connexions JDBC, JMS connexions/topics/files d'attente, d'autres Les ejb, les Transactions JTA, JPA entité gestionnaire de contextes de persistance, gestionnaire d'entités JPA usine unités de persistance, et JCA adaptateur de ressources. par exemple pour l'installation d'une référence à un autre EJB et une Transaction JTA et un Gestionnaire d'entités JPA & une fabrique de connexions JMS et la file d'attente:

    @Stateless
    public class MyAccountsBean {
    
        @EJB SomeOtherBeanClass someOtherBean;
        @Resource UserTransaction jtaTx;
        @PersistenceContext(unitName="AccountsPU") EntityManager em;
        @Resource QueueConnectionFactory accountsJMSfactory;
        @Resource Queue accountPaymentDestinationQueue;
    
        public List<Account> processAccounts(DepartmentId id) {
            // Use all of above instance variables with no additional setup.
            // They automatically partake in a (server coordinated) JTA transaction
        }
    }
    

    Une Servlet peut appeler ce bean localement, par le simple fait de déclarer une variable d'instance:

    @EJB MyAccountsBean accountsBean;    
    

    et puis juste en appelant ses méthodes comme souhaité.

  6. Smart interaction avec JPA. Par défaut, l'EntityManager injecté comme ci-dessus utilise une transaction d'étendue de la persistance contexte. C'est parfait pour les beans de session sans état. Lorsqu'un (apatrides) méthode de l'EJB est appelée, un nouveau contexte de persistance est créé au sein de la nouvelle transaction, toutes les entité des instances de l'objet récupéré, écrit à la DB sont visibles qu'à l'intérieur que appel de la méthode et sont isolés des autres méthodes. Mais si d'autres apatrides, les Ejb sont appelé par la méthode, le conteneur se propage et partage le même PC, donc même les entités sont automatiquement partagés de manière cohérente à travers le PC dans le même des transactions.
    Si un @Stateful session bean est déclarée, de l'égalité des smart affinité avec JPA est réalisé par déclarant l'entityManager être étendu le champ d'application: @PersistentContent(unitName="AccountsPU, type=ÉTENDUE). Cela existe pour la vie de le bean session, à travers de multiples bean appels et des transactions, la mise en cache en mémoire des copies de DB entités précédemment récupérés/écrite, de sorte qu'ils n'ont pas besoin d'être ré-extrait.

  7. Gestion Du Cycle De Vie. Le cycle de vie de l'Ejb est gérée par le conteneur. Selon les besoins, il crée des EJB cas, efface et initialise des beans de session avec état, passive et active, et les appels cycle de vie des méthodes de rappel, donc, EJB code peut participer au cycle de vie des opérations de acquérir et de libérer des ressources, ou d'effectuer d'autres d'initialisation et de comportement à l'arrêt. Il saisit toutes les exceptions, les journaux, annule les opérations requises, et lance de nouveaux EJB exceptions ou @ApplicationExceptions que nécessaire.

  8. Gestion De La Sécurité. Contrôle d'accès par rôle pour les Ejb peut être configuré via une simple annotation ou XML le réglage. Le serveur passe automatiquement à la authenticed détails de l'utilisateur avec chaque appel en tant que contexte de sécurité (l'appel principal et rôle). Il s'assure que tous les RBAC les règles sont appliquées automatiquement, de sorte que les méthodes ne peuvent pas être illégalement appelé par le mauvais rôle. Il Ejb permet d'accéder facilement à l'utilisateur/rôle de détails pour plus de programmatiques la vérification. Il permet de brancher supplémentaire de traitement de la sécurité (ou encore IAM outils) pour la le récipient dans un façon standard.

  9. La Normalisation Et La Portabilité. EJB implémentations conformes à Java EE des normes et des conventions de codage, la promotion de la qualité et la facilité de compréhension et d'entretien. Il favorise également la portabilité de code à nouveau fournisseur de serveurs d'application, en veillant à ce qu'ils prennent tous en charge les fonctionnalités standard et les comportements, et en décourageant les développeurs accidentellement l'adoption de propriété
    non portable fournisseur de fonctionnalités.

  10. Le Botteur Réel: La Simplicité. Tous les ci-dessus peut être fait avec très simplifié code - soit en utilisant les paramètres par défaut pour les Ejb dans Java EE 6, ou l'ajout d'un peu d'annotations. Le codage de l'entreprise/industriels la force de votre propre Pojo serait façon plus volumous, complexe et les risques d'erreur. Une fois que vous commencer à coder avec les Ejb, ils sont plutôt faciles à développer et donner un grand ensemble de "free ride" avantages.

À l'origine, EJB spec de 10 ans, Ejb été l'une des principales de la productivité de tracas. Ils étaient gonflés, besoin de beaucoup de code et de configuration des artefacts et a fourni environ 2/3 des avantages ci-dessus. La plupart des projets web n'a pas réellement les utiliser. Mais cela a changé de façon significative avec 10 ans d'optimisation, refonte, amélioration fonctionnelle et développement de flux doublure. Dans Java EE 6 ils fournissent un maximum de niveau de puissance industrielle et la simplicité d'utilisation.

Quoi de ne pas aimer?? :-) :-)

68voto

JB Nizet Points 250258

Un EJB est un composant Java, contenant la logique métier, que vous déployez dans un conteneur, et que les prestations de services techniques fournis par le conteneur, généralement de manière déclarative, grâce aux annotations:

  • la gestion des transactions: une transaction peut être démarré automatiquement avant une méthode de l'EJB est invoqué, et commis ou rollbacked une fois cette méthode retourne. Ce contexte transactionnel est propagée à des appels à d'autres Ejb.
  • gestion de la sécurité: une vérification peut être faite que le callerhas les rôles nécessaires à l'exécution de la méthode
  • l'injection de dépendance: d'autres Ejb, des ressources comme un gestionnaire d'entités JPA, JDBC source de données, etc. peut être injecté dans l'EJB
  • simultanéité: le conteneur permet de s'assurer qu'un seul thread à la fois invoque une méthode de votre instance de l'EJB
  • distribution: certains Ejb peuvent être appelées à distance, à partir d'une autre JVM
  • de basculement et d'équilibrage de charge à distance: les clients de votre Ejb peut automatiquement leur appel redirigé vers un autre serveur si nécessaire
  • gestion des ressources: les haricots stateful peut être automatiquement passicated sur le disque afin de limiter la consommation de mémoire de votre serveur
  • ... J'en ai probablement oublié quelques points.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X