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); } } } }