Interface CDI wildfly 外部项目
Interface CDI wildfly external projects
所以我的想法是有 3 个项目:
- com.tests.interfaces
- com.tests.services
- 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.
所以我的想法是有 3 个项目:
- com.tests.interfaces
- com.tests.services
- 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.