package org.ovirt.engine.core.utils;
import javax.interceptor.AroundInvoke;
import javax.interceptor.InvocationContext;
import javax.servlet.http.HttpSession;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;
import org.jboss.injection.WebServiceContextProxy;
import org.ovirt.engine.core.common.config.Config;
import org.ovirt.engine.core.common.config.ConfigValues;
import org.ovirt.engine.core.compat.LogCompat;
import org.ovirt.engine.core.compat.LogFactoryCompat;
public class CXFContextInterceptor {
// should take the context as a resource but doesn't work
// @Resource WebServiceContext wsContext;
private static LogCompat log = LogFactoryCompat.getLog(CXFContextInterceptor.class);
@AroundInvoke
public Object injectWebContextToThreadLocal(InvocationContext ic) throws Exception {
WebServiceContext wsContext = new WebServiceContextProxy();
MessageContext mc = wsContext.getMessageContext();
HttpSession session = ((javax.servlet.http.HttpServletRequest) mc.get(MessageContext.SERVLET_REQUEST))
.getSession();
session.setMaxInactiveInterval(Config.<Integer> GetValue(ConfigValues.UserSessionTimeOutInterval) * 60);
if (log.isDebugEnabled()) {
log.debug("session id=" + session.getId());
}
ThreadLocalParamsContainer.setHttpSessionId(session.getId());
return ic.proceed();
}
}