Interface CDI wildfly 外部项目

Interface CDI wildfly external projects

所以我的想法是有 3 个项目:

  1. com.tests.interfaces
  2. com.tests.services
  3. com.tests.schedulers

com.tests.interfaces 基本上就是:

@Remote
public interface IFoo {
    public String test(); 
}

com.tests.services 是:

@Stateless(name = "IFoo")
public class FooBean implements IFoo {

    public String test() {
        return "Hello world";
    }

}

我正在部署“服务”项目,它使用 wildfly 24.0.0 运行良好。然后我试图有另一个 .war 项目叫做:com.tests.schedulers 看起来像这样:

@Stateless
public class TestEjb {

    @EJB(beanName = "IFoo")
    IFoo iFoo;
    
    public void teste() {
        iFoo.test();
    }
    
}

@Singleton
public class ExecutorMainframeProcessamento {

    @EJB
    TestEjb testEjb;

    @Schedule(second = "*/5", minute = "*", hour = "*", dayOfWeek = "*", persistent = false, info ="Test EJB")
    public void atSchedule() {
        testEjb.test();
    }
}

但无法部署,这是 wildfly(所有 .wars 的同一服务器)输出的相关部分:

Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: WFLYEJB0405: No Jakarta Enterprise Beans found with interface of type 'com.tests.interfaces.IFoo' and name 'IFoo' for binding com.tests.schedulers.TestEjb/iFoo

我错过了什么或做错了什么?

您不能从另一个 WAR 中的 class 引用一个 WAR 中的 class(除非两者在同一个 EAR 中)。

这是设计使然!

请注意,您可以将所有项目放在单独的 JAR 文件中,这些文件放在同一个 WAR 文件中,然后在部署时共享它们的 class 路径。这就是通常的做法。要么将您的项目转换为 Maven 项目并引用工件,要么让您的 IDE 帮助您创建单个 WAR.