我正在使用 Glassfish 4。我有一个 EAR,它有一个 WAR 和一个 JAR(带有 EJB)。
我想从我的 WAR 中调用 EJB,但我不确定是否需要使用本地或远程接口。
在我的 JAR中,我的 Bean 看起来像这样:
@Stateless
public class Test implements TestLocal {
@Override
public void testing() {
}
}
我的本地:
@Local
public interface TestLocal {
void testing();
}
在我的 WAR中,我有一个 Web 服务,它看起来像这样:
@WebService(serviceName = "TestWS")
public class TestWS {
private @EJB TestLocal testBean;
@WebMethod(operationName = "test")
public String test() {
testBean.test();
}
}
这两个都被打包到一个EAR中。
当我调用我的 WebService 方法时,我得到一个AccessLocalException:
警告:javax.ejb.AccessLocalException:客户端未授权在 com.sun.ejb.containers.BaseContainer.preInvoke(BaseContainer.java:1895) 在 com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java: 210)
首先 :
- 这是调用 EJB 的正确方法吗?EAR 中的 WAR 可以使用包含的 JAR 中的本地接口吗?
- 如果是这样,那么有人知道我做错了什么吗?我需要设置某种安全配置吗?