оговоркой: Я довольно новым для всей концепции EJBEJB не удается разрешить ссылки, потому что есть несколько EJBs в приложении с той же интерфейсом
Я пытаюсь сделать простое корпоративное приложение, которое делает использование 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 у, их содержащий класс:
@Dependent
public class Service implements IService {
@EJB
private ITimeStampedDataRepository<Humidity> humidityRepository;
@EJB
private ITimeStampedDataRepository<Temperature> temperatureRepository;
...
}
Dies это работает, если вы используете конкретные классы? '@EJB личная влажностьРазличная влажностьRepository; @ EJB приватная температураРезопасная температура Репозиторий; ' –