Bonjour à la communauté,
je développe une application java EE et je désir supprimer une ligne dans une DataTable (j'arrive à enregistrer mais pas à supprimer).
Dans mon tableau, j'ai un bouton pour la suppression lorsque je clique dessus , je récupère la ligne concernée (indexLigne) et j'appelle une boite de dialogue pour la suppression.Si l'utilisateur clique sur oui alors j'appelle la méthode supprimerLigneSortie.
Voici mon code :

mon managed bean
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
@ManagedBean(name = "sortieMB")
@SessionScoped
public class SortieMB  implements Serializable  {
    private static final long serialVersionUID = 1L;
 
    private TypeSortie typeSortie;
    private List<TypeSortie> listeTypeSortieAll;
 
    private Sortie sortie;
    private List<Sortie> listeSortieAll;
    private Integer idCommune;    
 
 
     private int indexLigne;
    /**
     * Creates a new instance of SortieMB
     */
    @Inject transient ParametreService parametreService;
    public SortieMB() {
    }
 
    public int getIndexLigne() {
        return indexLigne;
    }
 
    public void setIndexLigne(int indexLigne) {
        this.indexLigne = indexLigne;
    }
 
 
    public Sortie getSortie() {
        if (sortie==null){            
            sortie=new Sortie();
            sortie.setDateSortie(new Date());
        }
        return sortie;
    }
 
    public void setSortie(Sortie sortie) {
        this.sortie = sortie;
    }
 
 
    public List<Sortie> getListeSortieAll() {
        if(listeSortieAll==null){
            listeSortieAll=parametreService.getAllListeSortie();
        }
        return listeSortieAll;
    }
 
    public void setListeSortieAll(List<Sortie> listeSortieAll) {
        this.listeSortieAll = listeSortieAll;
    }
 
    public Integer getIdCommune() {
        return idCommune;
    }
 
    public void setIdCommune(Integer idCommune) {
        this.idCommune = idCommune;
    }
 
 
    public String ajouterSortie(){
        sortie=null;
        return null;
    }
 
     public String supprimerLigneSortie() {
        listeSortieAll.remove(indexLigne);
        if (sortie.getIdSortie() != null) { 
            parametreService.supprimer(sortie);
        }
        return null;
    }
 
    public String enregistrerSortie(){
        if(sortie.getDateSortie()==null){
            MessagesJsf.addErrorMessage("Veuillez choisir la date de la sortie!");
            return null;
        }
 
        if(StringUtils.isEmptyTrim(sortie.getVillageSortie())){
            MessagesJsf.addErrorMessage("Veuillez saisir le village concerné!");
            return null;
        }
 
        if(StringUtils.isEmptyTrim(sortie.getObjectifSortie())){
            MessagesJsf.addErrorMessage("Veuillez saisir l'objectif de la sortie!");
            return null;
        }
 
        if(idCommune==null || idCommune==-1){
            MessagesJsf.addErrorMessage("Veuillez choisir la commune!");
            return null;
        }        
        boolean nouveau = sortie.getIdSortie()== null;        
        sortie.setCommune(parametreService.getCommune(idCommune));        
        parametreService.enregistrer(sortie, nouveau);
        if(listeSortieAll==null){
            listeSortieAll = new ArrayList<>();
        }
        if(nouveau){
            listeSortieAll.add(0,sortie);
        }
 
        MessagesJsf.addInfoMessage("Opération exécuter avec succès!");
        return null;
    }
}
ma classe ParametreServiceImpl
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
public class ParametreServiceImpl extends PhaCrudImpl implements ParametreService {
 
    //recuperation de la liste des sorties pour affichage
    @Override
    public List<Sortie>  getAllListeSortie(){
        return parametreDao.getAllListeSortie();
    }
 
}
ma classe PhaCrudImpl
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
36
37
38
39
40
41
42
43
44
45
46
 
public class PhaCrudImpl {
    @PersistenceContext
    protected EntityManager em;
 
    public EntityManager getEm() {
        return em;
    }
 
    public void setEm(EntityManager em) {
        this.em = em;
    }
 
    public void add(Object objet) {
        em.persist(objet);
    }
 
    public void update(Object objet) {
        em.merge(objet);
    }
 
    public void delete(Object objet) {
        em.remove(objet);
    }
 
    public Object getObjectById(Class classe, Object id) {
        return em.find(classe, id);
    }
 
    @Transactional
    public boolean enregistrer(Object objet, boolean nouveau) {
        if (nouveau) {
            em.persist(objet);
        } else {
            em.merge(objet);
        }
        return true;
    }
 
    @Transactional  
    public boolean supprimer(Object objet) {
        em.remove(objet);
        return true;
    }
 
}
ma classe ParametreService
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
public interface ParametreService {
 
 
 
    //pour l'affichage de la liste;
    public List<Sortie>  getAllListeSortie();
 
    //enregistrement
    public boolean enregistrer(Object objet, boolean nouveau);
 
	//suppression
    public boolean supprimer(Object objet);
}
j’obtiens l'erreur ci dessous
Code : Sélectionner tout - Visualiser dans une fenêtre à part
javax.transaction.TransactionalException: Managed bean with Transactional annotation and TxType of REQUIRED encountered exception during commit javax.transaction.RollbackException: Transaction marquée pour annulation.
et voici la trace complète
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
 
javax.faces.el.EvaluationException: javax.transaction.TransactionalException: Managed bean with Transactional annotation and TxType of REQUIRED encountered exception during commit javax.transaction.RollbackException: Transaction marquée pour annulation.
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:357)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188)
	at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191)
	at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168)
	at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189)
	at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114)
	at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
	at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838)
	at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)
	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564)
	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544)
	at java.lang.Thread.run(Thread.java:724)
Caused by: javax.transaction.TransactionalException: Managed bean with Transactional annotation and TxType of REQUIRED encountered exception during commit javax.transaction.RollbackException: Transaction marquée pour annulation.
	at org.glassfish.cdi.transaction.TransactionalInterceptorRequired.transactional(TransactionalInterceptorRequired.java:106)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.jboss.weld.interceptor.proxy.SimpleMethodInvocation.invoke(SimpleMethodInvocation.java:30)
	at org.jboss.weld.interceptor.chain.AbstractInterceptionChain.invokeNext(AbstractInterceptionChain.java:93)
	at org.jboss.weld.interceptor.chain.AbstractInterceptionChain.invokeNextInterceptor(AbstractInterceptionChain.java:78)
	at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.executeInterception(InterceptorMethodHandler.java:48)
	at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.invoke(InterceptorMethodHandler.java:41)
	at org.jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:53)
	at pha.service.impl.ParametreServiceImpl$Proxy$_$$_WeldSubclass.supprimer(Unknown Source)
	at pha.view.SortieMB.supprimerLigneSortie(SortieMB.java:332)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at javax.el.ELUtil.invokeMethod(ELUtil.java:326)
	at javax.el.BeanELResolver.invoke(BeanELResolver.java:536)
	at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:256)
	at com.sun.el.parser.AstValue.invoke(AstValue.java:269)
	at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
	at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
	at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
	... 35 more
Caused by: javax.transaction.RollbackException: Transaction marquée pour annulation.
	at com.sun.enterprise.transaction.JavaEETransactionImpl.commit(JavaEETransactionImpl.java:445)
	at com.sun.enterprise.transaction.JavaEETransactionManagerSimplified.commit(JavaEETransactionManagerSimplified.java:854)
	at com.sun.enterprise.transaction.TransactionManagerHelper.commit(TransactionManagerHelper.java:81)
	at org.glassfish.cdi.transaction.TransactionalInterceptorRequired.transactional(TransactionalInterceptorRequired.java:99)
	... 60 more