免責聲明應用多個EJB:我是相當新的EJB的整個概念EJB無法解析引用,因爲有在同一個界面
我試圖做一個簡單的企業應用程序,它利用了EJB的依賴注入機制。我嘗試注入的對象是不同的(非泛型的)類,它們都實現相同的(通用)接口,並且也暴露爲該接口的類型爲其包含的類。問題是EJB不知道用什麼類來實例化它們包含的類中的所有對象。我將如何去解決這個問題?
(壞代碼格式化道歉)
,我試圖注入類:
@Stateless
public class HumidityRepository implements ITimeStampedDataRepository<Humidity>, Serializable {
@PersistenceContext(unitName = "WeatherPU")
private EntityManager em;
@Override
public List<Humidity> getAll() {
Query q = em.createQuery("allHumidity");
System.out.println(q.getResultList());
List<Humidity> result = q.getResultList();
return result;
}
@Override
public List<Humidity> getAllOnDate(LocalDate date) {
Query q = em.createQuery("onDateHumidity")
.setParameter("date", date);
System.out.println(q.getResultList());
List<Humidity> result = q.getResultList();
System.out.println(result);
return result;
}
@Override
public List<Humidity> getAllAfter(LocalDate date, LocalTime time) {
Query q = em.createQuery("afterHumidity")
.setParameter("date", date)
.setParameter("time", time);
List<Humidity> result = q.getResultList();
return result;
}
@Override
public void remove(LocalDate date, LocalTime time) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void store(Humidity data) {
em.persist(data);
}
}
和:
@Stateless
public class TemperatureRepository implements ITimeStampedDataRepository<Temperature>, Serializable {
@PersistenceContext(unitName = "WeatherPU")
private EntityManager em;
@Override
public List<Temperature> getAll() {
Query q = em.createQuery("allTemperature");
System.out.println(q.getResultList());
List<Temperature> result = q.getResultList();
return result;
}
@Override
public List<Temperature> getAllOnDate(LocalDate date) {
Query q = em.createQuery("onDateTemperature")
.setParameter("date", date);
System.out.println(q.getResultList());
List<Temperature> result = q.getResultList();
System.out.println(result);
return result;
}
@Override
public List<Temperature> getAllAfter(LocalDate date, LocalTime time) {
Query q = em.createQuery("afterTemperature")
.setParameter("date", date)
.setParameter("time", time);
List<Temperature> result = q.getResultList();
return result;
}
@Override
public void remove(LocalDate date, LocalTime time) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void store(Temperature data) {
em.persist(data);
}
}
他們共同的接口:
public interface ITimeStampedDataRepository<T extends TimeStampedData> {
public List<T> getAll();
public List<T> getAllOnDate(LocalDate date);
public List<T> getAllAfter(LocalDate date, LocalTime time);
public void remove(LocalDate date, LocalTime time);
public void store(T data);
}
Finall Y,它們所包含的類是:
@Dependent
public class Service implements IService {
@EJB
private ITimeStampedDataRepository<Humidity> humidityRepository;
@EJB
private ITimeStampedDataRepository<Temperature> temperatureRepository;
...
}
模具,如果你使用的具體類工作? '@EJB private HumidityRepository humidityRepository; @EJB private TemperatureRepository temperatureRepository;' –