달력

62025  이전 다음

  • 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
[이전 블로그 백업글][2007.11.3]

일을 하다보면 될꺼 같은데.. 해보면 에러가 뜨는 경우가 있습니다.
에러가 뜨면 음. 될줄 알았으나 역시 안되는 거였구나. 하고 넘어가는 부분이 있습니다.
물론 꼭 필요하거나 급하지 않은 경우에는 왜 에러가 뜨지 하면서 문제를 파악하곤 하는데 바쁘거나 필수 기능이 아니라면 우회적인 방법을 선택하게 되는것 같습니다.
이번에 프로젝트 하면서 그런 경우가 jsp에서 Spring의 ApplicationContext를 가져오는 것이었습니다.
처음에는 당연(?)하게도 ClassPathXmlApplicationContext 를 사용하면 되겠구나 해서 사용했습니다. 멀정히 Web Context가 올라가고도 ClassPathXmlApplicationContext 를 사용했으니 설정파일 가져오기를 최소한 두번이상 하는 셈이지요.
그래서 이런 경우라면 WebApplicationContext 라면 되겠구나 해서. 했던 기억이 있는데. 역시 에러가 잠깐 발생했던 기능도 있네요. 뭐. 이건 제 삽질 얘기구요..
방법은 다음처럼

WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(getServletContext());


기선님이 정리하셨던 참고글.. : http://whiteship.tistory.com/1349
Posted by fromm0
|
[이전 블로그 백업글][2007.11.3]

머리가 굳어가는지 잘 까먹는다. 이래선..

1. xml에 설정하는 간단한 방법


xml설정에서는 위처럼 트랜잭션 프록시에 대상 비즈니스 객체를 삽입한 뒤 호출을 다음과 같은 형식으로 한다. 간혹 깜박깜박하는게 빈을 가져올때 commonManagerProxy를 아이디로 사용해야 하는데 commonManager를 아이디로 사용해서 왜 트랜잭션이 작동 안하지 하면서 삽질을 하곤한다.

2. AOP를 사용하는 방법


빈을 가져올때 1번의 경우와는 달리 아이디로 commonManager 를 전달하면 된다. AOP에 의해 자동으로 처리가 된다. 위 aop의 advisor에 설정되어 있는 pointcut의 * *..service.*Manager.*(..) 는 service로 끝나는 패키지에서 Manager로 끝나는 클래스의 모든 메소드에 작동한다는 것이다.
Posted by fromm0
|
[이전 블로그 백업글][2007.10.8]

WebWork 단위테스트중에 Action로직에서 Session에 값을 셋팅하는 로직이 있다면 테스트 코드에 명시적으로 세션정보를 생성해둘 필요가 있다.


생각해보면 당연하지만 놓치기 쉬운일은 많다.
Posted by fromm0
|
[이전 블로그 백업글][2007.9.10]

AOP에 의해 처리가 되는지 체크하기 위한 로깅용 소스입니다.


AOP를 적용하기 위한 인터페이스입니다.


위 인터페이스를 구현한 클래스입니다.


다음은 Spring설정파일입니다. 파일명은 applicationContext.xml 으로 했습니다. 여기서 주의깊게 볼 부분은 부분입니다.

1. aop:before의 경우
- 메소드 실행직전에 작동
- ref=”simpleLogger” 에 의해 참조되는 빈인 example.SimpleLogger의 logTwoString 메소드를 실행
- logTwoString 메소드가 실행되는 시점은 pointcut정의에 의해 example로 시작하는 패키지내 Service라는 글자를 포함하는 클래스의 모든 메소드, 그 메소드 중에 인자를 두개 가지는 메소드가 실행시 자동으로 작동하게 됩니다.

2. aop:after-returning의 경우
- 메소드가 정상적으로 값을 반환한 뒤에 작동
- ref=”simpleLogger” 에 의해 참조되는 빈인 example.SimpleLogger의 logOneString 메소드를 실행
- logOneString 메소드가 실행되는 시점은 pointcut정의에 의해 example로 시작하는 패키지내 Service라는 글자를 포함하는 클래스의 모든 메소드가 실행시 자동으로 작동하게 됩니다.


실행을 시켜보기 위한 소스입니다. 다음처럼 실행하면 일단 concatService 아이디를 가지는 빈인 example.ConcatServiceImpl의 concat메소드가 작동하게 됩니다. 그리고 앞서 설정한 사항에 의해 각각의 AOP가 작동하게 됩니다.


결과물을 보면 다음처럼 작동하는것을 볼수 있습니다.


http://blog.interface21.com/main/2006/03/22/pojo-aspects-in-spring-20-a-simple-example/
Posted by fromm0
|
[이전 블로그 백업글][2007.9.5]

AppFuse의 FAQ페이지에 보면 몇가지 도움이 될만한 글이 있습니다. 몇가지 주요한 것을 정리해보면 다음과 같습니다.

1. AppFuse 2.x에서 maven대신에 ant를 사용하는 방법
basic archetypes로 프로젝트를 생성한 다음 순서대로 처리하면 된다. modular archetypes로 프로젝트 생성시 ant를 사용할수 없습니다.

* 프로젝트 디렉토리에서 mvn appfuse:full-source 를 실행한다.
* 프로젝트에 build.xml 를 다운로드해서 넣는다.
* build.xml 파일에서 “appfuse-light” 라고 지정된 부분을 프로젝트명으로 변경해준다.
* maven-artifact-ant-2.0.4-dep.jar 를 다운로드하고 프로젝트의 “lib” 디렉토리에 넣는다. 처음에는 “lib” 디렉토리가 없기 때문에 만들어줘야 한다.

2. 2.x를 tomcat과 함께 사용하기
AppFuse에서 기본적으로 사용하는 was는 jetty입니다. tomcat을 사용하기 위해서는 다음과 같은 추가적인 작업이 필요합니다.

* mvn jetty:run-war 를 실행한다- Jetty인스턴스를 실행하고 http://localhost:8080 에서 페이지를 볼수 있다.
* mvn cargo:start -Dcargo.wait=true 를 실행하면 애플리케이션이 tomcat에 디플로이되고 http://localhost:8081/applicationname-version 에서 페이지를 볼 수 있다.

pom.xml 에 Maven 2 Tomcat 플러그인을 추가하고 mvn tomcat:run 와 mvn tomcat:run-war 를 사용한다.


3. 이미 설치된 tomcat을 사용하고자 한다면

를 다음처럼 바꾼다. 즉 home 프로퍼티에 tomcat이 home디렉토리 위치를 지정해주면 된다.


4. 디폴트 ORM을 바꾸고자 한다면

pom.xml 파일에서 <dao .framework> 프로퍼티를 ibatis 나 jpa-hibernate 로 변경한다.
Posted by fromm0
|
[이전 블로그 백업글][2007.5.4]

현재 AppFuse에는 한글을 위한 properties파일이 배포판에 등록되어 있지 않습니다.
음. 제가 책임을 느끼는 중입니다. ^^..
심심하면 들여다보는 놈인데도 불구하고 아직도 제가 등록을 안해서 이번에 등록할려고 합니다.

일단 첨부하는 파일을 마음 있는 분은 적용해보시고 쓸만하거나 잘못된 부분이 있다면 덧글 남겨주세요.
음. 그러고보니 appfuse light도 해야 할텐데.. 할까요..?? 사용하시는 분이 있으신지를 모르니..
주말에 matt에게 메일을 보내 요청하겠습니다. 다음 버전에는 추가되어야 할텐데..
참. 어떻게 메일로 보내야 할까요..? 영작은 쥐약인데..

다운로드는 다음의 URL을 이용하세요.
http://openframework.or.kr/files/ApplicationResources_korean.properties

다음 명령으로 변환하셔야 합니다.

native2ascii -encoding UTF-8 ApplicationResources_korean.properties ApplicationResources_ko.properties
Posted by fromm0
|
[이전 블로그 백업글][2006.8.17]

음. 요즘 타 시스템과의 연계를 위해 .. 타 시스템 개발자에게 API를 제공할 일이 있어 작업하고 있습니다.
API를 문서를 제공하기 위해 javadoc을 사용하고자 하는데.. 결과물이 계속 한글이 깨져서 나왔습니다.
웹검색을 해보니. 의외로 사용하는 사람이 없어서 그런지.. 별다른 글이 없더군요..
여러번의 삽질끝에 얻어낸 결론은.. javadoc사용시 다음의 인자를 추가하는 것입니다.
java소스파일의 인코딩이 UTF-8이라 다음과 같은데.. 혹 EUC_KR이나 MS949를 사용하시는 분이 계시다면.. 적절히 값을 바꿔주면 될듯..

혹 다른 방법이 있다면. 덧글로 남겨주는. 센스.. ^^

-locale ko_KR -encoding UTF-8 -charset UTF-8 -docencoding UTF-8

'환경' 카테고리의 다른 글

[팁] 키보드 비프음 없애기  (0) 2008.06.28
[AppFuse] FAQ에서 몇가지..  (0) 2008.06.28
[AppFuse] 한글 properties파일  (0) 2008.06.28
[메모] apache connector 인코딩  (0) 2008.06.20
[cygwin] ssh 서버 사용하기  (2) 2008.06.14
Posted by fromm0
|
[이전 블로그 백업글][2006.4.10]

http://blog.springframework.com/benh/archives/2006/04/09/spring-20s-jms-improvements/

Spring 1.1에서 JMS지원이 추가되었다. 이 지원은 예외번역(exception translation), 메시지 변환, 그리고 JdbcTemplate과 같은 템플릿 클래스를 포함한다. 이 지원은 JMS 1.0.2와 1.1스펙사이의 도메인 단일화를 다룬다. 이 지원의 핵심은 JmsTemplate이고 JMS 1.0.2의 복사본은 JmsTemplate102이다.

이 지원은 기업용 메시징을 위한 하위 레벨의 JMS API를 사용하여 굉장히 크게 발전했다. 어쨌든 이것은 부족한점(JmsTemplate은 JmsTemplate.receive()메소드를 사용하여 메시지의 동기적인 수식만 지원했다.)을 가지고 있었다. 이것은 많은 사람들을 위해 작동을 잘하긴 했지만, 굉장히 많은 사용자는 비동기적인 소비자의 구현물을 사용했다. 간단히 말하면, 그들은 메시지 지향(driven) bean이라고 불리는 EJB2를 원했다.

2.0M1과 추후의 2.0정식버전에서, JMS메시지의 비동기적인 수신을 위한 고유한 지원이 추가되었다. JmsTemplate은 여전히 메시지를 보내기 위해 사용될것이지만, DefaultMessageListenerContainer, SimpleMessageListenerContainer, 과 ServerSessionMessageListener와 같은 AbstractMessageListenerContainer의 하위클래스에 의해 조합되었다.

이러한 MessageListenerContainers를 사용하는 방법을 보자. 첫번째 단계는 메시지를 받는 클래스를 생성하는 것이다. 이것을 위해, MessageListener인터페이스를 구현하는 클래스를 생성해야만 한다.

그리고나서, message제공자가 필요할 것이다. 이 코드는 Spring 2.0이전의 것과 같다. 그래서 당신이 이미 이 코드가 있다면, 어떠한 수정도 가하지 않아도 된다.

다음에, 이 bean으로 메시지를 보내는 MessageListenerContainer를 생성하기 위한 컨텍스트를 설정할 필요가 있다. 이 예제에서는 ActiveMQ구현물 클래스를 사용하여 알릴것이다. 이것은 많은 JMS구현물중 하나가 될것이다.

MQ가 시작될 필요가 있을것이고 main메소드가 컨텍스트에 시동될 필요가 있을것이다. 당신이 필요한 나머지 소스를 볼수 있도록 이 예제의 프로젝트를 제공한다.

마지막으로, 당신은 애플리케이션을 구동하고 출력물을 볼 필요가 있다.

여기서 노트할것은 하나의 소비자 쓰레드를 가지고 비동기적인 수신을 다루는 것이다. 이것은 MessageListenerContainer의 동시 소비자(concurrent consumers) 프라퍼티를 사용하여 당신의 소비자를 위한 멀티쓰레드가 가능하다(당신은 여전히 비상태유지나 쓰레드에 안전한것에 대해 기억하라.).

내가 노트하고자 하는 하나는 Topic으로 동시 소비자를 사용하지 않는것을 확인하는 것이다. JMS Topic내에서, 모든 메시지가 Topic의 모든 소비자에게 전달되는 것을 기억하라. 이것은 topic에서 동시 소비자를 가진다면, 모든 소비자는 같은 메시지를 받을것이라는 것을 의미한다. 어쨌든, 당신이 queue를 사용한다면, 연속적인(round-robin) 방식으로 소비자에게 새로운 각각의 메시지를 분리시킬것이다.

이것은 그다지 충동적이지 않고 몇가지 점에서 당신이 작성하게 되는 것과 매우 유사할것이다. 이것을 iceberg의 팁이라고 말해보자. MessageListenerContainers는 새로운 Spring TaskExecutorabstraction을 사용하는 사용자정의 threadpools을 사용하여 트랜잭션내 일부를 가지는 능력을 가진다. 그리고 소비자에 고유의 JMS세션을 드러낸다.
Posted by fromm0
|
[이전 블로그 백업글][2006.4.10]
1. 주관적 편견에 빠지지 말라.
2. 멘티에 정직하라.
3. 삶을 본받고 싶어하는 모델이 되야 한다.
4. 멘티에게 헌신하라.
5. 멘티를 돕는 일은 개방적이고 투명하게 하라.
6. 교사처럼 충분히 이해할수 있게 가르치라
7. 멘티의 잠재력과 가능성을 믿어라.
8. 미래를 향한 비전을 심어주라.
9. 스스로 성공적인 삶이 돼야한다.
10. 스스로 배우는 자가 돼야한다.
Posted by fromm0
|
[이전 블로그 백업글][2006.4.5]
음. iBATIS에 관해 자주(?) 다루고 있지만은.. 유래에 대해서.. 알려진 바는 많지 않아.. 그동안 모르고 있었습니다. 웹 서핑중에 유래에 관련된 부분이 있군요..

Clinton Begin이라는 사람에 의해 2001년에 시작된 프로젝트.
원래는 암호 관련 소프트웨어 개발에 초점을 맞춘 프로젝트였다. iBATIS에 의한 첫 산출물은 Secrets라는 이름의 툴이다.

그러다가 2002년 초반에 마이크로소프트가 .NET이 J2EE에 비해 10배 빠르고 4배 생산성이 좋다는 논문을 발표했는데, 이에 iBATIS 팀은 (역자주: 열받아서..) 같은해 7월 1일 JPetStore 1.0을 릴리스했다. 그럼으로해서 자바가 .NET보다 생산성뿐 아니라 아키텍처면에서도 이점이 있음을 보여줬다.

그런데, JPetStore가 아주 재밌는 persistene layer를 사용했는데, 이것이 오픈소스 진영의 관심을 끈 것이다. 그후 관련된 질문과 요구가 Data Mapper(SQL Maps)와 DAO라는 두개의 프레임워크로 구성된 새로운 관점에 집중한 iBATIS 프로젝트의 전이를 가져온 것이다.

ibatis는 원래 암호 관련 프로젝트로 시작되었음을 알려주는 이름이다. 즉 “internet”과 “abatis”의 합성어인데,, abatis는 적의 공격을 방어하기 위한 장애물이라는 뜻이니,,, 인터넷를 지키는데 쓰는 암호를 의미하는 것이다.

http://pxforever.egloos.com/1022231 에서 가져왔습니다.
음 iBATIS 단어의 유래가 저렇다면. 정식 발음은 “아이버티스” 내지 “아이배티스”가 되어야 겠네요..
Posted by fromm0
|