⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 threadvariablemanager.java

📁 《j2ee开发全程实录》随书源码
💻 JAVA
字号:
package com.cownew.PIS.framework.server.helper;

import java.sql.Connection;

import javax.sql.DataSource;

import org.hibernate.Session;
import org.springframework.jdbc.datasource.DataSourceUtils;

import com.cownew.PIS.framework.bizLayer.hibernate.HibernateConfig;
import com.cownew.PIS.framework.server.sessionMgr.ServerUserContext;
import com.cownew.PIS.framework.server.sessionMgr.SessionManager;
import com.cownew.ctk.common.StringUtils;
import com.cownew.ctk.database.DbUtils;

/**
 * 线程变量管理器,我们的框架中的大部分关键变量,
 *比如当前用户 当前数据库连接登都是与当前线程相关,
 *因此这些变量都要通过此管理器取得
 * @author 杨中科
 *
 */
public class ThreadVariableManager
{

	private static ThreadVariableManager instance;

	private static final ThreadLocal dataSource = new ThreadLocal();
	
	private static final ThreadLocal connection = new ThreadLocal();

	private static final ThreadLocal session = new ThreadLocal();
	
	private static final ThreadLocal sessionId = new ThreadLocal();

	private ThreadVariableManager()
	{
		super();
	}

	public static ThreadVariableManager getInstance()
	{
		if (instance == null)
		{
			instance = new ThreadVariableManager();

		}

		return instance;
	}

	
	public void setCurrentSessionId(String id)
	{
		sessionId.set(id);
	}
	
	public String getCurrentSessionId()
	{
		return (String) sessionId.get();
	}
	
	public ServerUserContext getCurrentServerUserContext()
	{
		String sessionId = getCurrentSessionId();
		if(StringUtils.isEmpty(sessionId))
		{
			return null;
		}
		return SessionManager.getInstance().getServerUserContext(sessionId);
	}
	
	
	/**
	 * 得到当前线程的数据源
	 * @return
	 * @
	 */
	public DataSource getDataSource() 
	{
		DataSource ds = (DataSource) dataSource.get();
		if (ds == null)
		{
			ServerUserContext userCtx = getCurrentServerUserContext();
			if (userCtx == null)
			{
				return null;
			}
			String acName = userCtx.getACName();
			ds = ACManager.getInstance().getDataSource(acName);
			dataSource.set(ds);
		}
		return ds;
	}

	public Connection getConnection()
	{
		Connection conn = (Connection) connection.get();
		if (conn == null)
		{
			conn = DataSourceUtils.getConnection(getDataSource());
			connection.set(conn);
		}
		return conn;
	}

	public Session getSession()
	{
		Session s = (Session) session.get();

		if (s == null)
		{
			s = HibernateConfig.getSessionFactory()
					.openSession(getConnection());
			session.set(s);
		}

		return s;
	}

	/**
	 * 清除线程变量,关闭相关资源
	 * @
	 */
	public void clear() 
	{
		Session s = (Session) session.get();
		if (s != null)
		{
			s.close();
		}
		session.set(null);

		Connection conn = (Connection)connection.get();
		if (conn != null)
		{
			DbUtils.close(conn);
		}

		connection.set(null);
		dataSource.set(null);
		sessionId.set(null);		
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -