SSH 프레임 워 크 에서 데이터베이스 트 랜 잭 션 잠 금 대기 문제

최근 SSH 를 이용 해 정보 관리 시스템 을 개발 하 던 중 데이터베이스 트 랜 잭 션 잠 금 대기 문제 에 봉착 했다.구체 적 인 표현 은 시스템 이 한 동안 실 행 된 후에 데이터 베 이 스 를 수정 데 이 터 를 삽입 할 수 없 는 문제 이다.조사 문 제 는 사무 관리 코드 에서 나 왔 다.다음은 예제 코드 입 니 다.
 
 
public String someMethod(){
        DefaultTransactionDefinition def=new DefaultTransactionDefinition();
        TransactionStatus status=transactionManager.getTransaction(def);
        try{
				if(someObject==null){
					//put error message in Session
					this.getSession().put("errorMsg","someObject is null.");
					return ERROR;
				}
                //update or insert or delete some date
        
                transactionManager.commit(status);
                return SUCCESS;
        
        }catch(Exception e){
                e.printStackTrace();
				this.getSession().put("errorMsg", "something is wrong");
                transactionManager.rollback(status);
                return ERROR;
        }
}
 
 
ERROR 과 SUCCESS 는 Struts 에서 성공 과 오류 정 보 를 보 여 주 는 통 일 된 페이지 를 설정 했다.상기 코드 의 문 제 는 사무 관리의 try 블록 에서 발생 합 니 다.만약 에 someObject 가 null 이면 오류 페이지 에 오류 정 보 를 알려 주 고 return ERROR 전에 rollback 이 없습니다.
return ERROR 전에 트 랜 잭 션 rollback 을 사용 하면 문 제 를 해결 할 수 있 습 니 다.
public String someMethod(){
        DefaultTransactionDefinition def=new DefaultTransactionDefinition();
        TransactionStatus status=transactionManager.getTransaction(def);
        try{
				if(someObject==null){
					//put error message in Session
					this.getSession().put("errorMsg","someObject is null.");
					transactionManager.rollback(status);
					return ERROR;
				}
                //update or insert or delete some date
        
                transactionManager.commit(status);
                return SUCCESS;
        
        }catch(Exception e){
                e.printStackTrace();
				this.getSession().put("errorMsg", "something is wrong");
                transactionManager.rollback(status);
                return ERROR;
        }
}
 
이 구체 적 인 응용 은 일부 조건 이 성립 되 지 않 는 다 고 판단 할 때 오류 알림 을 되 돌려 줍 니 다.그러나 이 때 데이터 베 이 스 는 이미 존재 합 니 다.오류 알림 을 되 돌려 줄 때 트 랜 잭 션 rollback 을 해 야 합 니 다.그렇지 않 으 면 데이터 베 이 스 는 트 랜 잭 션 상 태 를 계속 유지 하고 데이터 도 수정 과 삭 제 를 삽입 할 수 없습니다.
실제 데이터베이스 업무 의 원가 가 매우 높 기 때문에 먼저 각종 잘못된 판단 을 하고 마지막 에 업무 조작 을 하 는 것 을 권장 합 니 다.고성능,높 은 병발 과 함께 데이터 일치 성에 대한 요구 가 높 지 않 은 경우 라면 사 무 를 아예 사용 하지 않 아 도 된다.
이상 은 개인 적 인 생각 입 니 다.동생 이 웹 개발 에 막 입 문 했 습 니 다.모두 함께 교류 합 시다~

좋은 웹페이지 즐겨찾기