У меня следующая настройка
- tokenmanager.jar
- SecurityService.class
- MyService.class (@Inject SecurityService)
- META-INF
- beans.xml
- MyApplication.war
- SecurityServiceProducer.class
- WEB-INF
- beans.xml
- web.xml
- lib
- tokenmanager.jar
Идея в том, что приложение может решать, как SecurityService составляется и внедряется в классы tokenmanager. Таким образом, tokenmanager.jar может использоваться несколькими командами с их собственными инъекциями зависимостей. Однако SecurityServiceProducer никогда не используется при запуске. Я использую liberty 20.0.0.x в качестве серверной среды (с добавлением, что все еще должно работать на WAS 8.5.5.9). По этой причине я все еще вынужден использовать beans 1.0
beans. xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
</beans>
Производитель
import javax.inject.Inject;
import javax.ws.rs.Produces;
public class SecurityServiceProducer {
@Inject
@RedisTokenStoreQualifier
private TokenStoreDao tokenStoreDao;
@Inject
@AdfsIdentityProviderServiceQualifier
private IdentityProviderService identityProviderService;
@Inject
private SecurityServiceFactory securityServiceFactory;
@Produces
public SecurityService producer() {
return securityServiceFactory.produce(tokenStoreDao, identityProviderService);
}
}
Я уже пробовал несколько шагов
- Пробовал ставить @Singleton на производителя
- Пробовал ставить @ApplicationScoped на производителя
- Пробовал ставить @Startup на производителя
- читать на bean- discovery-mode = all, но это, похоже, beans 1.1, а я использую beans 1.0
Может ли кто-нибудь указать мне на что-то еще, что я упустил?