2010-01-25 2 views
1

La sémantique de transaction et la plénitude d'état sont considérées comme des détails d'implémentation dans EJB3. Une implémentation peut décider d'utiliser des transactions gérées par le bean ou par un conteneur. Il peut décider du type de transaction gérée par conteneur. Il peut décider si l'état est plein ou sans état.EJB3: Pourquoi la sémantique des transactions et l'état sont-ils considérés comme des détails de mise en œuvre?

Cependant, logiquement, ce sont des détails d'interface importants. Exemples: (a) Un bean utilisant des transactions gérées par bean ne peut pas appeler un bean en utilisant des transactions gérées par conteneur. (b) Un bean sans état ne peut pas appeler un bean complet. Lorsqu'elle est présentée avec une interface EJB3, vous n'avez aucune idée du type de sémantique de transaction dont elle a besoin. De même, vous n'avez aucune idée si c'est état-complet ou apatride. Vous avez besoin de détails d'implémentation supplémentaires. Exemple: documentation.

Lors de l'exécution, différents types de beans et de chaînes d'appel peuvent être instanciés dynamiquement. Donc, un état invalide pourrait survenir. Maintenant - le conteneur peut piéger ces situations; mais pourquoi attendre jusqu'à l'exécution?

Pourquoi les sémantiques de transaction et les exigences de plénitude d'état ne font-elles pas partie de l'interface?

Répondre

1

sémantique de transaction et -plénitude de l'État sont considérés comme les détails de mise en œuvre EJB3. Une implémentation peut décider si utiliser le bean ou le conteneur géré transactions. Il peut décider du type de transaction gérée par conteneur . Il peut décider si l'état est plein ou sans état.

Je comprends la gestion point de état qui est en effet important du point de vue du client.

Concernant les transactions, c'est un peu plus compliqué.

  • Le type de transaction (bean-managed ou container-managed) est les détails de mise en œuvre (je ne suis pas sûr de votre exemple (a)).
  • Le propagation sémantique est pas. (required, mandatory, none, etc.).

maintenant - le conteneur peut piéger ces situations; mais pourquoi attendre jusqu'à runtime?

Même si tout ce qui était présent avec une interface, le système de type ne serait toujours pas suffisant pour faire respecter les règles de type compilation.

Vous avez quand même besoin d'un outil pour vérifier ces contraintes en fonction de leur sémantique applicative.L'EDI pourrait le faire s'il analysait l'annotation, le conteneur pourrait le faire quand le module est déployé, et au pire il échoue au moment de l'exécution.

Pourquoi la sémantique de transaction et exigences de l'Etat-plénitude ne font pas partie de l'interface?

Une interface java porte seulement un ensemble limité d'informations sur l'utilisation correcte d'un composant, que ce soit une classe, et le haricot, ou une API. Le contrat global de la plupart des composants est beaucoup plus compliqué que ce qui est exposé dans l'interface.

Exemples:

  • -sécurité Sujet: Comment savoir si une classe particulière est thread-safe sans regarder dans le doc?
  • ContentHandler.characters(): comment savez-vous qu'il peut être appelé plus d'une fois par tag XML?
  • Et la liste est longue ...

J'utilise personnellement le contrat terme pour désigner ensemble complet de contraintes. L'interface ne me donne que la signature des méthodes du point de vue du système de types.

Si le sujet vous intéresse, je vous suggère de regarder design by contract. L'idée de formaliser le contrat entre composants est plus précise depuis longtemps. Donc, ma réponse serait: parce que même si c'était le cas, vous auriez toujours besoin de plus d'informations.

Questions connexes