Bonjour,
j'essaie de récupérer un service dans mon bean avec:
@EJB
private SuiviService suiviService;
Mais je récupère un objet null or la partie des services est normalement fonctionnelle car c'était ok avec JSF
Merci de votre aide

web.xml
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
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
 
    <filter>
        <display-name>Stripes Filter</display-name>
        <filter-name>StripesFilter</filter-name>
        <filter-class>net.sourceforge.stripes.controller.StripesFilter</filter-class>
        <init-param>
            <param-name>ActionResolver.Packages</param-name>
            <param-value>net.sourceforge.stripes.examples</param-value>
        </init-param>
 
 
        <!--init-param>
            <param-name>Extension.Packages</param-name>
            <param-value>com.samaxes.stripes.ejb3</param-value>
        </init-param>
        <init-param>
            <param-name>Extension.Packages</param-name>
            <param-value>com.samaxes.stripes.inject</param-value>
        </init-param>
        <init-param>
            <param-name>Interceptor.Classes</param-name>
            <param-value>com.samaxes.stripes.ejb3.EJBInterceptor</param-value>
        </init-param>
        <init-param>
            <param-name>MultipartWrapperFactory.Class</param-name>
            <param-value>com.myco.CustomMultipartWrapperFactory</param-value>
        </init-param>
        <init-param>
            <param-name>MultipartWrapper.Class</param-name>
            <param-value>net.sourceforge.stripes.controller.multipart.CommonsMultipartWrapper</param-value>
        </init-param!-->
 
 
 
    </filter>
 
    <filter-mapping>
        <filter-name>StripesFilter</filter-name>
        <url-pattern>*.jsp</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>
 
    <filter-mapping>
        <filter-name>StripesFilter</filter-name>
        <servlet-name>StripesDispatcher</servlet-name>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>
 
    <servlet>
        <servlet-name>StripesDispatcher</servlet-name>
        <servlet-class>net.sourceforge.stripes.controller.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>StripesDispatcher</servlet-name>
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>
 
<!-- or
        <init-param>
            <param-name>Interceptor.Classes</param-name>
            <param-value>com.samaxes.stripes.ejb3.EJBInterceptor</param-value>
        </init-param>
<init-param>
    <param-name>Extension.Packages</param-name>
    <param-value>com.samaxes.stripes.ejb3</param-value>
</init-param-->
</web-app>

CalculatorActionBean
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
 
package net.sourceforge.stripes.examples.quickstart;
 
 
import fr.mgi.facturation.service.SuiviService;
import javax.ejb.EJB;
import net.sourceforge.stripes.action.DefaultHandler;
import net.sourceforge.stripes.action.Resolution;
import net.sourceforge.stripes.action.ForwardResolution;
import net.sourceforge.stripes.action.ActionBean;
import net.sourceforge.stripes.action.ActionBeanContext;
 
 
public class CalculatorActionBean implements ActionBean {
    private ActionBeanContext context;
    private double numberOne;
    private double numberTwo;
    private double result;
    @EJB
    private SuiviService suiviService;
 
    public ActionBeanContext getContext() { return context; }
    public void setContext(ActionBeanContext context) { this.context = context; }
 
    public double getNumberOne() { return numberOne; }
    public void setNumberOne(double numberOne) { this.numberOne = numberOne; }
 
    public double getNumberTwo() { return numberTwo; }
    public void setNumberTwo(double numberTwo) { this.numberTwo = numberTwo; }
 
    public double getResult() { return result; }
    public void setResult(double result) { this.result = result; }
 
    @DefaultHandler
    public Resolution addition() {
        result = getNumberOne() + getNumberTwo();
        if(suiviService != null)
        result = suiviService.get(1).getPoids();
        else{
        System.out.println("grr");
        }
        return new ForwardResolution("/index.jsp");
    }
}
SuiviService
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
package fr.mgi.facturation.service;
import fr.mgi.facturation.entity.Suivi;
 
public interface SuiviService {
    Suivi get(int suiviId);
    Suivi save(Suivi newSuivi);
}
SuiviServiceImpl
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
package fr.mgi.facturation.service.impl;
import fr.mgi.facturation.dao.SuiviDao;
import fr.mgi.facturation.entity.Suivi;
import fr.mgi.facturation.service.SuiviService;
import javax.ejb.EJB;
import javax.ejb.Local;
import javax.ejb.Stateless;
 
@Stateless
@Local(SuiviService.class)
 
public class SuiviServiceImpl implements SuiviService {
 
    @EJB
    SuiviDao suiviDao;
 
    @Override
    public Suivi get(int suiviId) {
        System.out.println("service impl");
        return suiviDao.get(suiviId);
    }
 
    @Override
    public Suivi save(Suivi newSuivi) {
        return suiviDao.save(newSuivi);
    }
}
SuiviDao
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
package fr.mgi.facturation.dao;
 
import fr.mgi.facturation.entity.Suivi;
 
public interface SuiviDao extends GenericDao<Suivi, Integer> {
    Suivi get(int suiviId);
}
GenericDao
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
package fr.mgi.facturation.dao;
 
import java.io.Serializable;
import java.util.List;
 
public interface GenericDao <T, Pk extends Serializable>{
    T save(T entite);
    void remove(Pk id);
    T get(Pk id);
    boolean exist(Pk id);
    List<T> findAll();
    List<T> findAll(String sortBy);
}

GenericDaoImpl
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
package fr.mgi.facturation.dao.impl;
 
import fr.mgi.facturation.dao.GenericDao;
import java.io.Serializable;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TransactionRequiredException;
import org.apache.log4j.Logger;
 
public abstract class GenericDaoImpl<T, Pk extends Serializable> implements GenericDao<T, Pk> {
 
    //la classe a manipuler
    private Class<T> persistentClass;
    //on manipule des EJB entity, besoin du persistence context.
    @PersistenceContext
    private EntityManager entityManager;
    private Logger log = Logger.getLogger(GenericDaoImpl.class);
 
    public GenericDaoImpl() {
    }
 
    public GenericDaoImpl(Class<T> persistentClass) {
        this.persistentClass = persistentClass;
    }
 
    @Override
    public T save(T entite) {
        log.debug(">" + this.getClass().getName() + " : save()");
        T type = null;
        try {
            type = entityManager.merge(entite);
        } catch (IllegalStateException e) {
            log.error(e.getMessage());
        } catch (IllegalArgumentException e) {
            log.error(e.getMessage());
        } catch (TransactionRequiredException e) {
            log.error(e.getMessage());
        }
        log.debug("<" + this.getClass().getName() + " : save()");
        return type;
    }
 
    @Override
    public void remove(Pk id) {
        log.debug(">" + this.getClass().getName() + " : remove()");
        try {
            entityManager.remove(entityManager.find(persistentClass, id));
        } catch (IllegalStateException e) {
            log.error(e.getMessage());
        } catch (IllegalArgumentException e) {
            log.error(e.getMessage());
        } catch (TransactionRequiredException e) {
            log.error(e.getMessage());
        }
        log.debug("<" + this.getClass().getName() + " : remove()");
    }
 
    @Override
    public T get(Pk id) {
        log.debug(">" + this.getClass().getName() + " : get()");
 
        T entite = null;
        try {
            entite = entityManager.find(persistentClass, id);
        } catch (IllegalStateException e) {
            log.error(e.getMessage());
        } catch (IllegalArgumentException e) {
            log.error(e.getMessage());
        }
        log.debug(">" + this.getClass().getName() + " : get()");
        return entite;
    }
 
    @Override
    public boolean exist(Pk id) {
        log.debug(">" + this.getClass().getName() + " : exist()");
 
        boolean ret = this.get(id) != null ? true : false;
 
        log.debug("<" + this.getClass().getName() + " : exist()");
        return ret;
    }
 
    @Override
    public List<T> findAll(String sortBy) {
        log.debug(">" + this.getClass().getName() + " : findAll(String sortBy)");
 
        if (!"".equals(sortBy)) {
            sortBy = "order By " + sortBy;//desc
        }
 
        StringBuilder queryString = new StringBuilder();
        queryString.append("Select o from ").append(persistentClass.getName()).append(" As o ").append(sortBy);
 
        log.debug("<" + this.getClass().getName() + " : findAll(String sortBy)");
        return entityManager.createQuery(queryString.toString()).getResultList();
    }
 
    @Override
    public List<T> findAll() {
        return findAll("");
    }
}
SuiviDaoImpl
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
package fr.mgi.facturation.dao.impl;
 
 
import fr.mgi.facturation.dao.SuiviDao;
import fr.mgi.facturation.entity.Suivi;
import javax.ejb.Local;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
 
 
 
/**
 *
 * @author dbg
 */
@Stateless
@Local(SuiviDao.class)
public class SuiviDaoImpl extends GenericDaoImpl<Suivi, Integer> implements SuiviDao {
 
    //on manipule des EJB entity, besoin du persistence context.
    @PersistenceContext
    private EntityManager entityManager;
 
    public SuiviDaoImpl() {
        super(Suivi.class);
    }
 
    @Override
    @SuppressWarnings("unchecked")
    public Suivi get(int suiviId) {
            StringBuilder query = new StringBuilder();
            query.append("Select o from ").
                    append(Suivi.class.getName()).
                    append(" As o Where upper(o.id) = upper('").
                    append(suiviId).
                    append("')");
 
            System.out.println("Suivi get(String suiviId) "+query);
 
            Suivi booking;
            try {
                booking = (Suivi) entityManager.createQuery(query.toString()).getSingleResult();
            } catch (Exception e) {
                booking = null;
            }
            return booking;
    }
}
persistence.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
    <persistence-unit name="FacturationEjbPU" transaction-type="JTA">
        <jta-data-source>java:/facturationDevDataSource</jta-data-source>
        <properties>
      <!--property name="hibernate.hbm2ddl.auto">create</property-->
            <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
      <!--property name="hibernate.show_sql" value="true"/-->
        </properties>
    </persistence-unit>
</persistence>