Производитель не используется для класса, расположенного в банке - PullRequest
2 голосов
/ 27 мая 2020

У меня следующая настройка

 - 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

Может ли кто-нибудь указать мне на что-то еще, что я упустил?

1 Ответ

4 голосов
/ 27 мая 2020

Для аннотации @Produces вы используете javax.ws.rs.Produces вместо javax.enterprise.inject.Produces

...