flex与java集成

HelloWord.java

@Service("com.wecups.test.HelloWorld")
@RemotingDestination
public class HelloWorld {

 
 public String sayHello(String name)
 {
  return "Hello! "+name;
 }
}

ApplicationContext.mxml(这个是parsley框架需要的,相当于flex的spring,在这个配置文件中声明了就可以直接使用[Inject]依赖注入)

<?xml version="1.0" encoding="utf-8"?>
<Object xmlns="*"
  xmlns:fx="http://ns.adobe.com/mxml/2009"
  xmlns:mx="library://ns.adobe.com/flex/mx"
  xmlns:service="com.wecups.test.service.*" >
 <fx:Declarations>
  <service:HelloService/>
 </fx:Declarations>
</Object>

BaseRemoteService.as

package com.wecups.test.service
{
 import flash.events.EventDispatcher;
 import flash.events.IEventDispatcher;
 
 import mx.core.FlexGlobals;
 import mx.rpc.remoting.RemoteObject;
 
 public class BaseRemoteService extends EventDispatcher
 {
  private var _ro:RemoteObject;
  public var destination:String;
  
  public function BaseRemoteService()
  {
   
  }
  
  public function get ro():RemoteObject
  {
   _ro = new RemoteObject();
   var contextRoot:String = FlexGlobals.topLevelApplication.contextPath;(这个在flex主应用程序中定义,与工程属性的flex服务器中的上下文环境对应)

//与services-config.xml中的endpoint一致
   _ro.endpoint =FlexGlobals.topLevelApplication.contextPath+"/spring/messagebroker/amf";
//    "http://localhost:8080"+contextRoot+"/spring/messagebroker/amf";
    
   _ro.destination = destination;
   return _ro;
  }
 }
}

 

HelloService.as

package com.wecups.test.service
{
 import mx.rpc.AsyncToken;

 public class HelloService extends BaseRemoteService
 {
  public function HelloService()
  {
   super();
   destination = "com.wecups.test.HelloWorld";(这个是java端的服务类的service注解上边的路径)
  }
  
  public function sayHello(name:String):AsyncToken
  {
   return ro.sayHello(name);
  }
 }
}

 

frameTest.mxml(flex主应用程序)

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
      xmlns:s="library://ns.adobe.com/flex/spark"
      xmlns:parsley="http://www.spicefactory.org/parsley"
      xmlns:mx="library://ns.adobe.com/flex/mx"
      minWidth="955" minHeight="600"
      creationComplete="creationCompleteHandler(event)"
      >
 
 <fx:Script>
  <![CDATA[
   import com.wecups.test.service.HelloService;
   
   import mx.controls.Alert;
   import mx.core.FlexGlobals;
   import mx.events.FlexEvent;
   import mx.messaging.messages.RemotingMessage;
   import mx.rpc.AsyncResponder;
   import mx.rpc.AsyncToken;
   import mx.rpc.events.FaultEvent;
   import mx.rpc.events.ResultEvent;
   
   public var contextPath:String = "/frameTest";
   
   [Inject]
   public var helloService:HelloService;
   protected function btn_clickHandler(event:MouseEvent):void
   {
    helloService.sayHello("tracy").addResponder(new
     AsyncResponder(getData,FlexGlobals.topLevelApplication.defaultError));
   }
   
   private function getData(event:ResultEvent,token:AsyncToken):void
   {
    var result:String = String(event.result);
    Alert.show(result);
   }
   
   public function defaultError(error:FaultEvent,token:Object=null):void
   {
    var errorLog:String = "Code:"+error.fault.faultCode+"\r";
    errorLog = errorLog +"Fault:"+error.fault.faultString+"\r";
    errorLog = errorLog +"Java Class:"+error.token.message.destination+"\r";
    errorLog = errorLog +"Function:"+RemotingMessage(error.token.message).operation+"";
    Alert.show(errorLog);
   }
   
   protected function doLoadClick(event:MouseEvent):void
   {
    showText.text="load Module";
    loader.loadModule();
   }
   
   protected function doUnloadClick(event:MouseEvent):void
   {
    showText.text="unload Module";
    loader.unloadModule();
   }
   

   protected function creationCompleteHandler(event:FlexEvent):void
   {
//    doLoadClick(null);
   }

  ]]>
 </fx:Script>
 
 <fx:Declarations>

<!--声明parsley框架-->
  <parsley:ContextBuilder config="com.wecups.test.context.ApplicationContext"/>
  <parsley:Configure/>
 </fx:Declarations>
 <s:VGroup>
  <s:HGroup>
   <s:Button id="btn" label="sayHello" click="btn_clickHandler(event)" />
   
   <s:Button label="load"  click="doLoadClick(event)"/>
   <s:Button label="unload" click="doUnloadClick(event)"/>
  </s:HGroup>
  <s:BorderContainer width="500" height="600">
   <s:Label id="showText"/>
   <mx:ModuleLoader id="loader"  url="./com/wecups/test/ModuleDemo.swf"/>
  </s:BorderContainer>
 </s:VGroup>
</s:Application>

 

flex库有四个配置文件

1,修改services-config.xml的endpoint

<?xml version="1.0" encoding="UTF-8"?>
<services-config>

    <services>
        <service-include file-path="remoting-config.xml" />
        <service-include file-path="proxy-config.xml" />
        <service-include file-path="messaging-config.xml" /> 
        <default-channels>
   <channel ref="my-amf"/>
  </default-channels>     
    </services>

    <security>
        <login-command class="flex.messaging.security.TomcatLoginCommand" server="Tomcat"/>
        <!-- Uncomment the correct app server
        <login-command class="flex.messaging.security.TomcatLoginCommand" server="JBoss">
  <login-command class="flex.messaging.security.JRunLoginCommand" server="JRun"/>       
        <login-command class="flex.messaging.security.WeblogicLoginCommand" server="Weblogic"/>
        <login-command class="flex.messaging.security.WebSphereLoginCommand" server="WebSphere"/>
        -->

        <!--
        <security-constraint id="basic-read-access">
            <auth-method>Basic</auth-method>
            <roles>
                <role>guests</role>
                <role>accountants</role>
                <role>employees</role>
                <role>managers</role>
            </roles>
        </security-constraint>
         -->
    </security>

    <channels>

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

        <channel-definition id="my-secure-amf" class="mx.messaging.channels.SecureAMFChannel">
            <endpoint url="https://{server.name}:{server.port}/{context.root}/spring/messagebroker/amfsecure" class="flex.messaging.endpoints.SecureAMFEndpoint"/>
            <properties>
                <add-no-cache-headers>false</add-no-cache-headers>
            </properties>
        </channel-definition>

        <channel-definition id="my-polling-amf" class="mx.messaging.channels.AMFChannel">
            <endpoint url="http://{server.name}:{server.port}/{context.root}/spring/messagebroker/amfpolling" class="flex.messaging.endpoints.AMFEndpoint"/>
            <properties>
                <polling-enabled>true</polling-enabled>
                <polling-interval-seconds>4</polling-interval-seconds>
            </properties>
        </channel-definition>
       
        <channel-definition id="my-streaming-amf"
   class="mx.messaging.channels.StreamingAMFChannel">
   <endpoint
    url="http://{server.name}:{server.port}/{context.root}/spring/messagebroker/streamingamf"
    class="flex.messaging.endpoints.StreamingAMFEndpoint" />
</channel-definition>
        <!--
        <channel-definition id="my-http" class="mx.messaging.channels.HTTPChannel">
            <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/http" class="flex.messaging.endpoints.HTTPEndpoint"/>
        </channel-definition>

        <channel-definition id="my-secure-http" class="mx.messaging.channels.SecureHTTPChannel">
            <endpoint url="https://{server.name}:{server.port}/{context.root}/messagebroker/httpsecure" class="flex.messaging.endpoints.SecureHTTPEndpoint"/>
            <properties>
                <add-no-cache-headers>false</add-no-cache-headers>
            </properties>
        </channel-definition>
        -->
    </channels>

    <logging>
        <target class="flex.messaging.log.ConsoleTarget" level="Error">
            <properties>
                <prefix>[BlazeDS] </prefix>
                <includeDate>false</includeDate>
                <includeTime>false</includeTime>
                <includeLevel>false</includeLevel>
                <includeCategory>false</includeCategory>
            </properties>
            <filters>
                <pattern>Endpoint.*</pattern>
                <pattern>Service.*</pattern>
                <pattern>Configuration</pattern>
            </filters>
        </target>
    </logging>

    <system>
        <redeploy>
            <enabled>false</enabled>
            <!--
            <watch-interval>20</watch-interval>
            <watch-file>{context.root}/WEB-INF/flex/services-config.xml</watch-file>
            <watch-file>{context.root}/WEB-INF/flex/proxy-config.xml</watch-file>
            <watch-file>{context.root}/WEB-INF/flex/remoting-config.xml</watch-file>
            <watch-file>{context.root}/WEB-INF/flex/messaging-config.xml</watch-file>
            <watch-file>{context.root}/WEB-INF/flex/data-management-config.xml</watch-file>
            <touch-file>{context.root}/WEB-INF/web.xml</touch-file>
             -->
        </redeploy>
    </system>

</services-config>

 2,remoting-config.xml

<?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>

</service>

3,proxy-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<service id="proxy-service"
    class="flex.messaging.services.HTTPProxyService">

    <properties>
        <connection-manager>
            <max-total-connections>100</max-total-connections>
            <default-max-connections-per-host>2</default-max-connections-per-host>
        </connection-manager>
        <allow-lax-ssl>true</allow-lax-ssl>
    </properties>

    <adapters>
        <adapter-definition id="http-proxy" class="flex.messaging.services.http.HTTPProxyAdapter" default="true"/>
        <adapter-definition id="soap-proxy" class="flex.messaging.services.http.SOAPProxyAdapter"/>
    </adapters>

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

    <destination id="DefaultHTTP">
    </destination>

</service>

4,messaging-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<service id="message-service"
    class="flex.messaging.services.MessageService">

    <adapters>
        <adapter-definition id="actionscript" class="flex.messaging.services.messaging.adapters.ActionScriptAdapter" default="true" />
        <!-- <adapter-definition id="jms" class="flex.messaging.services.messaging.adapters.JMSAdapter"/> -->
    </adapters>

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

</service>

 

配置applicationContext_flex.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:p="http://www.springframework.org/schema/p"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:flex="http://www.springframework.org/schema/flex" xmlns:jee="http://www.springframework.org/schema/jee"
 xmlns:tx="http://www.springframework.org/schema/tx" xmlns:tool="http://www.springframework.org/schema/tool"
 xsi:schemaLocation="
   http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsd
   http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-2.5.xsd
   http://www.springframework.org/schema/jeehttp://www.springframework.org/schema/jee/spring-jee-2.5.xsd
   http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-2.5.xsd
   http://www.springframework.org/schema/flexhttp://www.springframework.org/schema/flex/spring-flex-1.0.xsd
   http://www.springframework.org/schema/toolhttp://www.springframework.org/schema/tool/spring-tool-2.5.xsd">
<!-- Bootstraps and exposes the BlazeDS MessageBroker -->
 <context:annotation-config />
 <context:component-scan base-package="com.wecups" />
 <bean id="_messageBroker" class="org.springframework.flex.core.MessageBrokerFactoryBean">
 </bean>
 <bean
  class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
 </bean>
 <!-- Dispatches requests mapped to a MessageBroker -->
 <bean class="org.springframework.flex.servlet.MessageBrokerHandlerAdapter">
 </bean>
 <!-- Maps request paths at /* to the BlazeDS MessageBroker -->
 <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="mappings">
   <value>
    /messagebroker/*=_messageBroker
   </value>
  </property>
 </bean>

 <bean
  class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />

 <bean class="org.springframework.flex.config.RemotingAnnotationPostProcessor" />
 <bean
  class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />
 <bean id="multipartResolver"
  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  <property name="maxUploadSize" value="10000000" />
 </bean>
</beans>  

配置项目的web.xml

<?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/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
 id="WebApp_ID" version="2.5">

 <!-- <display-name>BlazeDS</display-name> -->
 <!-- <description>BlazeDS Application</description> -->

 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/spring/applicationContext.xml</param-value>
 </context-param>

 <!-- Http Flex Session attribute and binding listener support -->
 <listener>
  <listener-class>flex.messaging.HttpFlexSession</listener-class>
 </listener>
 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>
 <listener>
  <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
 </listener>

 <!-- MessageBroker Servlet -->
 <!-- <servlet> -->
 <!-- <servlet-name>MessageBrokerServlet</servlet-name> -->
 <!-- <servlet-class>flex.messaging.MessageBrokerServlet</servlet-class> -->
 <!-- <init-param> -->
 <!-- <param-name>services.configuration.file</param-name> -->
 <!-- <param-value>/WEB-INF/flex/services-config.xml</param-value> -->
 <!-- </init-param> -->
 <!-- <load-on-startup>1</load-on-startup> -->
 <!-- </servlet> -->
 <!-- <servlet-mapping> -->
 <!-- <servlet-name>MessageBrokerServlet</servlet-name> -->
 <!-- <url-pattern>/messagebroker/*</url-pattern> -->
 <!-- </servlet-mapping> -->

 <servlet>
  <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>WEB-INF/spring/applicationContext_flex.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
  <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
  <url-pattern>/spring/*</url-pattern>
 </servlet-mapping>
 <servlet>
  <servlet-name>RDSDispatchServlet</servlet-name>
  <servlet-class>flex.rds.server.servlet.FrontEndServlet</servlet-class>
  <init-param>
   <param-name>useAppserverSecurity</param-name>
   <param-value>false</param-value>
  </init-param>
  <init-param>
   <param-name>messageBrokerId</param-name>
   <param-value>_messageBroker</param-value>
  </init-param>
  <load-on-startup>10</load-on-startup>
 </servlet>

 <servlet-mapping>
  <servlet-name>RDSDispatchServlet</servlet-name>
  <url-pattern>/CFIDE/main/ide.cfm</url-pattern>
 </servlet-mapping>
 <welcome-file-list>
  <welcome-file>frameTest.html</welcome-file>
  <welcome-file>index.htm</welcome-file>
 </welcome-file-list>
 
 <!-- struts配置 -->
 <servlet>
  <servlet-name>actionServlet</servlet-name>
  <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  <init-param>
   <param-name>strutsConf</param-name>
   <param-value>/WEB-INF/struts-config.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
  <servlet-name>actionServlet</servlet-name>
  <url-pattern>*.do</url-pattern>
 </servlet-mapping>

</web-app>

别忘了假如需要的jar包,就可以跑起来了

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值