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페이지들이 아래와 같은 아름다운 에러를 뿜어 낼 것입니다.

javax.servlet.ServletException: No adapter for handler [eu.emea.scorecard.web.example.ExampleController@1cf5ee4]: Does y
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

처음에 이게 무슨문제인지 몰라서 많이 머리를 쥐어짯는데 역시 원인은 굵은 글씨 처럼 간단합니다.

없는겁니다.. 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" />

이렇게 아름답게 바뀝니다.

<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="test" class="test.Test">
           <flex:remoting-destination destination-id="blaze"/>
</bean>

아 참 위 소스에서 destination-id를 적지 않으면 bean에 적어논 id가 자동으로 destination-id가 됩니다.

새로 찾는 내용은 찾을때마다 이페이지에 업데이트 하겠습니다.

자 이제 간단한 설정으로 XML지옥을 조금이나마 벗어나 보아요!