您好我试图将EAR部署到我的Weblogic服务器12c(12.1.3)但没有成功。
我的LdapService类是一个无状态EJB,默认没有args构造函数(这个项目是一个ejb包)
@Stateless
public class LdapService {
@Inject
public LdapService() {
} ...
我试图将它注入另一个类,如:
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的错误:
部署失败。消息是:org.jboss.weld.exceptions.DeploymentException: WELD-001409带有限定符的类型[LdapService]的模糊依赖关系 [@Default]在注入点[[field] @Inject net.ab4cus.project.business.TransactionService.registerService]。 可能的依赖[[Session bean [class net.ab4cus.project.auth.LdapService 有限定词[@Any @Default];本地接口是[LdapService]]
如果在LdapService中使用@Named(" LdapService")然后在注入点使用:
@Inject @Named("LdapService") private LdapService registerService;
然后我收到了这个错误:
部署失败。消息是:org.jboss.weld.exceptions.DeploymentException:WELD-001408不满意 注入时带有限定符[@Named]的类型[LdapService]的依赖项 point [[field] @Inject @Named net.ab4cus.project.business.UserService.registerService]
如何解决此错误并消除歧义?或者@Inject到其他bean的正确方法是什么?
谢谢。
修改------------------------------------------- -------------------------------------------------- -
我设法部署了EAR,但现在还有其他涉及CDI的错误。
我的EAR内容是:EJB模块(带有bean和所有业务逻辑)和两个WAR(一个用于Web服务,一个用于使用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)
我试图解决这个问题,但现在不知道:/
答案 0 :(得分:7)
我的第一个错误的解决方案是:
- 从LdapService和默认构造函数
中删除@Stateless和@Injectpublic class LdapService {
}...
为LdapService创建一个接口,并将此接口注入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;
...}