jakarta-ee - WELD-001408 在注入(inject)点带有限定符 [@Named] 的类型 [LdapService] 的依赖关系不满足

标签 jakarta-ee dependency-injection ejb cdi weblogic12c

您好,我正在尝试将 EAR 部署到我的 Weblogic 服务器 12c (12.1.3),但没有成功。

我的 LdapService 类是一个无状态 EJB,默认没有 args 构造函数(这个项目是一个 ejb 包)

@Stateless
public class LdapService {

@Inject
public LdapService() {

} ...

我正在尝试将其注入(inject)另一个类,例如:
public class UserService {

private static final Logger logger = LoggerFactory.getLogger(UserService.class.getCanonicalName());
@Inject
private LdapService registerService;

@EJB(beanName = "Janus-session-1.0.jar#UserBean")
private TUserBean userBean;

...}

使用 @EJB 注释的 bean 可以被 CDI 识别,但是注入(inject)点向我抛出了这个关于 @Inject 的错误:

Deployment failed. The message was: org.jboss.weld.exceptions.DeploymentException: WELD-001409 Ambiguous dependencies for type [LdapService] with qualifiers [@Default] at injection point [[field] @Inject net.ab4cus.project.business.TransactionService.registerService]. Possible dependencies [[Session bean [class net.ab4cus.project.auth.LdapService with qualifiers [@Any @Default]; local interfaces are [LdapService]]



如果在 LdapService 中使用 @Named("LdapService") 然后在注入(inject)点使用:
@Inject @Named("LdapService") private LdapService registerService;

然后我得到了这个错误:

Deployment failed. The message was: org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [LdapService] with qualifiers [@Named] at injection point [[field] @Inject @Named net.ab4cus.project.business.UserService.registerService]



如何解决此错误并消除歧义?或者对其他bean执行@Inject的正确方法是什么?

谢谢你。

编辑 - - - - - - - - - - - - - - - - - - - - - - - - - ----------------------------------------------

我设法部署了 EAR,但现在出现了涉及 CDI 的其他错误。

我的 EAR 内容是:EJB 模块(带有 bean 和所有业务逻辑)和两个 WAR(一个用于 WebServices,一个用于使用 Vaadin 的 Web FronEnd)。

WebServices 是 RESTFull,无论我尝试使用什么 WS,总是会出现以下错误:
java.lang.NullPointerException
at com.sun.jersey.server.impl.cdi.CDIComponentProviderFactory.<init>(CDIComponentProviderFactory.java:94)
at com.sun.jersey.server.impl.cdi.CDIComponentProviderFactoryInitializer.initialize(CDIComponentProviderFactoryInitializer.java:76)
at com.sun.jersey.spi.container.servlet.WebComponent.configure(WebComponent.java:572)
at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.configure(ServletContainer.java:314)
at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:604)
Truncated. see log file for complete stacktrace

如果我尝试使用前端,则每次访问 bean 时都会收到此错误(对于每个 bean):
SEVERE: 
java.lang.IllegalArgumentException: Can not set net.ab4cus.project.session.TUserBean field net.ab4cus.project.business.UserService.userBean to net.ab4cus.project.session.UserBean_o7pydo_NoIntfViewImpl
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:164)
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:168)

我正在尝试解决这个问题,但现在不知道:/

最佳答案

我的第一个错误的解决方案是:

- 从 LdapService 和默认构造函数中移除 @Stateless 和 @Inject

public class LdapService {

}...

- 为 LdapService 创建一个接口(interface)并将此接口(interface)@Inject 到 UserService
public class UserService {

private static final Logger logger = LoggerFactory.getLogger(UserService.class.getCanonicalName());
@Inject
private LdapServiceInterface registerService;

@EJB(beanName = "Janus-session-1.0.jar#UserBean")
private TUserBean userBean;

...}

关于jakarta-ee - WELD-001408 在注入(inject)点带有限定符 [@Named] 的类型 [LdapService] 的依赖关系不满足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26998356/

相关文章:

eclipse - 我在 Eclipse 新建项目向导中没有 "Dynamic Web Project"选项

Java运行时保留注释-注释类在编译时需要但在运行时不需要?

java - weblogic服务器发布失败

java - Netbeans 中的 Affable Bean Java EJB Glassfish 教程问题

java - 为什么不能注入(inject)泛型类?

Java EE 部署问题

java - 如何在不重新启动服务器的情况下重新部署 EJB 项目

jakarta-ee - 从一台服务器到多台可配置服务器的 JNDI 查找

php - 什么是依赖注入(inject)容器?

unit-testing - 使用 Spring 注入(inject) EasyMock 模拟导致 ClassCastException