近来flex盛行,因此这两天也借了本书看了两天,发觉作为非页面设计人员,flex 还是很好的,flex builder很好用,拖拉就

有很COOL的界面了,而且flex总的来说基本东西不难学,有编程基础的人很快掌握,当然要精通就要时间了,因为库,API等很多.

下面就flex3+blazeds+spring+hibernate整合作个小结,是之前读外国好文的心得,而见国内这方面的文比较少,因此笔记之.

   首先要知道,flex3是做前端的,其实就是view层的东西了,可以替换掉struts 2,如果项目中你喜欢的话.而blazeds是
adobe免费的转换网关(可以理解成转换网关),负责把后端的数据与actionscript进行转换,当然也可以用

收费的那个livecycle data services了.而spring+hiberate的组合很传统了.

1 准备好东西
   A 下载blazeds,这里下载blazeds_turnkey_3-0-0-544的版本,因为自带了tomcat还有些好的例子

   B FLEXBUILDER 3

C MYSQL 5
       D SPRING+HIBERNATE,myeclipse,这些就不说了.

2 本文是根据http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&productId=2&postId=7923

 去小结的.其中在http://www.adobe.com/devnet/livecycle/articles/blazeds_spring.html中,讨论了如何跟spring结合,如何跟
hsqldb结合.那么文中是举了blazeds自带的例子来做说明的,在它的基础上进行修改,变成hibernate+spring.

3 先从http://download.macromedia.com/pub/developer/flex_spring.zip下载例子文件,其中包括了例子和作者写的
用spring调用的组件.

   解压flex-spring.zip
将/flex-spring/factory/bin/flex/samples/factories 目录下的class文件拷贝到/WEB-INF/classes/flex/samples/factories目录中

4 在/WEB-INF/flex/services-config.xml文件中注册spring factory
<factories>
<factory id="spring" class="flex.samples.factories.SpringFactory"/>
</factories>

5 配置web.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener </listener-class>
</listener>

6 在下载的程序中,我们重点关注samples\store这个目录下的程序.
其中flex目录是写好了的flex界面了,大家可以用flexbuilder去看.

而java目录其实就是后端的目录.无非就是用spring来实现对product对象的增,删改.

7 我们先用mysql 5在建立数据库 flexhibernate,表结构如下:
CREATE TABLE `product` (
  `productId` int(11) NOT NULL auto_increment,
  `name` varchar(40) NOT NULL,
  `category` varchar(40) NOT NULL,
  `image` varchar(255) NOT NULL,
  `price` double NOT NULL,
  `description` varchar(255) NOT NULL,
  `qtyInStock` int(20) NOT NULL,
  KEY `productId` (`productId`)
)

8 ,我们编写一个product.hbm.xml如下,放在samples\store\java目录下
   <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"[]>
<hibernate-mapping package="flex.samples.spring.store">
 <class name="Product" table="PRODUCT">
  <id name="productId" type="long" column="PRODUCTID"
   unsaved-value="0">
   <generator class="identity" />
  </id>
  <property name="name" column="NAME" length="40" />
  <property name="category" column="CATEGORY" length="40" />
  <property name="image" column="IMAGE" length="40" />
  <property name="price" column="PRICE" type="double" />
  <property name="description" column="DESCRIPTION" length="255" />
  <property name="qtyInStock" column="QTYINSTOCK"
   type="integer" />
 </class>
</hibernate-mapping>

9 编写applicationContext.xml,注意要放在blazeds_turnkey_3-0-0-544\tomcat\webapps\blazeds\WEB-INF下

内容如下
    

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
  <bean id="dataSource"
  class="org.apache.commons.dbcp.BasicDataSource"
  destroy-method="close">
  <property name="driverClassName" value="com.mysql.jdbc.Driver" />
  <property name="url"
   value="jdbc:mysql://localhost:3306/flexhibernate" />
  <property name="username" value="root" />
  <property name="password" value="abc" />
 </bean>

<bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="mappingResources">
   <list>
    <value>flex/samples/spring/store/Product.hbm.xml</value>
   </list>
  </property>
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">
     org.hibernate.dialect.HSQLDialect
    </prop>
   </props>
  </property>
  <property name="dataSource">
   <ref bean="dataSource" />
  </property>
 </bean>

<bean id="txManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory">
   <ref local="sessionFactory" />
  </property>
 </bean>
 <bean id="productDAOBeanTarget"
  class="flex.samples.spring.store.HibernateProductDAO">
  <property name="sessionFactory" ref="sessionFactory" />
 </bean>

<bean id="productDAOBean"
  class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  <property name="transactionManager" ref="txManager" />
  <property name="target" ref="productDAOBeanTarget" />
  <property name="transactionAttributes">
   <props>
    <prop key="create*">PROPAGATION_REQUIRED</prop>
    <prop key="update*">PROPAGATION_REQUIRED</prop>
    <prop key="delete*">PROPAGATION_REQUIRED</prop>
    <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>

</props>
  </property>
 </bean>
</beans>

  很典型的传统spring+hibernate的配置了.

10 修改blazeds_turnkey_3-0-0-544\tomcat\webapps\blazeds\WEB-INF\flex目录下的
remoting-config.xml文件,增加如下部分:
  <destination id="productService">
<properties>
<factory>spring</factory>
<source>productDAOBean</source>
</properties>
</destination>  

11 准备spring,hibernate,mysqljdbc等驱动包,可以先放在blazeds_turnkey_3-0-0-544\tomcat\webapps\blazeds\WEB-INF\lib下,

当然也可以通过下面写ANT文件去指定,道理都是一样的.注意我用的是spring 1.2.8的包,2.0X的还没试过,各位可以试下.

12 可以看到,原文作者在sample\store目录下,有个build.xml,但其中因为我是windows下的,所以修改了路径符号为\,

如下
  

<?xml version="1.0" encoding="utf-8"?>
<project name="Store Application" basedir="." default="main">

<property name="FLEX_HOME" value="C:\Program Files\Adobe\Flex Builder 3\sdks\3.1.0"/>
    <property name="DEPLOY_DIR" value="L:\blazeds_turnkey_3-0-0-544\tomcat\webapps\blazeds"/>
    <property name="CONTEXT_ROOT" value="blazeds"/>
<property   name="lib.dir"   value="L:\blazeds_turnkey_3-0-0-544\tomcat\webapps\blazeds\WEB-INF\lib"/>
<path   id="classpath">  
                  <fileset   dir="${lib.dir}">  
                          <include   name="*.jar"/>  
                  </fileset>  
          </path>

<taskdef resource="flexTasks.tasks" classpath="${FLEX_HOME}\ant\flexTasks.jar"  />

<target name="main" depends="compile-flex,html-wrapper,compile-java"/>
   
    <target name="compile-flex">
        <mxmlc file="flex/storeadmin.mxml"
         services="${DEPLOY_DIR}\WEB-INF\flex\services-config.xml"
         context-root="${CONTEXT_ROOT}"
   output="${DEPLOY_DIR}\storeadmin\storeadmin.swf"/>
        <mxmlc file="flex/store.mxml"
         services="${DEPLOY_DIR}/WEB-INF\flex\services-config.xml"
         context-root="${CONTEXT_ROOT}"
   output="${DEPLOY_DIR}\store\store.swf"/>
     <copy todir="${DEPLOY_DIR}\store\pic">
      <fileset dir="flex\pic"/>
    </copy>
   
    </target>

<target name="compile-java">
        <javac srcdir="java" destdir="${DEPLOY_DIR}\WEB-INF\classes">
   <classpath   refid="classpath"/> 
         </javac>
   <copy todir="${DEPLOY_DIR}/WEB-INF/classes/flex/samples/spring/store"> 
    <fileset dir="java" includes="**/*hbm.xml"/> 
  </copy>
    </target>

<target name="html-wrapper">
        <html-wrapper
              application="app"
              width="100%"
              height="100%"
              swf="storeadmin"
              version-major="9"
              version-minor="0"
              version-revision="0"
              history="true"             
              template="express-installation"
              output="${DEPLOY_DIR}\storeadmin"/>
        <html-wrapper
              application="app"
              width="100%"
              height="100%"
              swf="store"
              version-major="9"
              version-minor="0"
              version-revision="0"
              history="true"             
              template="express-installation"
              output="${DEPLOY_DIR}\store"/>
    </target>
   
</project>

 要注意的是,因为flex 3的ant扩展了ant,因此,要保证Adobe\Flex Builder 3\sdks\3.1.0\ant下有文件flexTasks.jar,

也要把flexTasks.jar COPY到ant的目录下去.

  之后就可以在sample\store根目录下,运行ant打包运行了.

13 之后启动tomcat,运行
   http://localhost:8400/blazeds/store/index.html
 和 http://localhost:8400/blazeds/storeadmin/index.html,
  就可以看到效果了.

14 简单分析其调用过程
  把其中一个flex文件打开,比如
   

<Product id="product"
  name="{productName.text}"
  category="{category.text}"
  price="{Number(price.text)}"
  qtyInStock="{int(qtyInStock.text)}"
  image="{image.text}"
  description="{description.text}"/>

<mx:RemoteObject id="srv" destination="productService"/>

<mx:Form width="100%">
 
  <mx:FormItem label="Name">
   <mx:TextInput id="productName" text="{product.name}"/>
  </mx:FormItem>
 
  <mx:FormItem label="Category">
   <mx:TextInput id="category" text="{product.category}"/>
  </mx:FormItem>
  
  <mx:FormItem label="Image">
   <mx:TextInput id="image" text="{product.image}"/>
  </mx:FormItem>
  
  <mx:FormItem label="Price">
   <mx:TextInput id="price" text="{product.price}"/>
  </mx:FormItem>

<mx:FormItem label="In Stock">
   <mx:TextInput id="qtyInStock" text="{product.qtyInStock}"/>
  </mx:FormItem>
 
  <mx:FormItem label="Description" width="100%">
   <mx:TextArea id="description" text="{product.description}" width="100%" height="100"/>
  </mx:FormItem>
  
 </mx:Form>

<mx:ControlBar>
  <mx:Button label="Update" click="srv.updateProduct(product)"/>
 </mx:ControlBar>

  其中,关注<mx:Button label="Update" click="srv.updateProduct(product)"/>,这里,就是调用srv的updateProduct(product)了,

其中,srv是一个 <mx:RemoteObject id="srv" destination="productService"/>,destination="productService"是什么?

就是第10步中指定的那个productService了,呵呵,应该大致明白了吧?

flex3+blazeds+spring+hibernate整合小结相关推荐

  1. Java程序员从笨鸟到菜鸟之(七十九)细谈Spring(八)spring+hibernate整合基本详解

    由于spring和hibernate处于不同的层次,Spring关心的是业务逻辑之间的组合关系,Spring提供了对他们的强大的管理能力, 而Hibernate完成了OR的映射,使开发人员不用再去关心 ...

  2. Spring+Hibernate整合

    因为整合spring和hibernate所以,需要用到spring里面复写Hibernate的类以有DI和IOC特性 db.sql hibernate_basic数据库 表 person 字段 pid ...

  3. Struts+Spring+Hibernate整合入门详解

    标签: strutshibernatespringbeanactionimport 2007-08-12 16:05 36280人阅读 评论(13) 收藏 举报 分类: STRUTS&SPRI ...

  4. 解决问题(七)——jsf+spring+hibernate整合(一)

    jsf+spring+hibernate整合,于struts+spring+hibernate整合的过程非常相似(就不截图了,可以参考第一篇文章),但是前者相对于后者稍微麻烦一些. 第一步:初步整合, ...

  5. Spring、Struts2+Spring+Hibernate整合步骤

    所使用的Jar包: Hibernate: Spring(使用MyEclipse自动导入框架功能) Struts2: 注解包和MySql驱动包: 1.配置Hibernate和Spring: <be ...

  6. spring mvc+spring + hibernate 整合(二)

    在上篇文章中,我建立了工程并配置了spring + hibernate.今天我们检验下上篇文章的成果,如何检查呢?那就是进行单元测试.本篇文章就让大家和我一起来就前面的建的工程进行单元测试. 本项目使 ...

  7. Spring+Hibernate整合Hessian

    2019独角兽企业重金招聘Python工程师标准>>> 软件环境: JDK1.6.Spring3.0.5.Hibernate3.2.2.Hessian3.1.5 参考Spring D ...

  8. JSF Spring Hibernate 整合:JSH1

    JSF1.1 + Spring2.0 + Hibernate3.1 项目图示: JSF1.1 Jar包: MyFaces1.1 Jar包: Spring与Hibernate包的配置与文章 web.xm ...

  9. struts+spring+hibernate整合小例子

    项目结构图 地址:http://www.blogjava.net/xiaoyi/articles/xiaoyi_ssh.html 包 com.yz.dao.impl package com.yz.da ...

最新文章

  1. Python开发基础总结(三)排序+迭代+生成器+装饰器
  2. LintCode刷题——Largest Divisible Subset
  3. python内置json模块的作用_python详解json模块
  4. HBase总结(二十)HBase常用shell命令详细说明
  5. shell 查看磁盘和当前文件夹所有大小
  6. hibernate mysql 读写分离_SpringBoot集成Spring Data JPA及读写分离
  7. 深度学习算法 第四期
  8. vivo X30系列发布会邀请函曝光:名副其实的“望远镜”
  9. 中台做不好,就会成为“钟台”!阿里高管离职创业,这次会搞砸吗
  10. java jsp输出乱码,这是小弟我的JSP文件,输出后,汉字显示为乱码,怎么解决
  11. 根据关键词获取多平台的商品列表接口解析
  12. Java 将HTML转为Word
  13. vue点击后html放大,vue实现点击图片放大效果
  14. [附源码]java毕业设计宾馆客房管理系统
  15. 技术团队培养_如何在团队中培养伟大的文化
  16. Fortran 77
  17. 【重磅】61篇NIPS2019深度强化学习论文及部分解读
  18. IE11安装需要获取更新-安装失败
  19. DDR2/3的进阶之创建MIG
  20. Crystal Chem 大豆 ELISA 试剂盒 II说明书

热门文章

  1. LeetCode004-寻找两个正序数组的中位数(Median of two sorted arrays)-Rust语言实现
  2. Go 除了泛型外最值得期待的新功能,模糊测试
  3. Laravel核心解读--异常处理
  4. MySQL面试题1:MySQL架构体系相关
  5. Docker简介以及Docker历史
  6. Linux基础命令---tracepath
  7. Perfect swift-server/http
  8. SQLite事务与自增深度分析
  9. python打开外部应用
  10. ruby imap抓取inbox中所有邮件的主题