애플리케이션 구성 충돌 해결
여러 관리 사용자가 공유하는 환경에서 동일한 WebSphere Application Server 구성 문서를 서로 다른 관리 사용자가 동시에 업데이트하고자 할 수 있습니다. 다음 정보는 여러 관리 사용자가 동일한 구성 문서를 동시에 업데이트하는 경우 발생할 수 있는 예외를 발견하고 해결하는 데 도움이 됩니다.
관리 콘솔이나 wsadmin 도구를 사용하여 관리 클라이언트에 로그인할 때마다 구성 변경사항을 추적하는 고유한 작업공간 세션이 작성됩니다. 각 작업공간 세션에는 연관된 임시 작업공간 디렉토리가 있습니다. 이 디렉토리를 사용하여 로그인 세션 동안 변경된 모든 구성 파일을 저장합니다. 이 디렉토리의 파일은 먼저 셀 구성 저장소에서 추출되고 변경사항은 저장될 때까지 이 파일의 작업공간 사본에만 존재합니다. 저장이 수행되면 구성 관리 런타임은 사용자가 변경한 구성 파일을 다른 사용자가 이미 수정하여 저장하지 않았는지 확인한 후 작업공간 디렉토리에서 변경된 파일을 마스터 저장소로 다시 복사합니다.
서로 다른 작업공간 세션이 서로 다른 구성 파일을 수정하는 한, 저장 충돌은 발생하지 않습니다. 그러나 다중 작업공간 세션이 하나 이상의 동일한 구성 파일을 수정하는 경우 저장 충돌이 발생하고 최초의 작업공간 세션 변경사항만 셀의 구성 저장소에 반영됩니다. 후속 사용자가 동일한 구성 파일의 변경사항을 저장하면 저장 충돌 예외를 수신합니다.
- 서로 다른 애플리케이션 서버 또는 서로 다른 애플리케이션 서버 클러스터에 대한 서로 다른 애플리케이션의 동시 배치.
- 동일한 애플리케이션 서버 또는 동일한 애플리케이션 서버 클러스터에 대한 서로 다른 애플리케이션의 동시 배치.
일반적으로 동시 또는 병렬 애플리케이션 배치 시나리오는 시스템 관리자의 별다른 노력 없이도 안전하게 실행됩니다. 그러나 serverindex.xml 병합 알고리즘에서 처리하지 않는 애플리케이션 배치 시나리오가 있습니다. 예를 들어, serverindex.xml 병합 알고리즘은 파일 변경사항을 동일 애플리케이션, 동일 클러스터 또는 동일 서버에 동시에 배치하는 상황은 처리하지 않습니다. 또한 애플리케이션 배치 외의 추가 작업과 관련된 다른 동시 관리 활동 중에 발생한 구성 충돌도 처리하지 않습니다.
필수 오브젝트 참조 얻기 및 매개변수 목록 구성
일부 간단한 방법을 사용하여 구성 충돌을 방지하고 wsadmin 도구 사용 시의 충돌을 해결할 수 있습니다. wsadmin 명령을 통해 구성 충돌을 발견하고 해결하려면 ConfigService MBean에 대한 참조를 확보한 후, 해당 MBean에서 제공한 getConflictDocuments 메소드를 호출하여 사용자가 작업공간 세션에서 충돌하는 파일 변경사항을 작성했는지 판별해야 합니다. 이 Mbean에 대한 자세한 정보는 ConfigService MBean의 Javadoc을 참조하십시오.
다음 코드 예제는 필수 오브젝트 참조를 얻고 ConfigService MBean이 제공하는 getConflictDocuments 메소드를 호출하는 데 필요한 매개변수 목록을 구성하는 방법을 설명합니다.
// get ConfigService MBean reference
wsadmin>cs = AdminControl.queryNames('WebSphere:*,type=ConfigService')
// obtain ObjectName for ConfigService MBean
wsadmin>import javax.management as mgmt
wsadmin>csName=mgmt.ObjectName(cs)
// get session object for the current administrative user session
wsadmin>session=AdminConfig.getCurrentSession()
// manipulate and prepare the administrative session object and
// MBean operation arguments for use
wsadmin>from com.ibm.websphere.management import Session
wsadmin>from jarray import array
wsadmin>parms=array([session], java.lang.Object)
wsadmin>ptype=array(['com.ibm.websphere.management.Session'], java.lang.String)
// invoke MBean getConflictDocuments method to obtain a list of any document conflicts
wsadmin>AdminControl.invoke_jmx(csName,'getConflictDocuments', parms, ptype)
{}
wsadmin>
Listing 3
wsadmin>AdminControl.invoke_jmx(csName,' getConflictDocuments', parms, ptype)
{['cells/cell_name/nodes/node_name/serverindex.xml',cells/cell_name/applications/
DefaultApplication.ear.ear/deltas/DefaultApplication.ear/delta-1278791909117',
... <list abbreviated> ...}
wsadmin>
wsadmin>AdminConfig.reset()
변경사항을 저장하기 전에 getConflictDocuments 메소드를 호출하고 충돌하는 문서가 없음을 확인한 경우라도 getConflictDocuments 메소드를 호출한 시점과 AdminConfig.save() 명령을 발행한 시점 사이에 일부 다른 세션에서 동일한 구성 파일을 수정했을 수 있으므로 AdminConfig.save() 명령을 즉시 발행하더라도 저장에 성공한다고 보장할 수 없습니다.
마스터 저장소에 대한 저장에 실패하면 다음 예외와 유사한 ConfigServiceException 예외가 수신됩니다.
WASX7015E: Exception running command: "AdminConfig.save()"; exception information:
com.ibm.websphere.management.exception.ConfigServiceException
java.security.PrivilegedActionException:
java.security.PrivilegedActionException:
com.ibm.ws.sm.workspace.WorkSpaceException: RepositoryException
- getConflictDocuments 메소드를 사용하여 다른 사용자가 이미 저장한 구성 파일을 판별하십시오.
- AdminConfig.reset() 명령을 발행하여 변경사항을 버리십시오.
- 변경사항을 버린 후, 해당 구성 파일에 대한 변경사항을 다시 적용하고 AdminConfig.save() 명령을 발행하여 변경사항을 저장할 수 있습니다.
일반적으로 동일한 세션 중에 저장 충돌이 여러 번 발생하지는 않으므로 변경사항을 다시 저장하면 성공할 수 있습니다. 그러나 다시 저장해도 실패하면 위의 조치를 반복하고 변경사항을 다시 저장하십시오.