關於ejb使用單例方式獲取id時發生的死鎖2?
程式碼如下:
private void getNextKeyFromDB(String tableName,int count,Integer[] id)
throws JorException{
if (count == 0) {
throw new JorException("...");
}
boolean success = false;
PreparedStatement pstmt = null;
Connection conn = null;
ResultSet rs = null;
try {
conn = PoolManage.getEngineeConnection();
pstmt = conn.prepareStatement("SELECT MAXID FROM SYS_IDCREATOR where TableName=?");
pstmt.setString(1, tableName);
rs = pstmt.executeQuery();
if (!rs.next()) {
throw new JorException("xxxx");
}
int currentID = rs.getInt(1);
rs.close();
pstmt.close();
int newID = currentID + 1;
pstmt = conn.prepareStatement("UPDATE SYS_IDCREATOR SET MAXID = ? where TableName=? and MAXID = ?");
pstmt.setInt(1, newID);
pstmt.setString(2, tableName);
pstmt.setInt(3, currentID);
success = pstmt.executeUpdate() == 1;
if (success) {
id[0] = new Integer(currentID);
}
}
catch (SQLException ex) {
throw new JorException(ex.toString());
}
finally {
DBHelp.closeit(conn, rs, pstmt);
}
if (!success) {
try {
Thread.currentThread().sleep(30);
} catch (InterruptedException ie) { }
getNextKeyFromDB(tableName,count-1,id);
}
}
透過多執行緒客戶端測試過程中發現執行rs = pstmt.executeQuery()時會出現莫名其妙的停止,不知道是否是死鎖,但是select語句應該不會出現這種問題啊。完全暈了。請各位大蝦幫我分析一下,給一個解決方案吧。謝謝了。
private void getNextKeyFromDB(String tableName,int count,Integer[] id)
throws JorException{
if (count == 0) {
throw new JorException("...");
}
boolean success = false;
PreparedStatement pstmt = null;
Connection conn = null;
ResultSet rs = null;
try {
conn = PoolManage.getEngineeConnection();
pstmt = conn.prepareStatement("SELECT MAXID FROM SYS_IDCREATOR where TableName=?");
pstmt.setString(1, tableName);
rs = pstmt.executeQuery();
if (!rs.next()) {
throw new JorException("xxxx");
}
int currentID = rs.getInt(1);
rs.close();
pstmt.close();
int newID = currentID + 1;
pstmt = conn.prepareStatement("UPDATE SYS_IDCREATOR SET MAXID = ? where TableName=? and MAXID = ?");
pstmt.setInt(1, newID);
pstmt.setString(2, tableName);
pstmt.setInt(3, currentID);
success = pstmt.executeUpdate() == 1;
if (success) {
id[0] = new Integer(currentID);
}
}
catch (SQLException ex) {
throw new JorException(ex.toString());
}
finally {
DBHelp.closeit(conn, rs, pstmt);
}
if (!success) {
try {
Thread.currentThread().sleep(30);
} catch (InterruptedException ie) { }
getNextKeyFromDB(tableName,count-1,id);
}
}
透過多執行緒客戶端測試過程中發現執行rs = pstmt.executeQuery()時會出現莫名其妙的停止,不知道是否是死鎖,但是select語句應該不會出現這種問題啊。完全暈了。請各位大蝦幫我分析一下,給一個解決方案吧。謝謝了。
相關文章
- 關於ejb使用單例方式獲取id時發生的死鎖?單例
- oracle 死鎖發生的測試用例Oracle
- 如何捕獲和記錄SQL Server中發生的死鎖SQLServer
- 關於oracle死鎖的模擬Oracle
- 關於Oracle死鎖處理方法Oracle
- 使用oracle 10704 event分析獲取鎖lock及死鎖deadlock系列九Oracle
- 單一會話引發的死鎖會話
- 例項詳解 Java 死鎖與破解死鎖Java
- 求救:關於EJB單步除錯的方法除錯
- golang中關於死鎖的思考與學習Golang
- 【原】關於SQLServer死鎖的診斷和定位SQLServer
- 使用EasyUI,關於日期格式的文字框按照正常方式獲取不到值的問題UI
- Java獲取Class物件的方式和例項化物件的方式Java物件
- MySQL:死鎖一例MySql
- 作業系統(5) 死鎖的概念 死鎖產生的必要條件 死鎖的處理策略 預防死鎖 避免死鎖 死鎖的檢測和解除 銀行家演算法作業系統演算法
- 關於資料庫死鎖問題的解釋資料庫
- 關於處理死鎖的一點小知識
- Java中常見死鎖與活鎖的例項Java
- db2死鎖監視器的使用(好用)DB2
- ORACLE死鎖及處理方式Oracle
- SAP中關於使用者IP資訊的獲取
- PostgreSQL死鎖相關SQL
- 【Oracle】死鎖的產生與處理Oracle
- 關於單例模式單例模式
- activiti 根據 流程例項ID 獲取發起人
- 有關於SQL Server資料庫死鎖的分析(轉)SQLServer資料庫
- 使用WinDbg對Windows Live Toolbar死鎖的簡單分析Windows
- 死鎖(ora-00060)以及死鎖相關的知識點
- 關於EJB本地介面的使用一問?
- Oracle死鎖一例(ORA-00060),鎖表導致的業務死鎖問題Oracle
- 使用表查詢監控DB2的死鎖DB2
- 請斑竹及眾高手:關於EJB,同時使用JIVE中的設計模式。。。設計模式
- [C#.NET 拾遺補漏]12:死鎖和活鎖的發生及避免C#
- Struts2筆記06 封裝獲取表單資料方式筆記封裝
- 請教一個關於EJB建立物件時的問題物件
- 關於生產系統鎖問題的排查
- 對於死鎖的處理流程:
- 關於如何獲取資料的方法