package com.vci.server.bof.event;
|
|
import com.vci.corba.common.data.VCIInvocationInfo;
|
import com.vci.server.base.persistence.dao.HibernateSessionFactory;
|
import com.vci.server.bof.event.IServerEvent;
|
import com.vci.server.bof.server.ServiceParams;
|
import com.vci.server.mw.ServerContextVariable;
|
|
public class ServerPreEvent implements IServerEvent {
|
|
private static ServerPreEvent instance = null;
|
|
public static ServerPreEvent getInstance() {
|
if(instance == null) {
|
instance = new ServerPreEvent();
|
}
|
return instance;
|
}
|
|
@Override
|
public void doAction(ServiceParams params) throws Exception {
|
String className = ServerContextVariable.getVariablebyKey(PRE_EVENT_KEY);
|
if(className != null && className.length() > 0) {
|
//取过数据之后把这个变量置为空字符串,避免在后置事件调用服务端方法时,再次触发前后置事件而造成迭代
|
VCIInvocationInfo info = HibernateSessionFactory.getVciSessionInfo();
|
String[] exAttrs = info.extAttribs;
|
for (int i = 0; i < exAttrs.length; ++i) {
|
if ((exAttrs[i] != null) &&
|
(exAttrs[i].indexOf(PRE_EVENT_KEY + "=") == 0)) {
|
exAttrs[i] = "";
|
info.extAttribs = exAttrs;
|
break;
|
}
|
}
|
String[] classNames = className.split(EVENT_SEP);
|
for(String name : classNames) {
|
Class<?> c = Class.forName(name);
|
Object obj = c.newInstance();
|
System.out.println("触发前置事件:" + c.getSimpleName() + "!");
|
c.getDeclaredMethod("doAction", ServiceParams.class).invoke(obj, params);
|
}
|
}
|
}
|
|
}
|