📄 threadvariablemanager.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 + -