@Inject EJB使用来自单独maven模块的接口

时间:2018-06-07 19:36:16

标签: maven ejb wildfly java-ee-7 multi-module

我想从单独的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 - adapterc1 - 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 请帮忙

0 个答案:

没有答案