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.
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.
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.
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.
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".
-
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é.
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.
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.
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.
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.
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.