Injecter un EJB dans un objet (annotation @EJB ?)
Bonjour,
j'ai une servlet qui appelle un singleton :
Ma servlet
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
public class FindAdministratorForumServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
// ======================================
// = Entry point method =
// ======================================
@Override
protected void service(final HttpServletRequest request,
final HttpServletResponse response) throws ServletException,
IOException {
final int rows=3;
int page = Integer.parseInt(request.getParameter("page"));
List<Topic> discussionList = ListHandlerService.getForumTopics(page); |
Mon singleton :
Code:
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
|
package service;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import javax.ejb.EJB;
import sessionbean.TopicService;
import entitybean.Topic;
public class ListHandlerService {
private final static int rows=3;
/** L'instance statique */
private static ListHandlerService instance;
/** objet pour la synchronisation.
* j'ajoute deux "soulignés" (__) au nom de l'attribut car il n'a
* qu'un intérêt purement technique.
*/
private static Object objetSynchrone__;
private static List<Topic> listTopic;
@EJB
private static TopicService discussionService;
/** Récupère l'instance unique de la class Singleton.
* Remarque : le constructeur est rendu inaccessible
*/
public static ListHandlerService getInstance() {
if (null == instance) { // Premier appel
synchronized(objetSynchrone__) {
if (null == instance) {
instance = new ListHandlerService();
}
}
}
return instance;
}
/** Constructeur redéfini comme étant privé pour interdire
* son appel et forcer à passer par la méthode
*/
private ListHandlerService() {
}
public static List<Topic> getForumTopics(int page) {
int i = 0;
Topic topic;
LinkedList<Topic> result = new LinkedList<Topic>();
if (page==1) {
listTopic = discussionService.getForumTopics();
ListIterator<Topic> listIterator = listTopic.listIterator();
while (listIterator.hasNext() && (i< rows)) {
topic = listIterator.next();
result.add(topic);
i++;
}
} else {
ListIterator<Topic> listIterator = listTopic.listIterator();
while (listIterator.hasNext() && (i< rows*(page-1))) {
listIterator.hasNext();
i++;
}
while (listIterator.hasNext() && (i< rows*page)) {
topic = listIterator.next();
result.add(topic);
i++;
}
}
return result;
}
public static int getSize() {
return listTopic.size();
}
} |
Dans mon singleton qui est un objet JAVA pur, l'injection de mon EJB par l'annotation @EJB ne semble pas marcher. En effet à l'éxécution, "discussionService" qui devrait etre injecté et initialisé est null.
Pouvez-vous me venir en aide ? merci