精通Flex 3.0――14.4.4 DataManagement的Flex应用的服务端代码

  在服务端生成的Java代码中包括一个抽象类FlexDBAFlexDAO,一个接口IRestVO还有三个类StudentAssemblerStudentDAOStudentVO

FlexDBAFlexDAO为数据访问的抽象类代码如下所示。

package com.lcdsstu.dao.dao;

 

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.HashMap;

import java.util.Map;

 

import Javax.naming.InitialContext;

import Javax.naming.NamingException;

import Javax.sql.DataSource;

 

import com.lcdsstu.dao.dao.IRestVO;

 

public abstract class FlexDBAFlexDAO

{

 

         public static final String PAGE_NUM = "pageNum";

         public static final String PAGE_SIZE = "pageSize";

         public static final String ORDER_FIELD = "orderField";

         public static final String ORDER_DIR = "orderDirection";

         public static final String FILTER = "filter";

         protected static DataSource getDataSource()

    {

    InitialContext ic;

    DataSource nativeDS = null;

    try

    {

               ic = new InitialContext();

               nativeDS = (DataSource) ic.lookup("jdbc/myDB");

    }

    catch (NamingException e)

    {

               // ignore this exception

               // if the data source is not found in JNDI then we will get

               // the connection the old way

    }

    return nativeDS;

    }

    protected static Connection getConnection() throws SQLException

    {

    DataSource ds = FlexDBAFlexDAO.getDataSource();

    if (ds != null)

    {

               return ds.getConnection();

    }

   

    try

    {

               Class.forName("com.mysql.jdbc.Driver");

    }

    catch (ClassNotFoundException e)

    {

               e.printStackTrace();

    }

   

    Connection conn = DriverManager.getConnection(

            "jdbc:mysql://localhost/FlexDB", "root", "123");

   

    return conn;

   

    }

 

         public FlexDBAFlexDAO()

         {

                   super();

         }

        

         protected abstract String getCountStatement(Map args);

         protected String getOrder(String order, String dir)

         {

                   if(!dir.toLowerCase().equals("desc"))

                   {

                            dir = "asc";

                   }

                  

                   if(order != null && order.trim().length() != 0)

                   {

                            return " order by " + order + " " + dir;

                   }

                   else

                   {

                            return "";

                   }

         }

 

         protected void setUpPKAfterCreate(IRestVO vo, Connection c)

         {

                   //设置主键这里不作操作

         }

        

         public int count()

         {

                   return count(new HashMap());

         }

         public int count(Map args)

    {

    Connection c = null;

    PreparedStatement ps = null;

    int res = 0;

   

    try

    {

               c = getConnection();

               ps = c.prepareStatement(getCountStatement(args));

              

               String filter = getParameter(args.get(FILTER));

                            if(filter.trim().length() != 0)

                            {

                                     ps.setString(1, "%"+filter+"%");

                            }

 

                            ResultSet rs = ps.executeQuery();

   

               rs.next();

               res = rs.getInt(1);

    }

    catch (SQLException e)

    {

               e.printStackTrace();

    }

    finally

    {

               try

               {

                        ps.close();

                        c.close();

               }

               catch (SQLException e)

               {

                        e.printStackTrace();

               }

    }

    return res;

    }

         protected int[] getPagination(Map map)

         {

                   int[] dim = new int[2];

                   if(map.size() == 0)

                   {

                            return null;

                   }

                   String page = null;

                   String pageSize = null;

                  

                   if(!map.containsKey(PAGE_NUM))

                   {

                            return null;

                   }

                   else

                   {

                            page = getParameter(map.get(PAGE_NUM));

                   }

                           

                   if(!map.containsKey(PAGE_SIZE))

                   {

                            return null;

                   }

                   else

                   {

                            pageSize = getParameter(map.get(PAGE_SIZE));

                   }

                  

                   try

                   {

                            dim[0] = Integer.parseInt(page);

                            dim[1] = Integer.parseInt(pageSize);

                   }

                   catch (NumberFormatException e)

                   {

                            return null;

                   }

                  

                   return dim;

         }

        

         protected String getParameter(Object value)

         {

                   if(value instanceof String[] )

                   {

                            return ((String[])value)[0];

                   }

                   else

                   {

                            return value.toString();

                   }

                  

         }

 

}

IRestVO定义了一个值对象的接口代码如下所示。

package com.lcdsstu.dao.dao;

import java.util.HashMap;

public interface IRestVO {

         HashMap getAsMap();

}

StudentAssembler是访问数据库的一个助手类。代码如下所示。

package com.lcdsstu.dao.dao;

import java.math.BigDecimal;

import java.util.Collection;

import java.util.List;

import java.util.Map;

import flex.data.assemblers.AbstractAssembler;

import flex.messaging.io.amf.ASObject;

public class StudentAssembler extends AbstractAssembler

{

         private StudentDAO studentDAO = new StudentDAO();

         public Object getItem(Map uid)

         {

                   Object pk = uid.get("id");

                   if(pk == null)

                   {

                            // it should not get here as the refreshFill should prevent this.

                            // However, we respond with an empty object so the DataService to work.

                            return new StudentVO();

                   }

                   return studentDAO.find(new BigDecimal(pk.toString()));

         }

 

         public Collection fill()

         {

                   return studentDAO.list();

         }

 

         public Collection fill(List arg)

         {

                   if(arg.size() != 0) {

                            ASObject asObj = (ASObject)arg.get(0);

                            return studentDAO.list(asObj);

                   } else {

                            return fill();

                   }

         }

 

         public int count(List arg)

         {

                   if(arg.size() != 0) {

                            ASObject asObj = (ASObject)arg.get(0);

                            return studentDAO.count(asObj);

                   } else {

                            return studentDAO.count();

                   }

         }

 

         public void createItem(Object newVersion)

         {

                   StudentVO vo = (StudentVO) newVersion;

                   studentDAO.create(vo);

         }

 

         /*

          * (non-Javadoc)

          *

          * @see flex.data.assemblers.AbstractAssembler#deleteItem(java.lang.Object)

          */

         public void deleteItem(Object prevVersion)

         {

                   StudentVO vo = (StudentVO) prevVersion;

                   studentDAO.delete(vo);

         }

 

         public void updateItem(Object newVersion, Object prevVersion, List changes)

         {

                   StudentVO vo = (StudentVO) newVersion;

                   studentDAO.update(vo);

         }

    public int refreshFill(List arg0, Object arg1, boolean arg2)

    {

     StudentVO vo = (StudentVO)arg1;

    if(vo.getId() == null)

    {

               return DO_NOT_EXECUTE_FILL;

    }

             return super.refreshFill(arg0, arg1, arg2);

    }

 

}

StudentDAO是一个继承与FlexDBAFlexDAO的数据访问类,代码如下所示。

package com.lcdsstu.dao.dao;

import java.math.BigDecimal;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import flex.messaging.MessageException;

 

public class StudentDAO extends FlexDBAFlexDAO

{

         public static String COLUMNS = "|id|name|sex|age|address|remark|";

         public static String FIND_STATEMENT = "select id,Name,Sex,age,Address,Remark "

                 + " from student" + " where id = ?";

         public static String LIST_STATEMENT = "select id,Name,Sex,age,Address,Remark "

                 + " from student";

         public static String DELETE_STATEMENT = "DELETE FROM student WHERE id = ?";

         private static String CREATE_STATEMENT = "INSERT INTO student (Name,Sex,age,Address,Remark) "

                 + "VALUES (?,?,?,?,?)";

         private static String UPDATE_STATEMENT = "UPDATE student SET Name = ?,Sex = ?,age = ?,Address = ?,Remark = ? "

                 + "WHERE id = ?";

 

        

         protected String getCountStatement(Map args)

    {

             return "SELECT COUNT(*) FROM student" + getFilter(getParameter(args.get(FILTER)));

    }

        

         private String getFilter(String filter)

         {

                   if(filter != null && filter.trim().length() != 0)

                   {

                            return  " where Name like ?";

                   }

                   else

                   {

                            return "";

                   }

         }

        

         public StudentVO find(BigDecimal pk)

         {

                   Connection c = null;

                   PreparedStatement ps = null;

                   ResultSet rs = null;

                   StudentVO ret = null;

 

                   try

                   {

                            c = getConnection();

                            ps = c.prepareStatement(FIND_STATEMENT);

                            ps.setBigDecimal(1, pk);

                            rs = ps.executeQuery();

                            if (rs.next())

                            {

                                     ret = new StudentVO( pk,rs.getString(2),rs.getString(3),rs.getBigDecimal(4),rs.getString(5),rs.getString(6));

                            }

 

                   }

                   catch (SQLException e)

                   {

                            e.printStackTrace();

                            throw new MessageException("Error quering database! See server log for details!");

                   }

                   finally

                   {

                            try

                            {

                                     rs.close();

                                     ps.close();

                                     c.close();

                            }

                            catch (SQLException e)

                            {

                                     e.printStackTrace();

                            }

                   }

                   return ret;

         }

 

         public List list()

         {

                  return list(new HashMap());

         }

         public List list(Map args)

         {

                   Connection c = null;

                   PreparedStatement ps = null;

                   ResultSet rs = null;

                   StudentVO vo = null;

                   ArrayList ret = new ArrayList();

                   int page = 0;

                   int pageSize = Integer.MAX_VALUE;

                   int[] dim = getPagination(args);

                   if(dim != null)

                   {

                            page = dim[0];

                            pageSize = dim[1];

                   }

                   String order = getParameter(args.get(ORDER_FIELD));

                   String dir = getParameter(args.get(ORDER_DIR));

                   if(COLUMNS.indexOf("|"+order.toLowerCase()+"|") == -1) {

                            order = "";

                            dir = "";

                   }

                   String filter = getParameter(args.get(FILTER));

                   try

                   {

                            c = getConnection();

                            ps = c.prepareStatement(LIST_STATEMENT + getFilter(filter) + getOrder(order, dir),

                                    ResultSet.TYPE_SCROLL_INSENSITIVE,

                                    ResultSet.CONCUR_READ_ONLY);

                           

                            if(filter.trim().length() != 0)

                            {

                                     ps.setString(1, "%"+filter+"%");

                            }

                           

                            rs = ps.executeQuery();

                            if (page != 0)

                            {

                                     rs.absolute(page * pageSize);

                            }

                            int i = 0;

                            while (rs.next() && i < pageSize)

                            {

                                     vo = new StudentVO(rs.getBigDecimal(1),rs.getString(2),rs.getString(3),rs.getBigDecimal(4),rs.getString(5),rs.getString(6));

                                     ret.add(vo);

                                     i++;

                            }

                   }

                   catch (SQLException e)

                   {

                            e.printStackTrace();

                            throw new MessageException("Error quering database! See server log for details!");

                   }

                   finally

                   {

                            try

                            {

                                     rs.close();

                                     ps.close();

                                     c.close();

                            }

                            catch (SQLException e)

                            {

                                     e.printStackTrace();

                            }

                   }

 

                   return ret;

         }

 

         public int delete(StudentVO item)

         {

                   Connection c = null;

                   PreparedStatement ps = null;

                   int res = 0;

 

                   try

                   {

                            c = getConnection();

                            ps = c.prepareStatement(DELETE_STATEMENT);

                            ps.setBigDecimal(1, item.getId());

                            res = ps.executeUpdate();

 

                   }

                   catch (SQLException e)

                   {

                            e.printStackTrace();

                            throw new MessageException("Error deleting item! See server log for details!");

                   }

                   finally

                   {

                            try

                            {

                                     ps.close();

                                     c.close();

                            }

                            catch (SQLException e)

                            {

                                     e.printStackTrace();

                            }

                   }

                   return res;

         }

 

         public int create(StudentVO vo)

         {

                   Connection c = null;

                   PreparedStatement ps = null;

                   int res = 0;

 

                   try

                   {

                            c = getConnection();

                            ps = c.prepareStatement(CREATE_STATEMENT);

                            ps.setString(1, vo.getName());

                            ps.setString(2, vo.getSex());

                            ps.setBigDecimal(3, vo.getAge());

                            ps.setString(4, vo.getAddress());

                            ps.setString(5, vo.getRemark());

                            res = ps.executeUpdate();

                           

                            setUpPKAfterCreate(vo, c);

                   }

                   catch (SQLException e)

                   {

                            e.printStackTrace();

                            throw new MessageException("Error creating item! See server log for details!");

                   }

                   finally

                   {

                            try

                            {

                                     ps.close();

                                     c.close();

                            }

                            catch (SQLException e)

                            {

                                     e.printStackTrace();

                            }

                   }

                   return res;

         }

 

         public int update(StudentVO vo)

         {

                   Connection c = null;

                   PreparedStatement ps = null;

                   int res = 0;

 

                   try

                   {

                            c = getConnection();

                            ps = c.prepareStatement(UPDATE_STATEMENT);

 

                            ps.setString(1, vo.getName());

                            ps.setString(2, vo.getSex());

                            ps.setBigDecimal(3, vo.getAge());

                            ps.setString(4, vo.getAddress());

                            ps.setString(5, vo.getRemark());

                            ps.setBigDecimal(6, vo.getId());

 

                            res = ps.executeUpdate();

 

                   }

                   catch (SQLException e)

                   {

                            e.printStackTrace();

                            throw new MessageException("Error updating item! See server log for details!");

                   }

                   finally

                   {

                            try

                            {

                                     ps.close();

                                     c.close();

                            }

                            catch (SQLException e)

                            {

                                     e.printStackTrace();

                            }

                   }

                   return res;

         }

 

}

StudentVO是一个实现了IRestVO接口的值对象类,代码如下所示。

package com.lcdsstu.dao.dao;

import java.math.BigDecimal;

import java.util.HashMap;

import com.lcdsstu.dao.dao.IRestVO;

public class StudentVO implements IRestVO

{

         private BigDecimal id;

         private String Name;

         private String Sex;

         private BigDecimal age;

         private String Address;

         private String Remark;

         public StudentVO()

         {

         }

         public StudentVO( BigDecimal id, String Name, String Sex, BigDecimal age, String Address, String Remark)

         {

                   this.id = id;

                   this.Name = Name;

                   this.Sex = Sex;

                   this.age = age;

                   this.Address = Address;

                   this.Remark = Remark;

         }

         public BigDecimal getId()

         {

                   return id;

         }

         public void setId(BigDecimal id)

         {

                   this.id = id;

         }

         public void setId(String id)

         {

                   if (id != null)

                   {

                            this.id = new BigDecimal(id);

                   }

         }

        

         public String getName()

         {

                   return Name;

         }

         public void setName(String Name)

         {

                   this.Name = Name;

         }

         public String getSex()

         {

                   return Sex;

         }

         public void setSex(String Sex)

         {

                   this.Sex = Sex;

         }

         public BigDecimal getAge()

         {

                   return age;

         }

         public void setAge(BigDecimal age)

         {

                   this.age = age;

         }

         public void setAge(String age)

         {

                   if (age != null)

                   {

                            this.age = new BigDecimal(age);

                   }

         }

        

         public String getAddress()

         {

                   return Address;

         }

         public void setAddress(String Address)

         {

                   this.Address = Address;

         }

         public String getRemark()

         {

                   return Remark;

         }

         public void setRemark(String Remark)

         {

                   this.Remark = Remark;

         }

         public HashMap getAsMap()

         {

                   HashMap hm = new HashMap();

                   hm.put("id", getId());

                   hm.put("Name", getName());

                   hm.put("Sex", getSex());

                   hm.put("age", getAge());

                   hm.put("Address", getAddress());

                   hm.put("Remark", getRemark());

                   return hm;

         }

 

}

data-management-config.xml文件更新的内容是用于描述服务端代码的配置,以便被客户端的ActionScript代码进行调用。data-management-config.xml文件内容代码如下所示。

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

<service class="flex.data.DataService" id="data-service">

    <adapters>

        <adapter-definition class="flex.data.adapters.ASObjectAdapter" default="true" id="actionscript"/>

        <adapter-definition class="flex.data.adapters.JavaAdapter" id="java-dao"/>

    </adapters>

<destination id="studentJava">

                   <channels>

                            <channel ref="my-rtmp"/>

                   </channels>

                   <adapter ref="java-dao"/>         

                   <properties>

                            <use-transactions>true</use-transactions>

                            <source>com.lcdsstu.dao.dao.StudentAssembler</source>

                            <scope>application</scope>

                            <cache-items>false</cache-items>

                            <metadata>

                                     <identity property="id"/>

                            </metadata>

                            <network>

                                     <session-timeout>0</session-timeout>

                                     <paging enabled="false" pageSize="5"/>

                                     <throttle-inbound max-frequency="500" policy="ERROR"/>

                                     <throttle-outbound max-frequency="500" policy="REPLACE"/>

                            </network>

                   </properties>  

         </destination>

</service>

data-management-config.xml文件中通过声明<destination id="studentJava">指明前端调用的数据服务名称。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值