티스토리 뷰
applicationContext-velocityengine-mail.xml 쉽게 사용하기
특수요원 세상 2012. 11. 19. 13:56
Spring에서 제공되는 Email 발송을 위한 Class 사용 시 xxx.xml 경로 지정 방법
보통 개발 할때 applicationContext-velocityengine-mail.xml 내용을 아래와 같이 사용하게 됩니다.
true resource.loader=class class.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
이러한 방법은 WAS에서 Spring으로 개발된 WAR파일 을 Loading할때는 문제가 없습니다.
문제는 WAR로 Packaging 되었을때와 그렇지 않을때 applicationContext-velocityengine-mail.xml 파일을 수동으로
찾고자 할때 발생하게 됩니다.
보통 아래 예제처럼 사용 하는것 같습니다. 해외 Site에서도 이와 관련된 질문들이 많더군요.
ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[] {"classpath:applicationContext-velocityengine-mail.xml"}); setMailSender( (JavaMailSender)ctx.getBean("mailSender") ); setVelocityEngine((VelocityEngine)ctx.getBean("velocityEngine") );
위 방법으로 사용하게 됩니다. WAS에 Deploy 할때 WAR파일이 풀려 있는 상태에서만 사용가능 합니다.
즉 xxx.war로 된 압축파일로 사용 할때는 Email 발송 시 Exception이 발생 하게 됩니다.
주원인은 ClassPathXmlApplicationContext(new String[] {"classpath:applicationContext-velocityengine-mail.xml"});
문장에서 발생 하며, applicationContext-velocityengine-mail.xml 파일을 찾지 못하기 때문입니다.
이는 WAR 파일로 압축되었을때 와 WAR파일을 압축을 풀어서 Deploy할때 WAS에서 해당 Context의 시작점을 다르게 보기 때문입니다.
WAR로 압축된 상태에서 Deploy할때는 아래와 같이 사용 합니다.
ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[] {"classpath:../applicationContext-velocityengine-mail.xml"}); setMailSender( (JavaMailSender)ctx.getBean("mailSender") ); setVelocityEngine((VelocityEngine)ctx.getBean("velocityEngine") );
그러나 이러한 방법은 사실 좋은 방법이라고 볼수가 없습니다. 두가지 방법을 공통화 해서 사용해야 하나,
2가지 형태로 관리해야 한다는 것이 좀 모순 이지요.
설명드린 방법은 통상적인 방법이면서 이미 WAS에 의해 Deploy 되었을때 Loading되는 XML 을 또다시 별도로 불러들이는
방식으로 이러한 방법을 사용하지 말고 좀더 효율적인 방법이 있습니다.
즉 이미 Loading되어 있는 XML정보를 사용하는 방법 입니다. 즉 Context를 통해 이미 loading된 정보를 사용하는 방법으로
Spring의 구조 상 DWR로 동작하는 Class에서와 Controller Class에서 사용 할때 조금 다르게 사용해야 합니다.
DWR에서의 사용 예
WebContext wctx = WebContextFactory.get(); JavaMailSender mailSender = (JavaMailSender)wctx.getContainer().getBean("mailSender"); VelocityEngine velocityEngine = (VelocityEngine)wctx.getContainer().getBean("velocityEngine");
Controller에서의 사용 할때는 이미 Spring에 의해 전달받아 사용되기 때문에
MultiActionController Class를 상속받은 Controller에서만 사용 가능 하다.
JavaMailSender mailSender = (JavaMailSender)this.getApplicationContext().getBean("mailSender"); VelocityEngine velocityEngine = (VelocityEngine)this.getApplicationContext().getBean("velocityEngine");
'개발자 이야기 > Java / Web 이야기' 카테고리의 다른 글
Node.js 이야기 1탄 (0) | 2016.06.28 |
---|---|
RestFull API 개발을 위한 사전 준비사항 (1) | 2016.03.18 |
Rest API의 Client 사용시 SSL 처리 (0) | 2016.03.18 |
Https Server 구현시 주의 할 점 (0) | 2015.07.01 |
JQuery를 이용하여 In Focus와 Out Focus 발생 시 CSS 조작 (0) | 2013.04.03 |
JQuery를 사용한 Image Select (0) | 2013.02.06 |
HttpServletResponse에서 getWriter() already Error 발생 시 주의 점 (0) | 2012.08.29 |
POI를 사용하여 Java 서블릿에서 Excel File을 Stream으로 전송하기 (0) | 2012.05.14 |
- Total
- Today
- Yesterday
- 리눅스
- embeded
- 채소 키우기
- 열무
- 식물키우기
- 버추얼박스
- U-Boot
- 베란다
- 고흥
- Linux
- 1회용컵
- 크로스컴파일
- VirtualBox
- Android
- 벌교
- 수경재배
- arm
- 상추
- 커널
- cross compile
- 식물 키우기
- 큐비보드
- CubieBoard2
- 커피컵
- 사무실
- C++
- 임베이디드
- C
- 식물
- kernel
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |