В CDI 1.1 есть интерфейс javax.enterprise.context.spi.AlterableContext
, который позволяет вам по отдельности уничтожить экземпляр компонента. Все обычные области действия (запрос, разговор, сеанс) могут быть изменены.
AlterableContext ctxConversation = (AlterableContext) beanManager.getContext(ConversationScoped.class);
for (Bean<?> bean : beanManager.getBeans(Object.class)) {
Object instance = ctxConversation.get(bean);
if (instance != null) {
ctxConversation.destroy(instance);
}
}
beanManager
- это экземпляр javax.enterprise.inject.spi.BeanManager
. Вы можете получить его через поиск JNDI:
InitialContext.doLookup("java:comp/BeanManager");
или статическим методом CDI:
CDI.current().getBeanManager();
, но имейте в виду проблемы со статическим методом в некоторых версиях Weld: