一个会话bean即可以远程访问,也可以本地访问,尽管这种现象不常见。
我们先定义远程接口:
@Remote
public interface HelloRemote {
String sayHi(String name);
String sayByeBye(String name);
}
public interface HelloRemote {
String sayHi(String name);
String sayByeBye(String name);
}
接着定义本地接口:
@Local
public interface HelloLocal {
String sayBye(String name);
}
public interface HelloLocal {
String sayBye(String name);
}
然后编写一个会话bean同时实现两个接口:
@Stateless
public class HelloBean implements HelloRemote, HelloLocal {
public String sayHi(String name) {
return "Hi " + name;
}
public String sayBye(String name) {
return "Bye " + name;
}
public String sayByeBye(String name) {
return sayBye(name);
}
}
public class HelloBean implements HelloRemote, HelloLocal {
public String sayHi(String name) {
return "Hi " + name;
}
public String sayBye(String name) {
return "Bye " + name;
}
public String sayByeBye(String name) {
return sayBye(name);
}
}
那么,这还是一个无状态会话bean,不过即可以远程访问,也可以本地访问。
<%
InitialContext ctx = new InitialContext();
HelloRemote helloBean = (HelloRemote)ctx.lookup(HelloRemote. class .getName());
out.println(helloBean.sayHi( " Tom " ));
out.println( " <br> " + helloBean.sayByeBye( " Tom " ));
%>
InitialContext ctx = new InitialContext();
HelloRemote helloBean = (HelloRemote)ctx.lookup(HelloRemote. class .getName());
out.println(helloBean.sayHi( " Tom " ));
out.println( " <br> " + helloBean.sayByeBye( " Tom " ));
%>
远程访问只能获得远程接口的代理,然后调用远程业务方法。在远程客户端是无法获得本地接口的引用,更别说访问本地方法了。