这里au申请信用卡的功能,这里我们用ejb远程方法调用来完成。
首先根据配置文件里面的定义
[quote]<connector name="EJB_Connector" type="com.xti.messaging.connector.EjbClientConnector">
<property name="URL" value="hosturl1\:22162,hosturl2\:22172" />
<property name="ContextFactory" value="com.ibm.websphere.naming.WsnInitialContextFactory"/>
<property name="JNDI" value="ejb/Gateway" />
<property name="Home" value="com.xxbank.icc.acis.acisgateway.ejb.GatewayHome" />
<property name="Remote" value="com.xxbank.icc.acis.acisgateway.ejb.Gateway" />
</connector> [/quote]
下面是客户端就是我们前端的实现:
//有了EJBHome的实现对象后,我们可以调用create 来 初始化 EJB 远程session bean。
最终在以下客户端类中得到远程session bean的业务方法的返回值序列。
以下是定义在JFP端的远程home 和远程业务代理类接口。
首先根据配置文件里面的定义
[quote]<connector name="EJB_Connector" type="com.xti.messaging.connector.EjbClientConnector">
<property name="URL" value="hosturl1\:22162,hosturl2\:22172" />
<property name="ContextFactory" value="com.ibm.websphere.naming.WsnInitialContextFactory"/>
<property name="JNDI" value="ejb/Gateway" />
<property name="Home" value="com.xxbank.icc.acis.acisgateway.ejb.GatewayHome" />
<property name="Remote" value="com.xxbank.icc.acis.acisgateway.ejb.Gateway" />
</connector> [/quote]
下面是客户端就是我们前端的实现:
public class EjbServiceLocator{
//根据以下方法我们就可以初始化 GatewayHome, 这是一个EJBHome 接口,我们客户端即JFP可以自己创建一个同包名的接口GatewayHome。
private Object getHomeObject(Properties prp) throws NamingException, ClassNotFoundException {
Context ctx = new InitialContext(prp);//prp 会加载上面这个配置文件,JNDI获取上下文,JNDI的命名和定义在是服务器端。
String strJndiName = prp.getProperty("JNDI");//通过上下文搜索这个EJB的实现对象群。
Object obj = ctx.lookup(strJndiName); //得到对象。
Object ejbHomeObject = PortableRemoteObject.narrow(obj, Class.forName(prp.getProperty("Home")));//初始化EJBHome的实现。
return ejbHomeObject;
}
//有了EJBHome的实现对象后,我们可以调用create 来 初始化 EJB 远程session bean。
private Object retrieveRemoteObject(Properties prp) throws ...Exception{
...
Object ejbHomeObject = getHomeObject(prp);
Method createMethod = ejbHomeObject.getClass().getMethod("create", null);
Object remoteObject = createMethod.invoke(ejbHomeObject, null);//得到远程业务代理类的实现对象。这个实现对象是一个session bean,不过对我们jfp 是黑盒的。
...
return remoteObject;
}
public Object getRemoteObject(Properties prp) throws ...Exception{
...
remoteObject = retrieveRemoteObject(prp);
...
return remoteObject;
}
}
最终在以下客户端类中得到远程session bean的业务方法的返回值序列。
public class EjbClientConnector {
public Object[] sendObjects(String methodName, Object[] objects, Class[] methodParameters) throws ...Exception{
...
remoteObject = serviceLocator.getRemoteObject(this.prp);//远程session bean的实现对象。
...
remoteMethod = Class.forName(this.remote).getMethod(methodName, methodParameters);
remoteMethodResult = remoteMethod.invoke(remoteObject, objects);//调用session bean的业务方法。得到结果。
...
}
}
以下是定义在JFP端的远程home 和远程业务代理类接口。
package com.xxbank.ejb;
import java.rmi.RemoteException;
import java.util.HashMap;
import javax.ejb.EJBObject;
public abstract interface Gateway extends EJBObject
{
public abstract HashMap processApp(HashMap paramHashMap)
throws RemoteException, Exception;
public abstract HashMap getAppStatus(HashMap paramHashMap)
throws RemoteException, Exception;
public abstract void fireEOD(int paramInt1, int paramInt2)
throws RemoteException, Exception;
public abstract HashMap getRecalcResponse(HashMap paramHashMap)
throws Exception;
public abstract HashMap getPResponse(HashMap paramHashMap)
throws Exception;
public abstract HashMap releaseLock(HashMap paramHashMap)
throws Exception;
public abstract void insertDetails(HashMap paramHashMap)
throws Exception;
}
package com.xxbank.ejb;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
public abstract interface GatewayHome extends EJBHome
{
public abstract Gateway create()
throws CreateException, RemoteException;
}