injectName = ai.getInjectName();
}
}
public void process(ActionContext ac) throws Throwable {
RequestIocContext reqContext = null;
try {
if (null != moduleObj) {
ac.setModule(moduleObj);
} else {
Ioc ioc = ac.getIoc();
if (null == ioc)
throw Lang.makeThrow("Moudle with @InjectName('%s') or @IocBean('%s') but you not declare a Ioc for this app",
injectName,
injectName);
Object obj;
/*
* 如果 Ioc 容器实现了高级接口,那么会为当前请求设置上下文对象
*/
if (NutSessionListener.isSessionScopeEnable
&& ioc instanceof Ioc2) {
reqContext = new RequestIocContext(ac.getRequest());
HttpSession sess = Mvcs.getHttpSession(false);
IocContext myContext = null;
// 如果容器可以创建 Session ...
if (null != sess) {
SessionIocContext sessionContext = new SessionIocContext(sess);
myContext = new ComboContext(reqContext, sessionContext);
}
// 如果容器禁止了 Session ...
else {
myContext = reqContext;
}
Mvcs.setIocContext(myContext);
obj = ((Ioc2) ioc).get(moduleType, injectName, myContext);
}
/*
* 否则,则仅仅简单的从容器获取
*/
else
obj = ioc.get(moduleType, injectName);
ac.setModule(obj);
}
ac.setMethod(method);
// if (log.isDebugEnabled()) //打印实际执行的Method信息
// log.debugf("Handle URL[%s] by Method[%s]",ac.getPath(),method);
doNext(ac);
}
finally {
if (reqContext != null)
try {
reqContext.depose();
}
catch (Throwable e) {
if (log.isDebugEnabled())
log.debug("ReqContext depose fail?!", e);
}