내재적으로 클라이언트 정보 설정
데이터베이스에서 클라이언트 정보를 추적하려면 데이터베이스 연결에서 WebSphere® Application Server 클라이언트 데이터를 전달하는 두 가지 방법 중 하나를 선택할 수 있습니다.
- 사용자 애플리케이션을 독점 API로부터 자유롭게 유지하고자 합니다.
- 애플리케이션이 CMP(Container-Managed Persistence)를 사용합니다. 이 경우에는 데이터베이스 연결에서 클라이언트 정보를 설정하기 위해 자체 API를 사용할 수 없습니다.
WebSphere Application Server 추적 기능은 내재적으로 클라이언트 정보를 설정하기 위하 기능을 제공합니다. WAS.clientinfo 추적 또는 WAS.clientinfopluslogging 추적의 두 특수 추적 그룹 중 하나를 지정하여 클라이언트 정보 전달을 사용 또는 사용 안함으로 설정할 수 있습니다.
가능한 런타임 시나리오
- 연결 공유
연결 공유의 경우 WebSphere Application Server는 첫 번째 확보된 연결 핸들에만 클라이언트 정보를 설정합니다. 연결 공유가 사용 가능하고 둘 이상의 getConnection 메소드가 호출되면(동일한 연결에 두 개의 핸들이 생김) 첫 번째 getConnection 호출만이 클라이언트 정보가 백엔드 데이터베이스에 전달되도록 합니다. 이 시나리오는 클라이언트 정보 전달의 명시적 프로세스에 적용되지 않습니다. 그 경우에는 모든 setClientInformation 메소드가 연결 공유와 무관하게 데이터베이스에 릴레이됩니다.
- 내재적/명시적 공존클라이언트 정보 릴레이에 대한 명시적 및 내재적 프로시저를 모두 사용하는 경우 명시적으로 설정된 데이터 및 내재적으로 설정된 데이터의 일부 조합이 결합되지만 일반적으로 명시 설정이 우선합니다. 예를 들어, 애플리케이션이 클라이언트 계정 정보를 "myAccountingInfo"로 설정하는 경우 백엔드 데이터베이스로 전달되는 최종 accountingInfo 문자열은 다음 샘플 코드와 유사합니다.
여기서 000325는 스레드 ID이고 WSRdbManagedConnectionImpl@1234는 WebSphere 연결 인스턴스입니다.000325_WSRdbManagedConnectionImpl@1234_myAccountingInfo:
- 클라이언트 정보 재설정
클라이언트 정보를 전달하도록 애플리케이션 서버를 구성하면 연결이 풀에 리턴되지만 WAS.clientinfo 및 WAS.clientinfopluslogging 추적 메커니즘이 사용 불가능한 경우(WAS.clientinfo=all=disabled:WAS.clientinfopluslogging=all=disabled)에만 클라이언트 정보를 재설정합니다.
그러나 명시적 경우에는 애플리케이션이 WSConnection 연결에 대해 setClientInformation(null)을 발행할 때만 재설정 조작이 수행됩니다.
WAS.clientinfo 추적
기본값으로 내재적 메커니즘이 사용 불가능합니다. WebSphere Application Server 추적 그룹 WAS.clientinfo=all=enabled를 설정하여 정적으로, 또는 애플리케이션 서버를 중지 및 시작하지 않고 동적으로 이 메커니즘을 켤 수 있습니다.
데이터베이스 연결 시 내재적으로
수집 및 설정된 정보는 사용자 이름, 사용자 위치
및 애플리케이션 이름으로 구성됩니다.
데이터베이스 연결에서 내재적으로 수집 및
설정된 정보는 스레드 ID, 사용자 이름, 사용자 위치 및 애플리케이션 이름으로
이루어져 있습니다.
스레드 ID
WebSphere Application Server 내에서 애플리케이션 요청의 처리를 제어하는 Java 스레드를 식별하는 8문자 16진 값입니다. 이 ID는 추적 헤더에 표시됩니다.
- 사용자 이름
- 애플리케이션 요청을 시작한 사용자의 이름입니다. 이 옵션은 수집되어 백엔드 데이터베이스(지원되는 경우)로 전달됩니다. 이 정보는 WSSecurityHelper.getFirstCaller 메소드를 호출하여 수집됩니다.
- 사용자 위치
- 셀:노드:서버 양식의 사용자 위치의 이름입니다. 이 옵션은 수집되어 백엔드 데이터베이스(해당되는 경우)로 전달됩니다. 이 정보는 WSSecurityHelper.getFirstServer 메소드를 호출하여 수집됩니다.
- application name
- 실행 중인 애플리케이션의 이름입니다. 이 값은 Java EE Name 오브젝트로부터 getApplication 메소드의 출력입니다. 이 값은 글로벌 보안 설정에 관계 없이 수집됩니다.
WAS.clientinfopluslogging 추적
교착 상태와 같은 데이터베이스 문제점을 디버그할 때, 디버깅 노력에 도움이 될 수 있는 정보 세트가 있습니다. 이 정보는 일반적으로 WebSphere RRA(Relational Resource Adapter) 추적 및 EJB(Enterprise JavaBeans) 컨테이너 추적을 사용 가능하게 해서 확보합니다. 그러나 해당 문제점을 재생할 때 타이밍 문제가 발생하는 경우가 있습니다. 추적 정보가 너무 많으면 애플리케이션 작동이 변경되고(예: 타이밍 변경) 더 이상 문제가 발생하지 않을 수 있습니다.
- 실행되는 SQL 문자열(예: select userId from tabl1 where id=? for update).
- 트랜잭션의 시작, 커미트 및 롤백
- EJB 호출(예: 작성, 제거, findByPrimaryKey).