我想从单独的maven模块使用其接口(仅存在一个实现)注入EJB。我在部署到wildfly 11时遇到错误:
20:07:28,632 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC000001: Failed to start service jboss.deployment.unit."c2-0.1.0-SNAPSHOT.war".WeldStartService: org.jboss.msc.service.StartException in service jboss.deployment.unit."c2-0.1.0-SNAPSHOT.war".WeldStartService: Failed to start service
at org.jboss.msc//org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1978)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.base/java.lang.Thread.run(Thread.java:844)
Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type C1BeanPort with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject private com.test.c2.C2Bean.c1Bean
at com.test.c2.C2Bean.c1Bean(C2Bean.java:0)
at org.jboss.weld.core//org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:362)
at org.jboss.weld.core//org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:284)
at org.jboss.weld.core//org.jboss.weld.bootstrap.Validator.validateGeneralBean(Validator.java:137)
at org.jboss.weld.core//org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:158)
at org.jboss.weld.core//org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:501)
at org.jboss.weld.core//org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:61)
at org.jboss.weld.core//org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:59)
at org.jboss.weld.core//org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:62)
at org.jboss.weld.core//org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:55)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.base/java.lang.Thread.run(Thread.java:844)
at org.jboss.threads//org.jboss.threads.JBossThread.run(JBossThread.java:320)
20:07:28,644 ERROR [org.jboss.as.controller.management-operation] (DeploymentScanner-threads - 2) WFLYCTL0013: Operation ("deploy") failed - address: ([("deployment" => "c2-0.1.0-SNAPSHOT.war")]) - failure description: {"WFLYCTL0080: Failed services" => {"jboss.deployment.unit.\"c2-0.1.0-SNAPSHOT.war\".WeldStartService" => "Failed to start service
Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type C1BeanPort with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject private com.test.c2.C2Bean.c1Bean
at com.test.c2.C2Bean.c1Bean(C2Bean.java:0)
"}}
20:07:28,703 INFO [org.jboss.as.server] (DeploymentScanner-threads - 2) WFLYSRV0010: Deployed "c2-0.1.0-SNAPSHOT.war" (runtime-name : "c2-0.1.0-SNAPSHOT.war")
20:07:28,704 INFO [org.jboss.as.controller] (DeploymentScanner-threads - 2) WFLYCTL0183: Service status report
WFLYCTL0186: Services which failed to start: service jboss.deployment.unit."c2-0.1.0-SNAPSHOT.war".WeldStartService: Failed to start service
项目结构如下:
p - 父maven模块 c1 - 子模块1 JAR c1 - 端口JAR - 接口模块 c1 - 适配器JAR - 实现模块 c2 - 子模块2 WAR
我想@Inject
Ejb:
@Inject
private C1BeanPort c1Bean;
其中C1BeanPort
是接口和
@Stateless public class C1BeanAdapter implements C1BeanPort {
c1 - adapter
与c1 - port
有maven依赖关系
c1 - port
不依赖于c1 - adapter
的src:
@Local
@Stateless
public class C2Bean {
@Inject
private C1BeanPort c1Bean;
public void doSomething1() {
c1Bean.doSomething();
}
}
@Remote
public interface C1BeanPort {
void doSomething();
}
@Stateless
public class C1BeanAdapter implements C1BeanPort {
public void doSomething() {
System.out.println("C1BeanAdapter doing something");
}
}
每个项目在META-INF
中都有空beans.xml
个文件
以下是完整资料来源: https://github.com/masterdany88/jee_ejb_starter 请帮忙