1. WAS 버전 : IBM WAS v7.0 이상
2. OS : All
3. Error 발생 시점 : hot deploy 형태로 /config 폴더와 /installedApps 폴더의 web.xml 파일을 직접 수정(예: servlet filter 추가) 하고
재시작 했는데 변경사항이 반영되지 않음
4. Error message :
5. 예상 이유 :
IBM WAS v7.0 부터는 annotation 에 연관된 class 는 실제로 애플리케이션을 WAS 에 배포할 때 미리 인식이 되어 배포하면서
ibm-metadata.xml 파일과 web_merged.xml 이라는 파일을 생성합니다.
ibm-metadata.xml 샘플
<?xml version="1.0" encoding="UTF-8"?>
<ibm-metadata>
<annotated-classes name="com.ibm.juwlee.filter.ServletFilter"/>
<annotated-classes name="com.ibm.juwlee.servlet.ServletFilterTest"/>
</ibm-metadata>
web_merged.xml 은 web.xml 과 거의 동일
그런데 이때 annotated class 와 연관된 설정 항목은 web.xml 이 아니라 web_merged.xml 에서 읽어옵니다.
따라서 예를 들어 servlet-filter 부분을 아무리 web.xml 에서 변경해도 실제 반영되지 않습니다.
6. 조치 방안 :
web_merged.xml 이 생성되어 있고 ibm-metadata.xml 에 정의되어 있는 annotated class 와 연관된 설정 항목이라면
web_merged.xml 파일을 수정해야 함 (/config 폴더만 수정하면 됨)
또는, /config 폴더와 /installedApps 폴더의 web_merged.xml 파일을 삭제하고
web.xml 파일을 수정하면 됨(/config 폴더만 수정하면 됨)
또는, 실제 애플리케이션을 배포할때 단계중에 메타데이터 완료(metadata-complete) 속성을 true 로 선택하면
web_merged.xml 파일이 처음부터 생성되지 않음(즉, /config 폴더의 web.xml 만 수정하면 됨)
참고 : 메타데이터 완료(metadata-complete) 속성을 true 로 하면 이 모듈의 배치 디스크립터가 완료되었다고 판단하여
어노테이션 기반 메타데이터를 기존 XML 기반 배치 디스크립터 메타데이터와 병합하고 지속합니다.
이를 통해서 모듈을 읽을 때마다 어노테이션 기반 메타데이터를 스캔하지 않는 형태로 동작합니다.
만약, "false" 라면 모듈을 읽을 때마다 어노테이션 기반 메타데이터를 스캔합니다.
IBM - old/WAS 문제&해결
댓글