尝试使用@EJB注释将EJB注入另一个EJB: 1)第一个EJB“ TestEJB”具有两个接口(AdditionRemote和AdditionLocal) 和一个类实现(添加)
2)第二个EJB“ TestEJB2”具有两个接口(DivisionRemote和DivisionLocal)和一个类实现(Division)
这是“ TestEJB”的代码,我想在其中插入TestEJB2的引用:
@EJB
private Division d;
public Addition() {
// TODO Auto-generated constructor stub
}
@Override
public int add(int a, int b) {
return a+b;
}
@Override
public void call() {
// TODO Auto-generated method stub
d.div(4, 2);
}
但是,当我在代码中使用@EJB注释时,我将无法再部署TestEJB。 我收到此错误消息:
[org.jboss.as.controller.management-operation] (DeploymentScanner-threads - 1) WFLYCTL0013: Operation ("full-replace-deployment") failed - address: ([]) - failure description: {"WFLYCTL0080: Failed services" => {"jboss.deployment.unit.\"TestEJB.jar\".POST_MODULE" => "WFLYSRV0153: Failed to process phase POST_MODULE of deployment \"TestEJB.jar\"
Caused by: java.lang.RuntimeException: WFLYSRV0177: Error getting reflective information for class logic.Addition with ClassLoader ModuleClassLoader for Module \"deployment.TestEJB.jar\" from Service Module Loader
Caused by: java.lang.NoClassDefFoundError: Labsurd/Division;
Caused by: java.lang.ClassNotFoundException: absurd.Division from [Module \"deployment.TestEJB.jar\" from Service Module Loader]"}}
18:45:39,399信息[org.jboss.as.server](DeploymentScanner线程-1)WFLYSRV0016:将部署“ TestEJB.jar”替换为部署“ TestEJB.jar” 18:45:39,400 INFO [org.jboss.as.controller](DeploymentScanner线程-1)WFLYCTL0183:服务状态报告 WFLYCTL0186:无法启动的服务:service jboss.deployment.unit。“ TestEJB.jar”。POST_MODULE:WFLYSRV0153:无法处理部署“ TestEJB.jar”的阶段POST_MODULE
答案 0 :(得分:0)
您必须注入接口之一或将@localbean(用于无接口视图)添加到Division
@EJB
private DivisionLocal d;
or
@EJB
private DivisionRemote d;
因为代理是为接口创建的(当您实现接口时,除非使用@LocalBean对其进行注释,否则不会为会话bean创建无接口视图)