讀了ibatis的jpetstore源程式,有個關於synchronized的問題請教一下
在看jpetstore的源程式時,發現裡面有個生成序列號dao實現類,透過名稱找到當前資料庫中該類別的序列號,將取出的序列號加1並更新到資料庫中,同時返回加1前的序列號,這個方法名前有個synchronized關鍵字。請問如果在真實環境下采用這種方法會不會有問題?是否需要將該方法定義為static方法?或對該類採用singleton的模式?
程式碼如下
/**
* User: Clinton Begin
* Date: Jul 13, 2003
* Time: 7:21:30 PM
*/
package com.ibatis.jpetstore.persistence.sqlmapdao;
import com.ibatis.dao.client.DaoException;
import com.ibatis.dao.client.DaoManager;
import com.ibatis.jpetstore.domain.Sequence;
import com.ibatis.jpetstore.persistence.iface.SequenceDao;
public class SequenceSqlMapDao extends BaseSqlMapDao implements SequenceDao {
public SequenceSqlMapDao(DaoManager daoManager) {
super(daoManager);
}
/**
* This is a generic sequence ID generator that is based on a database
* table called 'SEQUENCE', which contains two columns (NAME, NEXTID).
* <p/>
* This approach should work with any database.
*
* @param name The name of the sequence.
* @return The Next ID
* @
*/
public synchronized int getNextId(String name) {
Sequence sequence = new Sequence(name, -1);
sequence = (Sequence) queryForObject("getSequence", sequence);
if (sequence == null) {
throw new DaoException("Error: A null sequence was returned from the database (could not get next " + name + " sequence).");
}
Object parameterObject = new Sequence(name, sequence.getNextId() + 1);
update("updateSequence", parameterObject);
return sequence.getNextId();
}
}
程式碼如下
/**
* User: Clinton Begin
* Date: Jul 13, 2003
* Time: 7:21:30 PM
*/
package com.ibatis.jpetstore.persistence.sqlmapdao;
import com.ibatis.dao.client.DaoException;
import com.ibatis.dao.client.DaoManager;
import com.ibatis.jpetstore.domain.Sequence;
import com.ibatis.jpetstore.persistence.iface.SequenceDao;
public class SequenceSqlMapDao extends BaseSqlMapDao implements SequenceDao {
public SequenceSqlMapDao(DaoManager daoManager) {
super(daoManager);
}
/**
* This is a generic sequence ID generator that is based on a database
* table called 'SEQUENCE', which contains two columns (NAME, NEXTID).
* <p/>
* This approach should work with any database.
*
* @param name The name of the sequence.
* @return The Next ID
* @
*/
public synchronized int getNextId(String name) {
Sequence sequence = new Sequence(name, -1);
sequence = (Sequence) queryForObject("getSequence", sequence);
if (sequence == null) {
throw new DaoException("Error: A null sequence was returned from the database (could not get next " + name + " sequence).");
}
Object parameterObject = new Sequence(name, sequence.getNextId() + 1);
update("updateSequence", parameterObject);
return sequence.getNextId();
}
}
相關文章
- 請教關於ibatis的問題BAT
- 請教關於Singleton模式和synchronized static 方法的問題模式synchronized
- 請教一個有關bibernate的session的問題Session
- 請教一個關於執行緒的問題執行緒
- 初學,一個關於RMI的問題請教!!!
- 請教一個關於工廠模式的問題模式
- 請教一個關於JAVA SOCKET程式設計中的問題Java程式設計
- 請教關於快取的問題快取
- 請教一個關於spring事務的問題 ?Spring
- 請教一個關於EJB建立物件時的問題物件
- 請教一個關於NIO執行方式的問題
- 請教一個關於執行平臺的問題
- 請教一個關於JdonFrameworkTest例項的問題Framework
- 請教banq關於domain object的問題AIObject
- 請教高手 關於STRUTS DATASOURCE的問題
- 請教大家關於java效能的問題Java
- 請教一個關於多資料來源的分散式事務問題?分散式
- 請教有關template設計模式的問題設計模式
- 誠心請教一個關於hibernate程式碼設計的問題
- 請教關於jb中開發ejb的一個問題
- banq大哥,請教一個關於jboss ide的問題IDE
- 請教一個關於全排列的演算法問題?演算法
- 遇到一個關於session id的問題,向大家請教!Session
- 請教一個關於hibernate對映oracle的問題Oracle
- 關於詳細設計/程式碼的同步問題--請教
- 請教關於JBuilder9關於CVS的問題UI
- 請教關於jive版主設定的問題。
- 請教banq問題,關於hibernate的jdbc的JDBC
- 請教一個問題,關於上傳檔案和圖片的問題
- 請教:關於排課問題的實體關係
- 請教各位一個關於websocket協議開發的問題Web協議
- 請問一下關於socket跟頁面請求的問題
- 請教關於Jive中過濾器的問題過濾器
- 關於Java communications API的問題,請教高手JavaAPI
- 請教關於資料庫連線的問題資料庫
- 請教您關於 Nginx 下多個 Laravel 專案的部署問題NginxLaravel
- 請教一個資料表關係的問題
- benq,你好!框架中有關 getDataSource()問題請教一下ENQ框架