2009-05-26 8 views
15

Révise des papiers d'examen passé pour un examen se concentrent principalement sur la conception et J2EE orientée composants, je suis venu sur la question suivante:EJB - Accueil/à distance et LocalHome/interfaces locales

Une enquête préliminaire du scénario 3 : "Demande d'échange" suggère que deux EJB fourniront une solution appropriée: un bean de session appelé EnterExchangeRequest pour contrôler le traitement et un bean entité appelé ExchangeRequest pour représenter les propriétés persistantes de la demande. Discuter du rôle des interfaces suivantes:

  • Accueil
  • à distance
  • LocalHome
  • Local

et comment ils fourniraient l'accès aux services des EJBs décrits ci-dessus.

Je pourrais essayer d'expliquer comment les interfaces Home et Remote s'inséreraient dans l'image. J'ai également entendu le conférencier dire que l'on pouvait remplacer Home par LocalHome, et Remote par Local (pourquoi?), Mais pourquoi me demandent-ils de discuter du rôle des quatre en même temps?


Est-ce que je bien quand je dis, le EJB conteneur (serveur d'application) constaterait qu'une interface est Home ou Remote puis décider que la fève peut « vivre » sur une machine dans la cluster, alors que dans le cas où les interfaces sont LocalHome et Local le conteneur saura que les fèves ne peuvent pas être réparties sur plusieurs machines et les gardera donc «vivantes» dans une seule machine? Je suis totalement perdu dans cette jungle Java d'entreprise. Je rencontre un BeanOverflow. Pourriez-vous s'il vous plaît me dire lesquelles de mes hypothèses sont fausses, souligner mes idées fausses et les erreurs.

Merci à tous ceux qui sont prêts à m'aider avec ces interfaces EJB.

P.S. Notez que je ne vous demande pas de répondre à la question du dernier examen. Juste curieux si vous avez des pensées quant à ce qu'ils pourraient être après en demandant cela.

+10

confus? joindre le club. – Cheeso

+0

Je vous sens les hommes, je vais avoir BeanOverflow à :) –

Répondre

6

Accueil est responsable de la création de la télécommande (un peu comme son constructeur) et LocalHome et Local ont la même relation. Dans chaque cas, le conteneur vous donne un proxy qui référence la véritable classe EJB que vous écrivez.

Si je devais deviner, ce que la question recherchait était l'utilisation de remote pour le bean session et locale pour le bean entité. Quoi qu'il en soit, bien que ces concepts puissent encore exister, les choses ont été beaucoup mieux simplifiées dans EJB3.

EDIT: En réponse au commentaire, avec EJB3, la classe bean elle-même peut implémenter directement les interfaces remote et home (pour les beans session). Ils sont faits EJB avec une seule annotation.Haricots Stateful ont quelques annotations de plus pour faire face aux problèmes de l'Etat. Les beans entité n'ont pas d'interface Home et n'ont pas besoin d'interface locale. Vous pouvez interagir directement avec l'objet java. Il existe un EntityManager qui récupère les bons beans entité en fonction d'une requête, et que EntityManager est injecté via une annotation.

Ce genre de résume dans un paragraphe. Il existe d'excellents didacticiels sur le Web pour ce genre de choses, mais les EJB en général résolvent une catégorie de problèmes qu'il est difficile d'apprécier à moins de traiter le problème. Ils ne sont pas la seule façon de le résoudre, mais à moins que vous ne vous occupiez de ce type de programmation, le simple fait de le lire ne vous aidera pas vraiment.

+0

Pourriez-vous s'il vous plaît également fournir un croquis de la façon dont les choses ont été simplifiées dans EJB3? Ce serait bien de savoir. –

+0

Re: EDIT, les classes de bean ne doivent pas implémenter l'interface home. Mon explication des simplifications serait: Dans EJB 3, JPA remplace efficacement les beans entité, mais si vous utilisez des beans entité, vous devez toujours utiliser une interface home. Les beans session sans état n'ont pas besoin d'une interface home, et si l'un n'est pas défini, l'interface métier peut être recherchée directement à partir de JNDI et mise en cache. Les beans session stateful n'ont pas non plus besoin d'une interface home, mais si une interface home n'est pas utilisée, alors la recherche JNDI doit être utilisée comme "factory". –

7

Comme indiqué par Yishay, Home/Remote et LocalHome/Local sont liés et l'interface Home fonctionne comme un constructeur.

Les beans locaux sont liés à la JVM dans laquelle ils vivent, vous ne pouvez pas y accéder depuis l'extérieur. Les beans distants sont accessibles depuis d'autres JVM. J'utilise une approche similaire: je déploie toujours des oreilles. Haricots pour l'oreille Je fais des haricots locaux, Haricots destinés à être utilisés par d'autres oreilles que je fais à distance. Mais il est possible d'utiliser les haricots locaux dans d'autres oreilles, tant qu'ils sont déployés dans la même JVM

+2

Par spécification EJB, "L'accès à un bean d'entreprise via la vue client locale doit uniquement être pris en charge pour les clients locaux regroupés dans la même application que le bean enterprise qui fournit la vue client locale. à la vue client local d'un enterprise bean à partir d'un client local empaqueté dans une application différente [...] Les applications reposant sur l'accès inter-applications à la vue client locale ne sont pas portables. " –