|
Last Modified: 2003.12.02
JFox使用的传输协议
JFox使用了协议后决的调用方式,在获得EJB Home的时候,并没有给接下来的调用绑定协议,知道进行EJB组件方法调用的时候,
才绑定一个确切的协议,JFox暂时只支持JRMP 和 Local 两种协议,更多的协议如:SOAP HTTP IIOP等将在后来的版本中发布。
默认情况下,远程客户调用应用服务器中的EJB组件,将使用JRMP协议,而同一个应用服务器中间的EJB之间的调用,
将使用之间的Java调用方式(LOCAL调用),提高执行速度。
但是在某些特定的情况下,比如希望EJB之间的调用也采用JRMP进行远程调用(虽然这种情况很少),这个时候,
就需要强行转换调用协议,jfox提供了强行转换调用协议的接口。看下面的例子,
完整的代码见:org.jfox.ejb.examples.protocol.HelloBean
public String getWordByLocal() throws RemoteException {
try {
Context ctx = new InitialContext();
Object obj = ctx.lookup("" + WorldHome.class.getName().replace('.','/'));
WorldHome home = (WorldHome)javax.rmi.PortableRemoteObject.narrow(obj,WorldHome.class);
// 可以省略,ejb 之间的调用默认将采用 Local 协议调用
((ExtendedEJBHome)home).useProtocol("LOCAL");
World world = home.create();
return world.getWord();
}
catch(Exception e){
throw new RemoteException(e.getMessage(),e);
}
}
public String getWordByJRMP() throws RemoteException {
try {
Context ctx = new InitialContext();
Object obj = ctx.lookup("" + WorldHome.class.getName().replace('.','/'));
WorldHome home = (WorldHome)javax.rmi.PortableRemoteObject.narrow(obj,WorldHome.class);
((ExtendedEJBHome)home).useProtocol("JRMP"); // EJB 之间的调用强行使用 JRMP 协议
World world = home.create();
return world.getWord();
}
catch(Exception e){
throw new RemoteException(e.getMessage(),e);
}
}
现在ExtendedEJBHome.useProtocol() 的有效参数只有 JRMP 和 LOCAL,协议不区分大小写。
因为jfox已经自动选择了最佳的调用协议,且强行转换调用协议超出了EJB规范的内容,
所以我们希望您一般情况下不要这样做。
|
|