生产者未用于位于 jar 中的 class
Producer not being used for a class located in a jar
我有以下设置
- 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.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
任何人都可以指出我忽略的其他事情吗?
对于 @Produces
注释,您使用的是 javax.ws.rs.Produces
而不是 javax.enterprise.inject.Produces
我有以下设置
- 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.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
任何人都可以指出我忽略的其他事情吗?
对于 @Produces
注释,您使用的是 javax.ws.rs.Produces
而不是 javax.enterprise.inject.Produces