生产者没有被用于位于罐子中的类。

问题描述 投票:0回答:1

我有以下设置

 - 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.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。

有谁能指点我一下我还忽略了什么?

jakarta-ee websphere-liberty websphere-8
1个回答
4
投票

对于 @Produces 注解,您使用的是 javax.ws.rs.Produces 而不是 javax.enterprise.inject.Produces

© www.soinside.com 2019 - 2024. All rights reserved.