与Servlet相关的LifeCycle


/*
* JBoss, Home of Professional Open Source
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jboss.seam.contexts;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.jboss.seam.ScopeType;
import org.jboss.seam.core.Events;
import org.jboss.seam.log.LogProvider;
import org.jboss.seam.log.Logging;
import org.jboss.seam.servlet.ServletApplicationMap;
import org.jboss.seam.servlet.ServletRequestMap;
import org.jboss.seam.servlet.ServletRequestSessionMap;
import org.jboss.seam.servlet.ServletSessionMap;
import org.jboss.seam.web.Session;

/**
* Methods for setup and teardown of Seam contexts at the
* beginning and end of servlet requests.
*
* @author Gavin King
* @author <a href="mailto:theute@jboss.org">Thomas Heute</a>
*/
public class ServletLifecycle
{

private static final LogProvider log = Logging.getLogProvider(ServletLifecycle.class);

private static ServletContext servletContext;

public static ServletContext getServletContext()
{
//don't throw an exception if null, because of unit tests
return servletContext;
}

public static void beginRequest(HttpServletRequest request)
{
log.debug( ">>> Begin web request" );
Contexts.eventContext.set( new EventContext( new ServletRequestMap(request) ) );
Contexts.sessionContext.set( new SessionContext( new ServletRequestSessionMap(request) ) );
Contexts.applicationContext.set(new ApplicationContext( Lifecycle.getApplication() ) );
Contexts.conversationContext.set(null); //in case endRequest() was never called
}

public static void endRequest(HttpServletRequest request)
{
log.debug("After request, destroying contexts");
try
{
Session session = Session.getInstance();
boolean sessionInvalid = session!=null && session.isInvalid();

Contexts.flushAndDestroyContexts();

if (sessionInvalid)
{
Lifecycle.clearThreadlocals();
request.getSession().invalidate();
//actual session context will be destroyed from the listener
}
}
finally
{
Lifecycle.clearThreadlocals();
log.debug( "<<< End web request" );
}
}

public static void beginReinitialization(HttpServletRequest request)
{
log.debug(">>> Begin re-initialization");
Contexts.applicationContext.set( new ApplicationContext( Lifecycle.getApplication() ) );
Contexts.eventContext.set( new BasicContext(ScopeType.EVENT) );
Contexts.sessionContext.set( new SessionContext( new ServletRequestSessionMap(request) ) );
Contexts.conversationContext.set( new BasicContext(ScopeType.CONVERSATION) );
}

public static void endReinitialization()
{
Contexts.startup(ScopeType.APPLICATION);

Events.instance().raiseEvent("org.jboss.seam.postReInitialization");

// Clean up contexts used during reinitialization
Contexts.destroy( Contexts.getConversationContext() );
Contexts.conversationContext.set(null);
Contexts.destroy( Contexts.getEventContext() );
Contexts.eventContext.set(null);
Contexts.sessionContext.set(null);
Contexts.applicationContext.set(null);

log.debug("<<< End re-initialization");
}

public static void beginInitialization()
{
log.debug(">>> Begin initialization");
Contexts.applicationContext.set( new ApplicationContext( Lifecycle.getApplication() ) );
Contexts.eventContext.set( new BasicContext(ScopeType.EVENT) );
Contexts.conversationContext.set( new BasicContext(ScopeType.CONVERSATION) );
}

public static void endInitialization()
{
Contexts.startup(ScopeType.APPLICATION);

Events.instance().raiseEvent("org.jboss.seam.postInitialization");

// Clean up contexts used during initialization
Contexts.destroy( Contexts.getConversationContext() );
Contexts.conversationContext.set(null);
Contexts.destroy( Contexts.getEventContext() );
Contexts.eventContext.set(null);
Contexts.sessionContext.set(null);
Contexts.applicationContext.set(null);

log.debug("<<< End initialization");
}

public static void beginApplication(ServletContext context)
{
servletContext = context;
Lifecycle.beginApplication( new ServletApplicationMap(context) );
}

public static void endApplication()
{
Lifecycle.endApplication();
servletContext=null;
}

public static void beginSession(HttpSession session)
{
Lifecycle.beginSession( new ServletSessionMap(session) );
}

public static void endSession(HttpSession session)
{
Lifecycle.endSession( new ServletSessionMap(session) );
}

public static void resumeConversation(HttpServletRequest request)
{
ServerConversationContext conversationContext = new ServerConversationContext( new ServletRequestSessionMap(request) );
Contexts.conversationContext.set(conversationContext);
Contexts.businessProcessContext.set( new BusinessProcessContext() );
conversationContext.unflush();
}

}


node:从Servlet中我们可以获取ServletContext,HttpSession,HttpRequest,这将对Contexts非常有用,同时在ServletCycle中处理与beginSeeesin,beginRequest,init,
re-init,等与Servlet相关的处理.目的是为了设置Contexts的与ThreadLocal相关的上下文.
@see SeamListener
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值