티스토리 툴바


분류없음2010/04/08 09:05

출처 : http://www.terms.co.kr/2PC.htm

2PC (two-phase commit) ; 2단계 커미트

분산 컴퓨팅 환경에서 사용자의 트랜잭션을 처리하는데 있어, 트랜잭션 관리 프로그램은 트랜잭션에 관련된 모든 데이터베이스가 성공적으로 수정되었음을 확실하게 하기 위하여 2단계 커미트라고 불리는 프로토콜을 사용할 수 있다. 만일 데이터베이스의 수정이 성공적으로 이루어지지 않은 경우에, 그 트랜잭션은 롤백 상태가 되어 트랜잭션이 개시되기 이전의 상태로 되돌아간다. 만약 그 트랜잭션이 관련된 컴퓨터들에 의해 성공적으로 종료되었다면, 모든 데이터베이스의 수정을 위한 커미트가 이루어지며, 새로운 트랜잭션들이 자유로이 접근할 수 있도록 자원에 걸려 있던 로크들이 풀어진다.

아래에 이 프로토콜에 관한 간략한 설명이 있다.

  1. 한 컴퓨터 내에 있는 트랜잭션 관리 프로그램은 대체로 최초 요구에 연계되어, 관련된 모든 컴퓨터들을 대신하여 트랜잭션을 조정한다. 트랜잭션 관리 프로그램은 “트랜잭션 시작”이라는 내용을 로그 파일에 기재하고, 관련된 다른 컴퓨터들에게 트랜잭션 요청을 보낸다.
  2. 참여하고 있는 각 컴퓨터들은 자신의 로그에 트랜잭션을 기재하고, 다른 사용자가 쓸 수 없도록 데이터베이스 자원에 로크를 걸어 데이터베이스 변경을 수행하고, 트랜잭션 관리 프로그램에게 “커미트 할 준비가 되었다”는 메시지를 보낸다.
  3. 관리 프로그램은 관련된 모든 컴퓨터들로부터 “커미트 할 준비가 되었다”는 메시지를 받은 뒤에, 트랜잭션이 종료되었다는 사실을 로그 파일에 기재하고 나서, 모든 컴퓨터들에게 트랜잭션을 커미트 하라고 통보한다.
  4. 참여하고 있는 각 컴퓨터는 이 사실을 트랜잭션 로그 내에 기록한 다음, 자원에 걸려있던 로크를 풀어준다.
  5. 만약 모든 컴퓨터들이 트랜잭션을 커미트 하기 전의 어느 순간에 하나 이상의 컴퓨터에서 문제가 발생하면, 관리 프로그램은 트랜잭션이 시작되기 전의 상태로 되돌리도록 롤백 메시지를 전파한다.

응용 프로그래머에게 있어서의 2단계 커미트는 BEGIN, COMMIT, 그리고 필요한 경우 ROLLBACK 등의 프로그램 요청을 함으로써 구현된다.

---------------------------------------------------------------------------------------------------------------------------------------------------

EJB에서의 2PC

2-phase commit이 지원되려면 다음과 같은 3가지 환경이 모두 충족되어야 한다.

1. Resource Manager(주로 데이타베이스)가 2-phase commit를 지원해야 한다.

현재 Oracle 8i는 이상은 지원한다. 다른 DB는 DB 메뉴얼을 살펴볼 필요가 있음.

2. WAS(Web Application Server)가 2-phase commit을 지원해야 한다.

2-phase commit을 하려면 transaction Manager가 resource manager사이를 통제해야

한다. 즉 transaction manager가 WAS에 내장되어 있어야 한다.

3. JDBC Driver가 2-phase commit를 지원해야 한다.

JDBC2.0 까지는 2-phase commit를 지원하지 않는다.

Weblogic의 경우 Weblogic Enterprise 5.1 이상부터oracle용 2-phase commit를 지원하는 jdbc driver를 자체적으로 내장하고 있다.

---------------------------------------------------------------------------------------------------------------------------------------------------

출처 : http://luke.egloos.com/1483419

Two-phase commit

분산 트랜잭션 프로세싱의 필수적인 부분은 two-phase commit 프로세스이다. 이는 트랜잭션에 있는 모든 리소스 매니저들이 어떤 오류에도 관계 없이 신뢰성 있게 조정될 수 있도록 보장하는 흐름 구조이다. two-phase commit는 모든 트랜잭션 프로토콜에 의해 구현되고, 근본 개념은 기본적으로 같다. 다음 디스크립션은 XA 스팩에 따라 흐름을 요약한 것이다. CICS나 LU6.2 같은 기타 프로토콜들은 흐름에 대해 다른 용어와 변수를 사용한다. (CICS syncpoint 흐름은 CICS Intercommunication Guide, SC34-6243, Chapter 2: Recovery and restart in interconnected systems를 참조하라.)

two-phase commit 프로세스 전에, 트랜잭션 동안 수행된 모든 작업은 실행 중인 것으로 간주되고, 이 기간 동안 실패한 것은 롤백으로 이어진다. 업데이트는 트랜잭션 매니저가 two-phase commit 프로세스를 초기화 할 때에만 가능하다.

cfile1.uf@115FA80E4BBD20D287A67A.jpg

two-phase commit 프로세스의 첫 번째 단계(Stage 1)는 다음과 같다.:

a.트랜잭션 매니저는 모든 리소스 매니2저들에게 복구 가능한 리소스들을 위임을 준비할 것을 요청한다. b.각 리소스 매니저는 (준비될 경우) 긍정적으로 응답하거나 부정적으로 응답한다.(롤백) 리소스 매니저가 긍정적으로 응답한다면 필요한 정보를 안정적으로 기록하고, 응답을 준비하고, 다음 스테이지에서 결정된 것 처럼 트랜잭션의 최종 결과를 따른다. c.리소스 매니저는 불확실한 것으로 기술된다. 트랜잭션 매니저에 대한 트랜잭션의 최종 결과를 삭제했고, 이제는 트랜잭션의 실제 결과에 대해서도 의심하기 때문이다.

두 번째 단계에서(Stage 2), 모든 리소스 매니저들이 긍정적으로 응답된 것으로 간주한다.:

a.트랜잭션 매니저는 각 리소스 매니저에게 커미트 흐름과 함께 응답한다. 하지만, 리소스 매니저가 응답에 실패하면, 트랜잭션 매니저는 트랜잭션이 중지된 것으로 간주하기 전에 준비 흐름을 다시 보낸다. b.커미트 흐름을 받을 때, 리소스 매니저는 복구 가능한 리소스에 대한 업데이트를 마감하고, 리소스에 대한 모든 잠금을 해제하거나 파일을 연다. c.리소스 매니저는 최종 커미트 된 흐름으로 응답하고, 이는 더 이상 의심 상태가 아닌 트랜잭션 매니저를 가리킨다. d.최종 커미트 흐름을 트랜잭션 매니저에서 받지 못하면, 트랜잭션 매니저는 이 커미트가 리소스 매니저에 아직 도착하지 않은 것으로 간주하고, 긍정적인 응답을 받을 때까지 커미트를 다시 보내야 한다.

커미트 프로세싱 동안 트랜잭션 매니저가 실패하면, 트랜잭션은 리소스 매니저에서 의심 상태로 남겨진다. 재시작 시, 트랜잭션 매니저는 리소스 매니저와 다시 연결되어 트랜잭션 상태를 발견하고, 커미트 또는 트랜잭션 취소 등으로 커미트 프로세싱을 계속 진행한다.

Last participant 지원

J2EE 트랜잭션 환경에서, WebSphere Application Server의 Last participant 지원 기능은 글로벌 트랜잭션 모델을 확장하여 하나의 one-phase commit 리소스를 two-phase commit 가능 리소스를 가진 글로벌 트랜잭션에 참여시킨다. 트랜잭션 커미트에서, 애플리케이션 서버는 two-phase commit 리소스 매니저를 준비하고, 이것이 성공하면 one-phase commit 리소스는 실행을 요청 받는다. two-phase commit 리소스는 one-phase commit 리소스의 응답에 따라서 실행 되거나 롤백된다. 이 프로세스는 트랜잭션 조정을 효과적으로 one-phase commit 리소스에 성공적으로 위임한다.

cfile2.uf@1238A2134BBD20D7280374.jpg그림 3. Last participant 지원 Last participant 지원은 WebSphere Application Server Enterprise V5의 일부로 제공되고, WebSphere Application Server V6과 이후 버전의 기본 기능으로 사용할 수 있다. two-phase commit 프로세스와는 다르게, one-phase commit 리소스와 관련된 통신 오류로부터 복구된 것은 없다. 따라서, one-phase commit 리소스의 실행 동안 통신 오류는 혼합된 결과의 위험성을 트랜잭션에 초래한다. (heuristic hazard) two-phase commit 리소스는 롤백 되지만, one-phase commit 리소스의 결과는 알려지지 않는다. 실행되거나 롤백된다. 따라서 애플리케이션들은 그와 같은 예정된 결과의 위험성까지 포용하도록 설정되어야 한다.

Posted by urstory
분류없음2010/04/07 23:13

스트럿츠 1.x 와 2.x 는 완전히 다른기술이다. 스트럿츠 2.x는 Webwork 기반이다.

cfile27.uf@197F82114BBC9AC4569271.jpg

스트럿츠 1.3.0 을 다운로드 받는다. struts-1.3.10-all.zip 를 다운로드 받는다.

다운로드 후 압축을 해제하면 app 폴더가 있다. app폴더안에 셈플 war 파일이 존재한다.

그중에서 struts-blank-1.3.10.war 가 초보자가 공부할 때 가장 좋은 예제이다.

말그대로 가장 기본적으로 스트럿츠를 사용하기 위한 꼭 필요한 라이브러리와 설정이 되어 있는 프로젝트이다.

해당 파일을 다음과 같이 압축을 해제한다

jar xvfz struts-blank-1.3.10.war

WEB-INF/lib 폴더의 jar파일과 src폴더의 *.properties파일을 사용하면 된다.

위와 같은 내용으로 가장 간단하게 만들어본 예제.

http://cfile7.uf.tistory.com/original/205F350B4BBC9AC8154627

Posted by urstory
분류없음2010/04/07 17:11

티스토리와 맥저널 연동 테스트

cfile29.uf@157FA60C4BBC6573BA6DAC.jpg

아이포토에서 사진을 드래그앤 드롭해서 가지고 오기. - 별이 수업 참관일.

cfile8.uf@170F230C4BBC6576549FD8.jpg

글쓰다 말고 바로 캡쳐하기

맥저널을 5.2로 업그레이드 한다음

터미널에서 다음과 같이 명령한다.

“defaults write com.DanSchimpf.MacJournal IncludeHiddenPreferences YES”

맥저널을 재시작 한후 환경 설정에 가면 Hidden 이라는 메뉴가 추가로 보이게 된다.

cfile9.uf@13028C024BBC6579071D12.jpg

위와 같은 메뉴가 나오면 Format line breaks for MetaWeblog or MT blogs

를 체크한다.

이렇게 하면, Tistory 에도 등록 가능하다.

맥저널에서 글을쓴후 Share - to Blog 를 이용하여 티스토리에 등록하고 나서....

카테고리 변경은 안되는 듯..

이건 블로그가서 수정해야하나?

카테고리는... 글을 올릴때 싱크가 되는 것이 아니군요.

Journal 메뉴의 Edit Blog Settings를 선탤하면 아래와 같이 정보가 나옵니다.

cfile23.uf@2025210E4BBC657D3D8174.jpg

우측보면 Categories 에서 Refresh를 누르면 되네요.

그럼 그때부터 글을 올리거나, 수정한후 올릴때 카테고리 목록이 나옵니다.

맥저널 만세!!

Posted by urstory