Bonjour,
Au niveau d'un session bean (stateless) qui fonctionne correctement en mode managé j'ai besoins de gérer manuellement ma transaction pour la méthode supprimerLocalite.
L'objectif est de pouvoir catcher une ConstraintViolationException dans la couche métier, c'est en recherchant dans ce forum des problèmes semblables au mien que j'ai compris que les exceptions lancées lors du comit() ne peuvent pas être attrapées dans la méthode puisqu'elles sont lancées à la fin (en mode managé).
Voici le code :
Je précise que du coup je n'ai pas placé les méthodes begin(), joinTransaction() et commit() autour de la suppression
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 @Stateless @Remote(ConfigurationBeanRemote.class) public class ConfigurationBean implements ConfigurationBeanRemote { @PersistenceContext(unitName = "adressesEJB", type=PersistenceContextType.TRANSACTION) EntityManager em; public ConfigurationBean() { } @Override public void modifierLocalite(Localite cetteLocalite) throws InternalErrorException { try { em.merge(cetteLocalite); } catch (Exception e) { e.printStackTrace(); throw new InternalErrorException("Erreur lors de modification de cette localité"); } } @TransactionManagement(TransactionManagementType.BEAN) public void effacerLocalite(Localite cetteLocalite) throws InternalErrorException { try { em.remove(em.merge(cetteLocalite)); } catch (ConstraintViolationException e1) { e1.printStackTrace(); throw new InternalErrorException("Cette localité ne peut pas être supprimée"); } catch (Exception e) { e.printStackTrace(); throw new InternalErrorException("Erreur lors de suppression de cette localité"); } }
Quand j'utilise, sur la méthode supprimerLocalite l'annotation :
mon parseur me dit (The annotation @TransactionManagement is disallowed for this location) qu'elle ne peut pas être utilisée à cet endroit et pourtant j'ai lu le contraire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part @TransactionManagement(TransactionManagementType.BEAN)
Voilà j'ai besoins de votre aide à nouveau.
Partager