::Java Platform::/::Spring::
|
2009. 7. 13. 06:28
:: Spring BlazeDS Integration 1.0.0 Release(정식) 적용하기 (1-2) - 추가사항 ::
Spring BlazeDS Integration 1.0.0 Release(정식) 적용하기 (1) 작성부분중에
MessageBroker를 선언하는 부분에서 <flex:message-broker/>가 적용이 안된다고
작성했었는데 원인을 알아냈습니다.
우선 <flex:message-broker/>가 안되는 조건을 적어보면
java단에 적용한 스프링이 Spring BlazeDS Integration만 이라면 아무문제없이 <flex:message-broker/>
방식으로 사용이 가능합니다.
하지만 java단에 SpringMVC를 적용해서 사용한 부분이 있다면 BlazeDS에서 adapter를 사용중이라
(아마도) 충돌 때문에 jsp페이지들이 아래와 같은 아름다운 에러를 뿜어 낼 것입니다.
이문제는 Spring 포럼에서도 등장한 문제로 일종의 버그비슷한 경우라고 생각합니다.
버전이 올라가면 해결되지 않을가 싶습니다.
자 그럼 해결방법을 알아보면 applicationContext에 다음과 같은 adapter를 하나 심어줍니다.
이로서 아까의 에러는 말끔히 사라집니다.
하.지.만 두번째 에러가 우리를 가로 막는데 에러는 다음과 같습니다.
처음에 이게 무슨문제인지 몰라서 많이 머리를 쥐어짯는데 역시 원인은 굵은 글씨 처럼 간단합니다.
없는겁니다.. JsonFactory관련 jar가...
공식 Doc에 필수 jar로서 왜 안써있는지 아직도 이해가 안됩니다...T.T
자 그럼 아래의 사이트에서 jackson-core-lgpl-1.1.0.jar 와 jackson-mapper-lgpl-1.1.0.jar을
받아서 lib에 넣어줍니다.
http://wiki.fasterxml.com/JacksonDownload
자 이제 문제는 모두 사라졌기에 Spring BlazeDS Integration 1.0.0 Release(정식) 적용하기 (1)
에서 사용한 기존의 방식은
이렇게 아름답게 바뀝니다.
그리고 리모팅을 위해서 사용한 아래의 방식도
이제 이렇게 사용하면 됩니다.
아 참 위 소스에서 destination-id를 적지 않으면 bean에 적어논 id가 자동으로 destination-id가 됩니다.
새로 찾는 내용은 찾을때마다 이페이지에 업데이트 하겠습니다.
자 이제 간단한 설정으로 XML지옥을 조금이나마 벗어나 보아요!
MessageBroker를 선언하는 부분에서 <flex:message-broker/>가 적용이 안된다고
작성했었는데 원인을 알아냈습니다.
우선 <flex:message-broker/>가 안되는 조건을 적어보면
java단에 적용한 스프링이 Spring BlazeDS Integration만 이라면 아무문제없이 <flex:message-broker/>
방식으로 사용이 가능합니다.
하지만 java단에 SpringMVC를 적용해서 사용한 부분이 있다면 BlazeDS에서 adapter를 사용중이라
(아마도) 충돌 때문에 jsp페이지들이 아래와 같은 아름다운 에러를 뿜어 낼 것입니다.
javax.servlet.ServletException: No adapter for handler [eu.emea.scorecard.web.example.ExampleController@1cf5ee4]: Does y
our handler implement a supported interface like Controller?
our handler implement a supported interface like Controller?
이문제는 Spring 포럼에서도 등장한 문제로 일종의 버그비슷한 경우라고 생각합니다.
버전이 올라가면 해결되지 않을가 싶습니다.
자 그럼 해결방법을 알아보면 applicationContext에 다음과 같은 adapter를 하나 심어줍니다.
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
이로서 아까의 에러는 말끔히 사라집니다.
하.지.만 두번째 에러가 우리를 가로 막는데 에러는 다음과 같습니다.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name '_flexRemotingAnnotationPostProcessor': Instantiation of bean failed; nested exception is org.springfra
mework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.flex.config.json.JsonConfigMapPropertyEditor]: Constructor threw exception; nested exception is
java.lang.NoClassDefFoundError: org/codehaus/jackson/JsonFactory
mework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.flex.config.json.JsonConfigMapPropertyEditor]: Constructor threw exception; nested exception is
java.lang.NoClassDefFoundError: org/codehaus/jackson/JsonFactory
처음에 이게 무슨문제인지 몰라서 많이 머리를 쥐어짯는데 역시 원인은 굵은 글씨 처럼 간단합니다.
없는겁니다.. JsonFactory관련 jar가...
공식 Doc에 필수 jar로서 왜 안써있는지 아직도 이해가 안됩니다...T.T
자 그럼 아래의 사이트에서 jackson-core-lgpl-1.1.0.jar 와 jackson-mapper-lgpl-1.1.0.jar을
받아서 lib에 넣어줍니다.
http://wiki.fasterxml.com/JacksonDownload
자 이제 문제는 모두 사라졌기에 Spring BlazeDS Integration 1.0.0 Release(정식) 적용하기 (1)
에서 사용한 기존의 방식은
<bean id="mySpringManagedMessageBroker" class="org.springframework.flex.core.MessageBrokerFactoryBean" />
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"
p:mappings="/*=mySpringManagedMessageBroker" />
<bean class="org.springframework.flex.servlet.MessageBrokerHandlerAdapter" />
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"
p:mappings="/*=mySpringManagedMessageBroker" />
<bean class="org.springframework.flex.servlet.MessageBrokerHandlerAdapter" />
이렇게 아름답게 바뀝니다.
<flex:message-broker/>
그리고 리모팅을 위해서 사용한 아래의 방식도
<bean id="test" class="test.Test"/>
<bean id="product" class="org.springframework.flex.remoting.RemotingDestinationExporter"
p:messageBroker-ref="mySpringManagedMessageBroker" p:service-ref="test"
p:destinationId="blaze" />
<bean id="product" class="org.springframework.flex.remoting.RemotingDestinationExporter"
p:messageBroker-ref="mySpringManagedMessageBroker" p:service-ref="test"
p:destinationId="blaze" />
이제 이렇게 사용하면 됩니다.
<bean id="test" class="test.Test">
<flex:remoting-destination destination-id="blaze"/>
</bean>
<flex:remoting-destination destination-id="blaze"/>
</bean>
아 참 위 소스에서 destination-id를 적지 않으면 bean에 적어논 id가 자동으로 destination-id가 됩니다.
새로 찾는 내용은 찾을때마다 이페이지에 업데이트 하겠습니다.
자 이제 간단한 설정으로 XML지옥을 조금이나마 벗어나 보아요!