Problème Stripes et injection
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:
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:
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:
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:
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:
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:
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:
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:
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:
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> |