📄 jdbcstore.java
字号:
* @param sessionTable The new table
*/
public void setSessionTable(String sessionTable) {
String oldSessionTable = this.sessionTable;
this.sessionTable = sessionTable;
support.firePropertyChange("sessionTable",
oldSessionTable,
this.sessionTable);
}
/**
* Return the table for this Store.
*/
public String getSessionTable() {
return (this.sessionTable);
}
/**
* Set the App column for the table.
*
* @param sessionAppCol the column name
*/
public void setSessionAppCol(String sessionAppCol) {
String oldSessionAppCol = this.sessionAppCol;
this.sessionAppCol = sessionAppCol;
support.firePropertyChange("sessionAppCol",
oldSessionAppCol,
this.sessionAppCol);
}
/**
* Return the web application name column for the table.
*/
public String getSessionAppCol() {
return (this.sessionAppCol);
}
/**
* Set the Id column for the table.
*
* @param sessionIdCol the column name
*/
public void setSessionIdCol(String sessionIdCol) {
String oldSessionIdCol = this.sessionIdCol;
this.sessionIdCol = sessionIdCol;
support.firePropertyChange("sessionIdCol",
oldSessionIdCol,
this.sessionIdCol);
}
/**
* Return the Id column for the table.
*/
public String getSessionIdCol() {
return (this.sessionIdCol);
}
/**
* Set the Data column for the table
*
* @param sessionDataCol the column name
*/
public void setSessionDataCol(String sessionDataCol) {
String oldSessionDataCol = this.sessionDataCol;
this.sessionDataCol = sessionDataCol;
support.firePropertyChange("sessionDataCol",
oldSessionDataCol,
this.sessionDataCol);
}
/**
* Return the data column for the table
*/
public String getSessionDataCol() {
return (this.sessionDataCol);
}
/**
* Set the Is Valid column for the table
*
* @param sessionValidCol The column name
*/
public void setSessionValidCol(String sessionValidCol) {
String oldSessionValidCol = this.sessionValidCol;
this.sessionValidCol = sessionValidCol;
support.firePropertyChange("sessionValidCol",
oldSessionValidCol,
this.sessionValidCol);
}
/**
* Return the Is Valid column
*/
public String getSessionValidCol() {
return (this.sessionValidCol);
}
/**
* Set the Max Inactive column for the table
*
* @param sessionMaxInactiveCol The column name
*/
public void setSessionMaxInactiveCol(String sessionMaxInactiveCol) {
String oldSessionMaxInactiveCol = this.sessionMaxInactiveCol;
this.sessionMaxInactiveCol = sessionMaxInactiveCol;
support.firePropertyChange("sessionMaxInactiveCol",
oldSessionMaxInactiveCol,
this.sessionMaxInactiveCol);
}
/**
* Return the Max Inactive column
*/
public String getSessionMaxInactiveCol() {
return (this.sessionMaxInactiveCol);
}
/**
* Set the Last Accessed column for the table
*
* @param sessionLastAccessedCol The column name
*/
public void setSessionLastAccessedCol(String sessionLastAccessedCol) {
String oldSessionLastAccessedCol = this.sessionLastAccessedCol;
this.sessionLastAccessedCol = sessionLastAccessedCol;
support.firePropertyChange("sessionLastAccessedCol",
oldSessionLastAccessedCol,
this.sessionLastAccessedCol);
}
/**
* Return the Last Accessed column
*/
public String getSessionLastAccessedCol() {
return (this.sessionLastAccessedCol);
}
// --------------------------------------------------------- Public Methods
/**
* Return an array containing the session identifiers of all Sessions
* currently saved in this Store. If there are no such Sessions, a
* zero-length array is returned.
*
* @exception IOException if an input/output error occurred
*/
public String[] keys() throws IOException {
String keysSql =
"SELECT " + sessionIdCol + " FROM " + sessionTable +
" WHERE " + sessionAppCol + " = ?";
ResultSet rst = null;
String keys[] = null;
synchronized (this) {
int numberOfTries = 2;
while (numberOfTries > 0) {
Connection _conn = getConnection();
if (_conn == null) {
return (new String[0]);
}
try {
if (preparedKeysSql == null) {
preparedKeysSql = _conn.prepareStatement(keysSql);
}
preparedKeysSql.setString(1, getName());
rst = preparedKeysSql.executeQuery();
ArrayList tmpkeys = new ArrayList();
if (rst != null) {
while (rst.next()) {
tmpkeys.add(rst.getString(1));
}
}
keys = (String[]) tmpkeys.toArray(new String[tmpkeys.size()]);
} catch (SQLException e) {
log(sm.getString(getStoreName() + ".SQLException", e));
// Close the connection so that it gets reopened next time
if (dbConnection != null)
close(dbConnection);
} finally {
try {
if (rst != null) {
rst.close();
}
} catch (SQLException e) {
;
}
release(_conn);
}
numberOfTries--;
}
}
return (keys);
}
/**
* Return an integer containing a count of all Sessions
* currently saved in this Store. If there are no Sessions,
* <code>0</code> is returned.
*
* @exception IOException if an input/output error occurred
*/
public int getSize() throws IOException {
int size = 0;
String sizeSql =
"SELECT COUNT(" + sessionIdCol + ") FROM " + sessionTable +
" WHERE " + sessionAppCol + " = ?";
ResultSet rst = null;
synchronized (this) {
int numberOfTries = 2;
while (numberOfTries > 0) {
Connection _conn = getConnection();
if (_conn == null) {
return (size);
}
try {
if (preparedSizeSql == null) {
preparedSizeSql = _conn.prepareStatement(sizeSql);
}
preparedSizeSql.setString(1, getName());
rst = preparedSizeSql.executeQuery();
if (rst.next()) {
size = rst.getInt(1);
}
} catch (SQLException e) {
log(sm.getString(getStoreName() + ".SQLException", e));
if (dbConnection != null)
close(dbConnection);
} finally {
try {
if (rst != null)
rst.close();
} catch (SQLException e) {
;
}
release(_conn);
}
numberOfTries--;
}
}
return (size);
}
/**
* Load the Session associated with the id <code>id</code>.
* If no such session is found <code>null</code> is returned.
*
* @param id a value of type <code>String</code>
* @return the stored <code>Session</code>
* @exception ClassNotFoundException if an error occurs
* @exception IOException if an input/output error occurred
*/
public Session load(String id)
throws ClassNotFoundException, IOException {
ResultSet rst = null;
StandardSession _session = null;
Loader loader = null;
ClassLoader classLoader = null;
ObjectInputStream ois = null;
BufferedInputStream bis = null;
Container container = manager.getContainer();
String loadSql =
"SELECT " + sessionIdCol + ", " + sessionDataCol + " FROM " +
sessionTable + " WHERE " + sessionIdCol + " = ? AND " +
sessionAppCol + " = ?";
synchronized (this) {
int numberOfTries = 2;
while (numberOfTries > 0) {
Connection _conn = getConnection();
if (_conn == null) {
return (null);
}
try {
if (preparedLoadSql == null) {
preparedLoadSql = _conn.prepareStatement(loadSql);
}
preparedLoadSql.setString(1, id);
preparedLoadSql.setString(2, getName());
rst = preparedLoadSql.executeQuery();
if (rst.next()) {
bis = new BufferedInputStream(rst.getBinaryStream(2));
if (container != null) {
loader = container.getLoader();
}
if (loader != null) {
classLoader = loader.getClassLoader();
}
if (classLoader != null) {
ois = new CustomObjectInputStream(bis,
classLoader);
} else {
ois = new ObjectInputStream(bis);
}
if (debug > 0) {
log(sm.getString(getStoreName() + ".loading",
id, sessionTable));
}
_session = (StandardSession) manager.createEmptySession();
_session.readObjectData(ois);
_session.setManager(manager);
} else if (debug > 0) {
log(getStoreName() + ": No persisted data object found");
}
} catch (SQLException e) {
log(sm.getString(getStoreName() + ".SQLException", e));
if (dbConnection != null)
close(dbConnection);
} finally {
try {
if (rst != null) {
rst.close();
}
} catch (SQLException e) {
;
}
if (ois != null) {
try {
ois.close();
} catch (IOException e) {
;
}
}
release(_conn);
}
numberOfTries--;
}
}
return (_session);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -