2010년 2월 16일 화요일

Weblogic 개발시 유의 사항

오늘 허드슨으로 Weblogic 빌드 테스트를 진행중에 두 가지 중요한
사실을 알게 되었습니다.
막상 이슈를 해결하고 보니 허탈 하지만 그래도 모르면 많이
삽질을 할 것 같아서 말씀 드립니다.

  • PathMatchingResourcePatternResolver 이슈
"PathMatchingResourcePatternResolver" 클래스는 매우 유용한
클래스 입니다. 이 클래스 용도는 파일 위치를 와일드 카드를
사용해서 가져 올수 있습니다.
(실제로 spring context 로드시 이 클래스를 사용함)
예를 들어서 "WEB-INF/config/*.xml" 이렇게 선언하면 와일드
카드가 적용되서 저 패턴에 해당하는 파일들을 읽어 옵니다.
만약 저 클래스를 사용하지 않는다면 복잡한 유틸성 클래스를
만들어야 겠죠.
저는 이 클래스를 사용해서 properties로 된 config성 파일들을
로드해서 초기화 합니다.
Resource[] resources;
PathMatchingResourcePatternResolver prcrr;
int resourceCnt;
resourceCnt = 0;
prcrr = new PathMatchingResourcePatternResolver();
resources = prcrr.getResources("classpath:/config/*.properties");

6 Line : Ant 패턴으로 해당 파일들의 정보를 배열 형태로 가져옵니다.

문제는 톰캣,Jboss 사용시에는 전혀 문제가 되지 않는데 weblogic에서
사용하면 해당 파일을 찾지 못하는 경우가 발생 했습니다.
별짓을 다해도 소용이 없다가 찾아 보니 경로를 아래와
같이 수정해서 선언 해야 한다는 것입니다.
"classpath:/config/*.properties" => "classpath*:/config/*.properties"
수정된 부분은 "classpath"앞에 "*"를 붙여야 한다는 것입니다.
아래는 소스상에서 spring context를 가져오는 예제 입니다.
private static final String SPRING_CONFIG_FILE = "classpath:/*SpringConfig.xml";
ApplicationContext context = new ClassPathXmlApplicationContext(SPRING_CONFIG_FILE) ;


이부분도 "classpath*:/*SpringConfig.xml" 변경해야 weblogic에서
인식이 됩니다.
web.xml에서 "contextConfigLocation" 선언시 앞으로
"classpath"를 "classpath*"로 변경해서 설정하는
습관이 필요 합니다.

  • getServletContextName 이슈

image,css,js등 웹 리소스의 경로를 지정할때 "getServletContextName()" 메서드를
통해서 하드코딩 하지 않고 개발 환경이든 운영환경이든 상관없이
가져와서 경로를 맵핑 하도록 하는 유틸 클래스가 있었습니다.
그런데 이상하게도 weblogic console에서는 Context 이름이
"Webapp"로 되어 있는데 이미지가 다깨져서 나오는 것입니다.
그래서 jsp에서 "pageContext.getServletContextName()"를
해보니 "MyWebapp"로 출력이 되었습니다.
콘솔이나 호출시 Context는 "Webapp"인데 어떻게
"getServletContextName()"를 호출하면 다른 이름이 나오는지
정말 돌기 일보 직전...
확인해 보니 web.xml에서 아래와 같이 수정해야 합니다.
<display-name>Webapp</display-name>


즉 "getServletContextName()" 호출하면 weblogic에서는
"display-name" 태그에 명시한 이름이 리턴되게 되어 있습니다.
ZEUS도 마찬가지 입니다.
그래서 weblogic 설정시 반드시 콘솔에서 설정한 context 명과
web.xml의 "display-name" 태그와 일치하도록 하는 습관이
필요 합니다.

  • Weblogic은 구리다(?)
저도 이런 헤프닝을 치른 후에 weblogic에 대해서 불만이 많았습니다.
tomcat에서 개발된 webapp는 jboss에서는 무리없이 설치가
되는데 유독 weblogic만 호환이 안될까 하고 다소
회의적인 생각을 했습니다. 자바는 플랫폼 독립적인 언어인데
그 말과 일치 하지 않게 WAS에 의존적이지....
누구나 많은 경험을 했을 것입니다. tomcat으로 개발 하고
weblogic에서 빌드할때 초조하고 불안한 마음을 ...
하지만 곰곰히 생각해보니 weblogic은 표준에 대해서
엄격한 WAS 입니다. 어떻게 보면 우리가 J2EE 스펙을
잘모르고 weblogic만 탓하는건 아닐까 하는 생각이
들더군요.무조건 벤더만 탓하지 말고 먼저 내가
표준을 잘지키는지 부터 의심해 봐야 할 것 같습니다.

댓글 없음:

댓글 쓰기