Chinaunix首页 | 论坛 | 博客
  • 博客访问: 341592
  • 博文数量: 71
  • 博客积分: 2129
  • 博客等级: 大尉
  • 技术积分: 835
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-18 16:03
文章分类

全部博文(71)

文章存档

2014年(22)

2013年(18)

2012年(24)

2010年(7)

我的朋友

分类: Java

2012-03-27 14:09:16

     本文章主要讲一下如何用J2EE+Flex+MySQL编写简单而强大的RIA,对于JAVA程序员来说,这是一个很实用的技术,也是很重要的内容。希望对于这方面有兴趣的朋友有所帮助吧。

  Adobe Flex 是一个客户端技术,它为开发人员提供丰富的 API 集合来创建 GUI、绘制图形、播放和流放媒体、连接到 Web 服务。在服务器端,Java 技术提供的功能包括关系型数据库管理系统(RDBM)的连接、服务请求的多线程处理以及随需求增加而进行的最佳伸缩。将这两种技术结合使用可提供一个满足 RIA 转子泵应用程序需求的强大的技术堆栈。

  本文展示如何编写一个简单而强大的 RIA,能使用客户端的 Flex、服务器端 Java 技术以及后端数据库的 MySQL。

  样例应用程序

  样例应用程序(来自下面的 下载 部分)提供一个丰富的 UI,支持通过 Adobe Flash? (SWF) 应用程序创建、读取、更新和删除(CRUD) 联系信息。这个三层的 Web 架构如 图 1 所示,其中客户端由嵌入在一个 Web 页面中的 SWF 文件表示,服务器应用程序在一个 Java servlet 容器(本例中为 Apache Tomcat)内运行,且数据库是 MySQL。这三层共同创建一个功能分布式应用程序。


▲图1 Contacts 应用程序

  对于 Flash 应用程序与 Java servlet 容器之间的通信,Adobe BlazeDS 框架提供对象远程调用 — 即一种允许 Adobe ActionScript? 对象与 Java 对象相互调用的 PRC 形式。Java 服务器应用程序与关系数据库之间的通信由 Hibernate Object Relational Mapping (ORM) 框架处理。Hibernate 允许将 Java 对象转换为 SQL代码,反之亦然。

应用程序:服务器层

  第一步是要创建一个 Java 类,它包含存储联系信息所需的信息。样例应用程序包含一个带基本信息的简单模型。Contact 对象所需的属性和数据类型是:

#div_code img{border:0px;}
- String emailAddress
- String firstName
- long id
- String lastName
- String phoneNumber
- long serialVersionUID
+ Contact()
+ Contact(String first, String last, String email, String number)
+ String getEmailAddress()
+ String getFirstName()
+ long getId()
+ String getLastName()
+ String getPhoneNumber()
+ void setEmailAddress(String address)
+ void setFirstName(String first)
+ void setId(long newId)
+ void setLastName(String last)
+ void setPhoneNumber(String number)
+ String toString()


  注释业务对象

  Java Contact 类被看作是一个充当业务对象的 POJO(简单 Java 对象),这意味着它代表业务领域特征和行为。Contact 对象内的数据需要存留到数据库中。解决方案就是使用一个 ORM 框架,比如 Hibernate,它在对象与数据库表记录之间的来回映射中执行大量工作。如果使用了 Java Persistence API (JPA) 注释,完成 ORM 仅需要少量代码。 清单 1 显示了带注释的 Java 类 Contact。

清单 1. Java Contact 类

#div_code img{border:0px;}
package bcit.contacts;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

@Entity
@Table(name
="contact")
@NamedQueries( {
    @NamedQuery(name
= "contact.findAll", query = "from Contact"),
    @NamedQuery(name
= "contact.getById", query =
        
"select c from Contact c where c.id = :id")
} )
public class Contact {

    
private static final long serialVersionUID = 123456789L;

    
public Contact() {
        firstName
= "N/A";
        lastName
= "N/A";
        emailAddress
= "N/A";
        phoneNumber
= "N/A";
    }

    
public Contact(String first, String last, String email, String number) {
        firstName
= first;
        lastName
= last;
        emailAddress
= email;
        phoneNumber
= number;
    }

    @Id
    @GeneratedValue(strategy
= GenerationType.AUTO)
    @Column(name
= "id", nullable = false, updatable=false)
    
private long id;

    @Column(name
= "lastName", nullable = false, unique = false)
    
private String lastName;

    @Column(name
= "firstName", nullable = false, unique = false)
    
private String firstName;

    @Column(name
= "emailAddress", nullable = false, unique = false)
    
private String emailAddress;

    @Column(name
= "phoneNumber", nullable = false, unique = false)
    
private String phoneNumber;

    
public void setPhoneNumber(String number) { phoneNumber = number; }

    
public String getPhoneNumber() { return phoneNumber; }

    
public String getEmailAddress() { return emailAddress; }

    
public void setEmailAddress(String address) { emailAddress = address; }

    
public String getFirstName() { return firstName; }

    
public void setFirstName(String first) { firstName = first; }

    
public String getLastName() { return lastName; }

    
public void setLastName(String last) { lastName = last; }

    
public long getId() { return id; }

    
public void setId(long newId) { id = newId; }

    @Override
    
public String toString() {
        return id
+ " " + firstName + " " + lastName + " " + emailAddress
            
+ " " + phoneNumber;
    }
}


类很简单,但对于注释则有很多内容需要解释:

  @Column:将属性标记为数据库内的一个列,可含有列名,不管它是否唯一且是否可为空

  @Entity:将类作为一个实体 bean 声明,表明它是一个要留存的 POJO

  @GeneratedValue:指定生成主键的策略;包括 AUTO、IDENTITY、SEQUENCE 和 TABLE

  @Id:指明属性为每个 Java 对象的唯一标识符(即主键)

  @NamedQueries:列出一组洗碗机命名查询

  @NamedQuery:将预定义查询声明为一个字符串常量,以供执行时引用。

  @Table:将 Java 类指定为数据库内的一个峨眉山乐山表

  每次需要留存一个内存中的 Java 对象时,Hibernate 将任何 Java 对象的状态信息转换为一个 SQL 更新。同样地,带结果集的 SQL 语句用于填充 Java 对象。因此,可将所有对象保存为数据库内的记录,且可检索所有记录并将其昭觉寺转换回 Java 对象。

  注释告知 Hibernate 一个类中的哪些内容可以考虑留存。但它们只是类的一部分。

呵呵,还差五分钟这样,未完等待续---

转子泵相关信息请访问:多级泵机械隔膜计量泵
卫生泵
潜水泵



阅读(2585) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

小豆熊2012-03-27 22:35:51

J2EE+Flex+MySQL编写简单而强大的RIA,很实用!

dongmiao1582012-03-27 14:25:03

最担心的就是老白的过滤器把我过滤掉了