我最近开发了一个使用Glassfish的应用程序并且开发进展非常顺利,现在使用JBoss我试图做同样的事情但是由于各种问题而减速,例如:@EJB可以工作但是@注入失败。我还没有精彩的课程,我只有一个Singleton Startup课程和一个简单的无状态课程,我注射了,令我惊讶的是注射不起作用。这是我的班级:
package com.czetsuya.dropship;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Singleton
@Startup
public class StartupListener {
private Logger log = LoggerFactory.getLogger(StartupListener.class);
@EJB
private TestService testService;
public StartupListener() {
}
@PostConstruct
private void init() {
testService.test();
log.debug("startup");
}
}
服务类:
package com.czetsuya.dropship;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
@Stateless
@LocalBean
public class TestService {
public TestService() {
}
public void test() {
System.out.println("run");
}
}
另一件事是如果我用以下生产者注入我的记录器它也不起作用并抛出:
Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [Logger] with qualifiers [@Default] at injection point [[field] @Inject private com.czetsuya.dropship.StartupListener.log]
记录器生产者:
@Produces
Logger createLogger(InjectionPoint injectionPoint) {
return LoggerFactory.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
}
请注意,我的ejb和war项目中有beans.xml。
我的beans.xml文件:
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/beans_1_0.xsd"></beans>
答案 0 :(得分:0)
嗯,我的坏,看起来像一个腐败的构建,在我清理和maven清理并将beans.xml内容更改为:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:s="urn:java:ee" xmlns:security="urn:java:org.jboss.seam.security" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://jboss.org/schema/cdi/beans_1_0.xsd"></beans>
注射现在有效。以及记录器注入。