2009-02-20 6 views

Répondre

2

Voici mon coup de couteau à ce sujet:

obligatoire: Un EJB peut être fournit une fonction interne qui suppose/repose sur les transactions d'un appelant déjà en cours d'exécution, et si elle n'est pas, pour diverses raisons, ne peut pas en lancer un et donc il va lancer une erreur EJB. La vraie question ici est de savoir pourquoi cela serait une exigence et le seul scénario que je puisse concevoir serait celui où il pourrait y avoir des actions spécifiques liées à la transaction qui doivent être exécutées lorsqu'une transaction commence et que certains EJB ne sont pas équipés pour ces actions. sont marqués obligatoires. Je suppose que vous pouvez également utiliser cet attribut pour garantir une acquisition de verrous cohérente et correctement ordonnée, dans le cas contraire, un blocage pourrait se produire.

Jamais: Cela force votre EJB pour lancer une exception si une transaction est en cours d'exécution lorsque l'EJB est invoquée, et encore une fois, la vraie question est quel genre de scénario nécessiterait cela. Se référant à Mastering EJB Third Edition, Ed Roman affirme que cet attribut est utile pour réduire les erreurs de codage côté client en empêchant l'hypothèse erronée que l'EJB participera à une procédure ACID.

Peut-être que d'autres pourront fournir des scénarios plus concrets pour ces attributs.

1

i un cas où l'obligatoire attribut est utile:

j'ai un haricot, avec est appelé par de nombreuses applications. en fonction de l'application appelante, je souhaite avoir la possibilité de rejoindre la transaction appelante, ou de lancer une nouvelle transaction. donc j'ai 2 haricots définis, un avec RequiresNew et un avec Required. Le second peut utiliser le Mandatory, pour s'assurer qu'il y a une transaction appelante, mais ce n'est pas nessesery.

6

J'ai récemment travaillé sur un projet qui insistait sur le fait que toutes les transactions étaient marquées dans la couche application (les classes de service) et que les objets d'accès aux données ne devaient pas être appelés directement. Cela permettait de garantir que la base de données n'était jamais écrite sans que la logique d'application associée ne soit invoquée (en général, l'opération de la base de données était associée à un message envoyé en file d'attente).

Une application de OBLIGATOIRE sur chaque EJB DAO assurait que pendant qu'ils s'exécutaient dans une transaction, c'était le travail d'un appelant d'en commencer un. Puisque les DAO ont été appelés par les classes de service (qui avaient la valeur par défaut de REQUIRED), cela signifiait qu'ils fonctionnaient très bien, mais que quiconque les appelant par accident serait récompensé par une exception.

1

obligatoire et jamais sont utilisés dans les cas où vous souhaitez être informé explicitement du fait que le client ne fonctionne pas dans un champ d'opération, en lançant une exception.

obligatoire lancers francs TransactionRequiredException tout jamais lancers francs RemoteException.

Par exemple, si le client fonctionne intérieur/extérieur une transaction et invoque une méthode de haricot d'entreprise, qui sera également fonctionner intérieur/extérieur une transaction, aucune exception sera levée pour SOUTIENT. Toutefois, si vous avez utilisé INDISPENSABLE, pour la en dehors cas, un TransactionRequiredException sera jeté.

Questions connexes