У меня есть задача переписать некоторые старые логи c, хранящиеся в процедурах базы данных в java, с использованием JavaEE 7. Приложение развернуто на JBoss EAP 7.
Существует критическая функциональность, поэтому нам нужен какой-то переключатель, чтобы быстро переключаться между старой и новой реализацией некоторых служб в работе.
К сожалению, мы не можем сразу же доставлять и развертывать новые версии, даже в случае критических проблем. Поэтому нам нужно ввести такой переключатель в виде таблицы базы данных.
Чтобы обеспечить удобство сопровождения, я хотел бы использовать CDI для внедрения старых / новых реализаций на основе переключателя.
Самый простой способ, который я вижу, - использовать CDI Producers. Было бы хорошим решением сделать запрос DB в методе источника?
Мой пример:
@ApplicationScoped
public class NewServiceProducer {
@Inject
private ImplementationSwitcherDAO implementationSwitcherDAO;
@Produces
@RequestScoped
public NewService produceNewService(){
//a DB-Call is done here
boolean useOldVersion = implementationSwitcherDAO.isUseOldVersionForService("NewService");
if(useOldVersion){
return CDI.current().select(NewServiceOldImpl.class).get();
}
return CDI.current().select(NewServiceImpl.class).get();
}
}