Как использовать интеграцию Spring BlazeDS?

Я хочу использовать Spring BlazeDS Integration.

Я их так пишу.

[web.xml]

<servlet>
    <servlet-name>flex</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>flex</servlet-name>
    <url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>

[WEB-INF / classes / applicationContext.xml]

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:flex="http://www.springframework.org/schema/flex"
    xsi:schemaLocation="
            http://www.springframework.org/schema/flex
            http://www.springframework.org/schema/flex/spring-flex-1.0.xsd
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">


    <flex:message-broker/>

    <bean id="hogeService" class="hoge.HogeServiceImpl">
        <flex:remoting-destination />
    </bean>
</beans>

[WEB-INF / flex / services-config.xml]

<services-config>

    <services>
        <default-channels>
           <channel ref="my-amf"/>
        </default-channels>
    </services>


    <channels>

        <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
            <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/>
        </channel-definition>
</services-config>

Итак, я вызываю «hogeService» из приложения Flex вот так.

var ro:RemoteObject = new RemoteObject();
ro.destination = "hogeService";
ro.hoge(); // HogeServiceImpl class has "hoge" method with no arguments.

Затем я получил такое сообщение об ошибке.

[RPC Fault faultString="[MessagingError message='Destination 'hogeService' either does not exist or the destination has no channels defined (and the application does not define any default channels.)']" faultCode="InvokeFailed" faultDetail="メッセージ送信先への接続を確立できませんでした。"]

Почему я получаю это сообщение об ошибке? И подскажите, пожалуйста, какие-нибудь решения ..


person Take    schedule 24.01.2011    source источник


Ответы (2)


Убедитесь, что ваш файл services-config.xml также передан гибкому компилятору (compc или mxmlc) в качестве флага compiler.services.

В качестве альтернативы вы можете позволить RemoteObject построить канал (который затем полностью разделяет конфигурацию клиента и сервера), например:

var ro:RemoteObject = RemoteObject();
ro.endpoint = "http://{server.name}:{server.port}/{context.root}/messagebroker/amf"; // this internally constructs an AMFChannel or SecuredAMFChannel depending on the protocol
ro.hoge();
person Clement P    schedule 24.01.2011

С последними версиями интеграции Spring BlazeDS вам просто нужно что-то добавить в диспетчер Spring, чтобы все работало, хотя я считаю, что вам все еще нужны все services-config.xml и т. Д. Для самого Flex.

<flex:message-broker>
  <flex:message-service default-channels="amf"/>
</flex:message-broker>
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="mappings">
    <value>
      /*=_messageBroker
    </value>
  </property>
</bean>
<bean class="org.springframework.flex.servlet.MessageBrokerHandlerAdapter"/>
person mezmo    schedule 24.01.2011