本文共 3633 字,大约阅读时间需要 12 分钟。
环境:
- 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是普通的业务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 > <!-- 注释掉,否则启动会报错或出现其他问题 <destination id="premiumService"> <properties> <source>org.hag.flex.service.PremiumService</source> </properties> </destination> --> </ service > 测试
<? 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 > 结果这时候报错,destination "premiumService" either does not exists....
原因是mxml编译时要根据remoting-config.xml来处理destination的定义,而我们把premiumService定义在了spring bean中,所以它根本就不知道premiumService的存在。取消掉remoting-config.xml的注释,再次对mxml进行编译(如修改后保存),在浏览器中清除缓存、刷新,OK,结果出来了。
注意在tomcat启动时又要把remoting-config.xml定义的destination注释掉,否则会出问题(那是由于blazeds找到两个相同的destination)。或者干脆在其他地方建立一个文件专门用于mxml的编译。
转载地址:http://esbli.baihongyu.com/