環(huán)境:
- Spring blazeDS Integration 1.0.0 release
- blazeDS 3.2.0.3978
- jdk1.6.0_06
- flex sdk 3.2.0
- flex builder 3
在web.xml中配置DispatcherServlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>flex_server</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/context-*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>flex</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>flex</servlet-name>
<url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
在flex-servlet.xml中定義destination
<?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:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:flex="http://www.springframework.org/schema/flex"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/flex
http://www.springframework.org/schema/flex/spring-flex-1.0.xsd">
<flex:message-broker />
<!-- premiumService是普通的業(yè)務(wù)bean -->
<flex:remoting-destination ref="premiumService"/>
</beans>
這樣在remoting-config.xml中就不需要定義destination了
<?xml version="1.0" encoding="UTF-8"?>
<service id="remoting-service"
class="flex.messaging.services.RemotingService">
<adapters>
<adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/>
</adapters>
<default-channels>
<channel ref="my-amf"/>
</default-channels>
<!--注釋掉,否則啟動(dòng)會(huì)報(bào)錯(cuò)或出現(xiàn)其他問(wèn)題
<destination id="premiumService">
<properties>
<source>org.hag.flex.service.PremiumService</source>
</properties>
</destination>
-->
</service>
測(cè)試
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="premiumService.getPremiumList()">
<mx:Script>
<![CDATA[
<!-- 省略import -->
private function resultHandler(evt:ResultHandler):void
{
Alert.show(evt.result.toString());
}
private function faultHandler(evt:FaultHandler):void
{
Alert.show(evt.fault.toString());
}
]]>
</mx:Script>
<mx:RemoteObject id="premiumService" ref="premiumService"
result="resultHandler(event)" fault="faultHandler(event)"/>
</mx:Application>
結(jié)果這時(shí)候報(bào)錯(cuò),destination "premiumService" either does not exists....
原因是mxml編譯時(shí)要根據(jù)remoting-config.xml來(lái)處理destination的定義,而我們把premiumService定義在了spring bean中,所以它根本就不知道premiumService的存在。取消掉remoting-config.xml的注釋,再次對(duì)mxml進(jìn)行編譯(如修改后保存),在瀏覽器中清除緩存、刷新,OK,結(jié)果出來(lái)了。
注意在tomcat啟動(dòng)時(shí)又要把remoting-config.xml定義的destination注釋掉,否則會(huì)出問(wèn)題。或者干脆在其他地方建立一個(gè)文件專門用于mxml的編譯。