EJB 명령 그룹
AdminTask 오브젝트에 대한 EJB 명령 그룹은 엔터프라이즈 Bean을 조작하기 위해 사용할 수 있는 명령을 제공합니다.
removeAutomaticEJBTimers
애플리케이션이나 모듈은 어노테이션 또는 XML을 사용하여 애플리케이션 서버에 EJB 타이머를 자동으로 작성하도록 지시합니다.
자동으로 작성된 타이머는 자동 EJB 타이머가 작성되는 순간에 애플리케이션 또는 모듈이 실행 중인 서버와 연관된 스케줄러 인스턴스에서 지속됩니다. 스케줄은 서버별로 구성되므로 토폴로지의 각 서버가 고유한 스케줄러 인스턴스를 사용할 수 있습니다. 이 경우 각 서버에 특정한 스케줄러 인스턴스가 해당 서버에서 실행 중인 EJB 타이머를 지원합니다.
각 스케줄러 인스턴스는 데이터베이스 테이블 세트와 연관됩니다. 복수의 스케줄러 인스턴스가 있는 경우, 각 스케줄러 인스턴스를 고유한 접두부를 갖고 구성하여 인스턴스가 고유한 데이터베이스 테이블 세트에 맵핑하게 하십시오.
자동 EJB 타이머를 요청한 애플리케이션 또는 모듈이 서버에서 제거될 때 자동 EJB 타이머가 대응하는 스케줄러 인스턴스에서 제거되어야 합니다. 애플리케이션 또는 모듈이 여러 서버에 설치되었고 각 서버가 고유한 스케줄러 인스턴스를 사용한 경우, 타이머는 해당 스케줄러 인스턴스의 각각으로부터 제거되어야 합니다. 다시 말하면 자동으로 작성된 EJB 타이머는 서버별로 제거됩니다.
일부 경우에는 애플리케이션 또는 모듈의 제거 또는 업데이트로 인해 자동으로 작성된 EJB 타이머가 스케줄러 인스턴스에서 제거됩니다. 이 시나리오에서는 사용자 조치가 필요없습니다.
그러나, 다른 경우에는 애플리케이션 또는 모듈의 제거 또는 업데이트로 인해 자동으로 작성된 EJB 타이머가 스케줄러 인스턴스에서 제거되지 않습니다. 이 경우에는 removeAutomaticEJBTimers 명령을 사용하여 수동으로 EJB 타이머를 제거해야 합니다.
이 명령은 연결 모드에서만 지원됩니다. 네트워크 배치 토폴로지에서는 배치 관리자, NodeAgent 및 스케줄러 인스턴스를 포함하는 관리 서버가 모두 실행 중이어야 합니다. 기본 토폴로지에서는 독립형 서버가 실행 중이어야 합니다.
Rational® Application Developer 느슨한 구성 시나리오에서는 자동으로 작성된 EJB 타이머를 수동으로 제거해야 합니다. 또한 프로그래밍 방식으로 작성된 EJB 타이머는 자동으로 작성된 EJB 타이머와 같지 않으며 자동으로 제거되거나 이 명령에 의해 제거되지 않습니다.
네트워크 배치 토폴로지에서, 단일 모듈이 토폴로지에 있는 서버의 서브세트에만 설치될 때 해당 모듈과 연관된 자동으로 작성된 타이머는 서버의 해당 서브세트와만 연관된 스케줄러 인스턴스로부터 제거되어야 합니다. 모듈이 설치되지 않은 서버에 대응하는 스케줄러 인스턴스는 정리할 필요가 없습니다.
대상 오브젝트: 없음
- -appName
- 제거하려는 자동으로 작성된 EJB 타이머를 요청한 애플리케이션의 이름입니다. (문자열, 필수).
- -serverName
- 제거하려는 자동으로 작성된 EJB 타이머를 포함하는 애플리케이션 또는 모듈을 실행하는 서버의 이름입니다. 이 매개변수는 호스트 이름이 아니라 애플리케이션 서버의 논리 이름을 나타냅니다. (문자열, 필수).
- -schedulerJNDIName
- 이 매개변수는 제거하려는 자동으로 작성된 EJB 타이머를
지속하는 스케줄러 인스턴스의 JNDI 이름을 나타냅니다.
서버 인스턴스는 항상 특정 스케줄러 인스턴스를 사용하여 자동으로 작성된 EJB 타이머를 지원하도록 구성됩니다. 사용되는 스케줄러 인스턴스를 명시적으로 구성할 수 있거나 스케줄러 인스턴스를 명시적으로 구성하지 않을 것을 선택할 수 있습니다. 후자의 경우에 기본 스케줄러 인스턴스가 사용됩니다.
제거하려는 자동으로 작성된 EJB 타이머를 포함하는 스케줄러 인스턴스가 서버에 대해 현재 구성된 동일한 스케줄러 인스턴스인 경우 이 매개변수를 생략할 수 있습니다. 이 경우에 명령은 구성을 검사하고 현재 구성된 스케줄러 인스턴스를 검색하여 사용합니다.
그러나 현재 구성된 스케줄러 인스턴스가 제거하려는 EJB 타이머를 포함하는 것이 아닌 경우, 이들 타이머를 포함하는 스케줄러 인스턴스의 JNDI 이름을 지정하십시오. (문자열, 선택적)
- -nodeName
- 서버를 포함하는 노드의 이름입니다. (문자열, 필수).
- -moduleName
- 제거하려는 자동으로 작성된 EJB 타이머를 요청한 모듈의 이름입니다. 애플리케이션에서 모든 자동으로 작성된 타이머를 제거하려는 경우, 타이머가 정의되는 모듈과 상관없이 이 매개변수가 생략됩니다. 이 매개변수는 애플리케이션의 한 모듈이 요청한 자동 작성된 타이머를 제거하기 원하지만 동일한 애플리케이션의 다른 모듈이 요청한 타이머는 제거하지 않기 원할 때만 지정됩니다. (문자열, 선택적)
리턴값: 없음
- WebSphere® Application
Server는 다음 조건이 모두 만족될 때 자동으로 작성된 EJB 타이머를
제거하려고 시도합니다.
- 다음 조치 중 하나가 수행됩니다.
- 애플리케이션 설치 제거
- 애플리케이션 업데이트
- 모듈 설치 제거
- 모듈 업데이트
- 조치가 연결 모드에서 수행되었습니다(wsadmin -conntype none이 아님).
- 필요한 서버가 조치 시점에서 실행 중이었습니다.
- 네트워크 배치 토폴로지의 경우, 배치 관리자, 노드 에이전트 및 자동으로 작성된 EJB 타이머를 포함하는 관리 서버가 모두 실행 중이었습니다.
- 기본 토폴로지의 경우 독립형 서버가 실행 중이었습니다.
- 올바른 후속 조치가 수행되었습니다.
- 네트워크 배치 토폴로지의 경우, 변경사항을 저장하고 이들을 노드 에이전트에 동기화시킵니다. 변경을 저장하지만 동기화하지 않는 경우 자동으로 작성된 EJB 타이머는 제거되지 않습니다. 자동으로 작성된 EJB 타이머는 동기화 처리 중에만 제거됩니다.
- 기본 토폴로지의 경우 변경을 저장합니다.
- 스케줄러 인스턴스를 지원하는 데이터베이스가 실행 중이었습니다.
- 다음 조치 중 하나가 수행됩니다.
- WebSphere Application
Server는 다음 조건 중 하나가 발생할 때 자동으로 작성된
EJB 타이머를 제거하지 않습니다.
- 애플리케이션 또는 모듈의 업데이트 또는 설치 제거 이외의 모든 조치가 수행됩니다.
- 조치는(애플리케이션/모듈 설치 제거/업데이트인 경우에도) 연결 단절 모드에서 수행되었습니다.
- 필요한 서버가 실행 중이 아니었습니다.
- 네트워크 배치 토폴로지의 경우, 배치 관리자, 노드 에이전트 또는 관리 서버가 실행 중이 아니었습니다.
- 기본 토폴로지의 경우 독립형 서버가 실행 중이 아니었습니다.
- 올바른 후속 조치가 수행되지 않았습니다.
- 네트워크 배치 토폴로지의 경우, 저장 또는 동기화가 수행되지 않았습니다.
- 기본 토폴로지의 경우 저장이 수행되지 않았습니다.
- 스케줄러 인스턴스를 지원하는 데이터베이스가 실행 중이 아니었습니다.
오류가 발생하는 경우 또는 애플리케이션 서버가 자동으로 작성된 EJB 타이머를 제거하려고 시도하지 않은 경우 또는 자동으로 작성된 EJB 타이머가 제거되었는지 확실하지 않은 경우 수동으로 removeAutomaticEJBTimers 명령을 실행하여 자동으로 작성된 EJB 타이머가 제거되는지 확인하십시오. 자동으로 작성된 타이머가 스케줄러 인스턴스에서 실제로 제거된 경우 명령 실행이 불필요하지만 해를 끼치지는 않습니다.
클러스터 환경에서 실행 중이고 클러스터가 복수 노드를 포함하며 각 노드가 동일한 클러스터 레벨 스케줄러 인스턴스에 맵핑하는 서버를 포함하는 경우, 자동으로 작성된 타이머만 서버 중 하나에서 제거되어야 합니다. 이것은 공유 스케줄러 인스턴스가 업데이트되고 해당 공유 스케줄러 인스턴스를 사용하는 모든 서버가 변경을 보기 때문입니다.
결과적으로 한 노드의 서버가 실행 중이 아니고 자동 타이머가 제거될 수 없다는 로그 경고를 수신하지만 서버가 성공적으로 정리된 다른 노드의 서버와 클러스터 레벨 스케줄러 인스턴스와 공유함을 아는 경우, 공유 스케줄러 인스턴스가 이미 업데이트되었기 때문에 사용자 조치가 필수가 아닙니다.
클러스터에 복수 서버가 있고 이들이 모두 동일한 노드의 파트이고 단일 클러스터 레벨 스케줄러 인스턴스를 공유하며 클러스터 멤버 중 하나가 실행 중이 아닐 때도 해당됩니다. 이 경우에, 애플리케이션 서버는 자동 타이머가 해당 서버에서 제거될 수 없다는 로그 경고를 발행합니다. 그러나, 공통 스케줄러 인스턴스를 공유하고 클러스터 멤버 중 하나가 성공적으로 정리되었음을 아는 경우, 공유 스케줄러 인스턴스가 이미 업데이트되었기 때문에 사용자 조치는 필요없습니다.
네트워크 배치 토폴로지에서 실행 중이고 복수 서버가 있는 경우, 사용된 스케줄러의 유형(기본 대 사용자 정의 구성)이 스케줄러 정리에 관한 성능에 영향을 미칩니다. 기본 EJBContainer 스케줄러는 서버별로 고유합니다. 기본 EJBContainer 스케줄러 인스턴스를 사용 중이고 5개의 서버가 있는 경우, 이것은 5개의 고유한 스케줄러 인스턴스가 있음을 의미하며 애플리케이션이 업데이트 또는 제거될 때 자동 타이머가 5개 서버 모두에서 제거되어야 합니다. 그러나 하나의 공유 사용자 정의 구성된 스케줄러 인스턴스를 사용 중인 경우 자동 타이머는 해당하는 하나의 스케줄러 인스턴스에서 한 번만 제거되어야 합니다.
예 1
토폴로지:
- 워크스테이션 A에서 실행 중인 배치 관리자.
- 워크스테이션 B에서 실행 중인 노드 에이전트, 노드는 Node01로 부릅니다.
- 워크스테이션 C에서 실행 중인 관리 서버 server1.
- 워크스테이션 D에서 실행 중인 관리 서버 server2.
- 보안이 사용으로 설정됩니다.
- server2가 현재 타이머를 포함하는 동일한 스케줄러 인스턴스를 사용하도록 구성되었습니다.
배경:
testApp 애플리케이션이 관리 콘솔에서 연결 모드에서 설치 제거되었습니다. 해당 타이머를 요청한 모듈과 상관없이 애플리케이션의 모든 자동으로 작성된 타이머를 제거하려고 합니다.
배치 관리자, 노드 에이전트 및 server1 서버가 실행 중이었고 자동 EJB 타이머가 server1에서 제거되었습니다. 그러나, server2가 실행 중이 아니었으므로 자동 EJB 타이머가 server2에서 제거되지 않았습니다.
이제 server2에서 자동 EJB 타이머를 수동으로 제거해야 합니다.
- Jacl을 사용하여 배치 관리자의 연결된 wsadmin 세션에서
다음 코드 행을 입력하십시오.
$AdminTask removeAutomaticEJBTimers "-appName testApp -serverName server2 -nodeName Node01"
- Jython을 사용하여 배치 관리자의 연결된 wsadmin 세션에서
다음 코드 행을 입력하십시오.
AdminTask.removeAutomaticEJBTimers('-appName testApp -serverName server2 -nodeName Node01')
예 2
토폴로지:
- 워크스테이션 A에서 실행 중인 독립형 server1, 노드는 Node01로 부릅니다.
- 관리 보안이 사용 안함으로 설정됩니다.
- server1이 자동 EJB 타이머가 작성되었을 때 jndi/sched_1 스케줄러 인스턴스를 사용하도록 구성되었습니다. 그러나, server1은 현재 jndi/sched_2 스케줄러 인스턴스를 사용하도록 구성됩니다.
배경:
testApp 애플리케이션에서 mod1 모듈이 설치 제거되었지만, server1이 설치 제거 시에 jndi/sched_2 인스턴스를 사용하도록 구성되었기 때문에, 자동 EJB 타이머가 jndi/sched_1 스케줄러 인스턴스에서 제거되지 않았습니다.
이제 server1의 jndi/sched_1 스케줄러 인스턴스에서 자동 EJB 타이머를 수동으로 제거해야 합니다.
애플리케이션에 mod1 및 mod2 모듈이 들어 있습니다. 이들 모듈이 둘 다 자동으로 작성된 EJB 타이머를 요청했습니다. mod2 모듈은 여전히 설치되어 있으며, 아직 모듈이 요청한 자동으로 작성된 EJB 타이머가 필요합니다. mod1이 요청한 자동으로 작성된 EJB 타이머만 제거하려고 합니다.
- Jacl을 사용하여 독립형 서버의 연결된 wsadmin 세션에서
다음 코드 행을 입력하십시오.
$AdminTask removeAutomaticEJBTimers "-appName testApp -moduleName mod1 -serverName server1 -nodeName Node01 -schedulerJNDIName jndi/sched_1"
- Jython을 사용하여 독립형 서버의 연결된 wsadmin 세션에서
다음 코드 행을 입력하십시오.
AdminTask.removeAutomaticEJBTimers('-appName testApp -moduleName mod1 -serverName server1 -nodeName Node01 -schedulerJNDIName jndi/sched_1')