Tha*_*ham 4 jsf ejb java-ee ejb-3.1
我有一个暴露于两个接口的EJB bean,如下所示:本地接口用于我的Web应用程序,Remote接口用于我的App Client
@Stateless
public class CoreMainEJB implements CoreMainEJBRemote, CoreMainEJBLocal {
//...
}
Run Code Online (Sandbox Code Playgroud)
所以我的App Client如下所示.在这种情况下发生远程方法调用
public class Main {
@EJB
private static CoreMainEJBRemote coreEJBRemote;
public static void main(String[] args) {
coreEJBRemote.process(args[0]);
}
}
Run Code Online (Sandbox Code Playgroud)
从我的网络应用程序,我调用如下.在这种情况下发生本地方法调用
@ManagedBean
@RequestScoped
public class DisplayInbound {
@EJB
private CoreMainEJBLocal coreMainEJBLocal;
public void processPackages() {
coreMainEJBLocal.process(...);
}
}
Run Code Online (Sandbox Code Playgroud)
所以这是我的问题,如果EJB只暴露了@Remote接口,但是在您的Web应用程序中,您直接注入EJB bean而不是其Remote接口,这会触发远程调用还是本地调用?例如:
@Stateless
public class CoreMainEJB implements CoreMainEJBRemote{
//...
}
Run Code Online (Sandbox Code Playgroud)
在网络应用程序中,我这样做
@EJB
private CoreMainEJB coreMainEJB;
public void processPackages() {
coreMainEJB.process(...); //Is this local or remote invocation here?
}
Run Code Online (Sandbox Code Playgroud)
给出的最后一个例子根本不起作用.由于CoreMainEJB已经实现了远程接口,因此容器不会创建无接口视图.这正是@LocalBean预期的情况.
所以回答这个问题' 这是本地或远程调用吗?'直接:它既不是.容器将无法注入任何东西,并且可能在部署阶段进行barf.
如果将bean定义为:
@Stateless
@LocalBean
public class CoreMainEJB implements CoreMainEJBRemote{
//...
}
Run Code Online (Sandbox Code Playgroud)
然后本地语义将适用于此:
@EJB
private CoreMainEJB coreMainEJB;
public void processPackages() {
coreMainEJB.process(...); // Local semantics
}
Run Code Online (Sandbox Code Playgroud)
(假设上面的代码片段与CoreMainEJB当前定义的应用程序在同一个应用程序中)
| 归档时间: |
|
| 查看次数: |
1957 次 |
| 最近记录: |