flex,ssh2,blazeds整合(一)

阅读更多
环境
Myeclipse 6.0 ,flex builder 3,blazeds

BlazeDS是一个基于服务器的Java远程调用(remoting)和Web消息传递(messaging)技术,使得后台的Java应用程序和运行在浏览器上的Flex应用程序能够相互通信。整合时只需将相关jar宝拷过来。

Ssh2配置无需多说
FLEX和J2EE交互,一般有HTTP,Web Services 和 AMF几种方式。通常使用BlazeDS,来利用AMF协议让FLEX和J2EE交互。

AMF(Action Message Format)是ActionScript对象序列化后的二进制流。用于Adobe Flash应用和远端服务的通讯。由于它是基于二进制的数据传输,所以相对于XML SOAP,json,WebService等基于字符串的数据格式,有数据体积小和效率高的特点。

1、考入blazeDS依赖的jar包
backport-util-concurrent.jar
commons-httpclient.jar
commons-logging.jar
flex-messaging-common.jar
flex-messaging-core.jar
flex-messaging-proxy.jar
flex-messaging-remoting.jar

2、j2ee后台建立一个service接口,和service的实现类,这里写了最简单两个类。
public interface FlexService {
	public void test();
}
@Service("flexService")
public class IFlexService implements FlexService{
	public void test() {
       System.out.println("J2EE 收到flex请求");
  }
}


3、
Web.xml添加以下内容
 
flex.messaging.HttpFlexSession 


此监听器负责监听 Flex 远程调用请求,并进行一些初始化设置
	 
	    messageBroker 
	    flex.messaging.MessageBrokerServlet 
	     
	        services.configuration.file 
	        /WEB-INF/flex/services-config.xml 
	     
    	0 
	 

	 
	    messageBroker 
	    /messagebroker/* 
	 

此servlet是处理 Flex 远程调用请求的 Servlet

4、配置blazeds所需的配置文件,需要放在/WEB-INF/flex/目录下,blazeDS 读取 services-config.xml 配置文件,该配置文件又引用了 remoting-config.xml、proxy-config.xml 和 messaging-config.xml 这 3 个配置文件,所以,一共需要 4 个配置文件。
由于 BlazeDS 需要将 Java 接口 FlexService 暴露给 Flex 前端,因此,我们在配置文件 remoting-config.xml 中将 FlexService 接口声明为一个服务:
首先将这四个文件考入/WEB-INF/flex下(如果没有,新建此目录)
Remoting-config.xml加入
 
	     
	        com.ssh2.service.IFlexService 
	        application 
	     
  

Source为flex调用的服务类实现类
  或者
Remoting-config.xml加入
   
       
          flexFactory 
          flexService 
          application 
       
   

Services-config.xml加入
    
          
      

  这种情况。需要另外实现两个类
public class FlexFactoryImpl implements FlexFactory { 
  
    public FactoryInstance createFactoryInstance(String id, ConfigMap properties) { 
  
        SpringFactoryInstance instance = new SpringFactoryInstance(this, id, properties); 
        instance.setSource(properties.getPropertyAsString(SOURCE, instance.getId())); 
        return instance; 
    } 

    public Object lookup(FactoryInstance instanceInfo) { 
        return instanceInfo.lookup(); 
    } 

    public void initialize(String id, ConfigMap configMap) { 
    } 
  }

  和
class SpringFactoryInstance extends FactoryInstance { 
    SpringFactoryInstance(FlexFactory factory, String id, ConfigMap properties) { 
        super(factory, id, properties); 
    } 

    public Object lookup() { 
        ApplicationContext appContext = WebApplicationContextUtils. 
                getRequiredWebApplicationContext( 
                    FlexContext.getServletConfig().getServletContext() 
        ); 
        String beanName = getSource(); 
        try { 
            return appContext.getBean(beanName); 
        } 
        catch (Exception e) { 
        } 
        return null;
    } 
  } 
 

BlazeDS 将首先创建 FlexFactory 的实例—— FlexFactoryImpl;
当接收到 Flex 前端的远程调用请求时,BlazeDS 通过 FlexFactory 创建 FactoryInstance 对象,并传入请求的 Service ID。在这个应用程序中,被创建的 FactoryInstance 实际对象是 SpringFactoryInstance;
FactoryInstance 的 lookup() 方法被调用,在 SpringFactoryInstance 中,首先查找 Spring 容器,然后,通过 Bean 的 ID 查找 Bean,最终,FlexService 接口的实例被返回。
这种通过 BlazeDS 调用 FlexService 你可以另外做一些处理。

5、flex builder 3 创建flex项目
启动j2ee服务端
打开flex builder3 选择新建flex项目
应用服务器类型选择j2ee,use remote object access service选择
livecycle data services.
点击下一步
Root folder::服务器(此处tomcat)发布的项目路径,其下面需要能找到/WEB-INF/flex/
Root URL:j2ee服务端运行url地址

点击finish
编辑默认的mxml文件


     
     
    
    
    	
    
	
		
	
	
	



点击发送请求
发现j2ee服务端打印了。说明调用成功了。

注意:1、struts2配置的拦截器会拦截 /* 的请求
所以。可以重写StrutsPrepareAndExecuteFilter类。让他不拦截flex调用请求
public class MyStrutsPrepareAndExecuteFilter extends StrutsPrepareAndExecuteFilter {
    @Override
    public void doFilter(ServletRequest arg0, ServletResponse arg1,
                         FilterChain arg2) throws IOException, ServletException {
        // TODO Auto-generated method stub
        String requestURI = ((HttpServletRequest) arg0).getRequestURI();
        if(requestURI != null && requestURI.contains("/messagebroker"))
            arg2.doFilter(arg0, arg1);
        else
            super.doFilter(arg0, arg1, arg2);
    }

}

配入web.xml
2、如果删除了flex builder编辑输出的文件夹中的内容。可以clean一下项目,会重新生成。



你可能感兴趣的:(flex)