[Velocity]velocity.properties의 resource.loader.path가 인식되지 않는 경우!

Jakarta 2007. 12. 10. 14:06
struts2.0기반하에 프로젝트를 진행중인데,
velocity.properties에서 정의한 resource.loader.path가 인식되지 않은다!
 
일반적으로 WAS 기동 명령어를 Web Application의 Context Root 디렉토리에서
(즉, /app/web_root/가 context root라면
     $cd /app/web_root
     $runwas -->WAS기동 명령 )
실행하는 경우 문제를 해결 할 수 있는데, 온갖 삽질을 해도 인식이 안된다.
 
 velocity는 파싱할 vm파일에 대해
org.apache.velocity.runtime.resource.ResourceManagerImpl를 통해서
리소를 찾고 있다.(내부적으로 runtime시 전달되는 ResourceLoader들중 먼저 찾는 로더의 패스를 활용한다.)
내가 개발하고 있는 환경상
ResourceLoader는 두개가 전달된다.
velocity에서 제공되는 FileResourceLoader, struts2.0에서 제공되는 StrutsResourceLoader
두개를 이용하는데,
 
StrutsResourceLoader로더는 classpath상에서 리소스를 찾기때문에
그렇다고 하지만
FileResourceLoader는 정상적이어야 하는데 ㅡㅡ;
설정파일에서 설정한 경로를 인식하지 못해서 못찾는것으로 결론을 냈다.
 
해결방법은 org.apache.velocity.runtime.resource.ResourceManagerImpl 재정의한다.
재정의 방법은 나름데로의 해결책으로 하면 될것 같다.
(실제 배포된 org.apache.velocity.runtime.resource.ResourceManagerImpl소스를 봐도
(438~444)라인을 보면 runtime시에 전달되는 Loader로 리소스를 찾지 못한경우
Exception catch하고 있는데, 그곳에서 자신이 구현한 Loader를 통해 설정파일의
resource.loader.path하위에 찾도록 구현하여 해결하는것도 하나의 방법이 될 수 있고,
찾을 대상 resource에 설정파일의 패스가 없는 경우 설정파일의 패스를 덧붙여서
찾는 방법도 있을수 있다. 단 후자로 해결하려 하는 경우 찾을 대상 resource에서 macro.vm(매크로 파일)
은 제외해줘야 macro.vm에 정의한 매크로가 정상적으로 인식된다.)

설정

트랙백

댓글