目录

前言

本文档主要介绍了如何基于轻量MAserver快速构建移动应用,以及MAServer开发中的一些特点,最后列举了一些典型应用。目的是尽可能地让大家在使用MAServer的时候更加方便。

基于MAServer创建应用

iuap mobile

在基于MAServer创建应用之前,我们先来认识一下应用设计器。

iuap mobile主要用来设计APP(包括android和ios的应用)和服务器端代码,并进行调试运行。

创建移动应用

新建一个移动项目,并进行设计,具体可见移动应用的相关文档

一个移动项目对应的就是一个app,编译后直接可在移动设备上运行,当然本文档的重点并不是在应用的设计,而是后台服务端业务的处理上。

该应用编译运行后,可启动MAServer,可以进行后台代码的调试。此处的Ma Server为集成到UAP Mobile的轻量级Server,可以通过这种方式启动,较为方便快捷。

MA Server使用

本地服务

在public文件夹下,用户可以通过继承com.yonyou.um.webmvc.controller.UMController来实现自己的逻辑控制类,UMController为统一的MA调用服务的转接类,而用户开发的类需要在设备端传入的数据中指定。

在UMController中可以获得request、response、Session信息, 设备传入的数据以及相关的结果处理方式。

  1. /**
  2. *获得设备端设置的参数
  3. */
  4. public Object getParaFromClient(Stringname);
  5. /**
  6. *getthevalueofthename,fromtheuserdatawhichisajson
  7. */
  8. public Object getClientData(Stringname);
  9. /**
  10. *获得HttpServletRequest
  11. */
  12. public HttpServletRequest getRequest();
  13. /**
  14. *获得HttpServletResponse
  15. */
  16. public HttpServletResponse getResponse();
  17. /**
  18. *渲染json数据,将object的数据转化为json并返回到设备端
  19. */
  20. public voidrenderJson(Objectobject);
  21. /**
  22. *ReturnHttpSession.
  23. */
  24. public HttpSession getSession();
  25. /**
  26. *getalltheparametersfromtheclient
  27. */
  28. public JSONObject getClientParas();
  29. /**
  30. *putvaluetothecurrentthread
  31. */
  32. public static voidsetUserData(JSONObjectuserdata);

日志服务

MA提供了相关的日志服务,使用的是log4j技术来实现,配置文件的位置为iuap mobile的安装目录下MOBump_serverconfiglog4j.properties文件,配置文件的内容与普通的log4j配置信息相同。调整日志级别的同Log4j的一般配置文件相同——log4j.logger.umserver= DEBUG, umserver

目前提供了umserver.log,使用方式为:

ILogger logger = UMLogger.getLogger(“umserver”);

支持的有debug、all、info、error、warn级别,日志文件为UAP Mobile 的安装目录下的MOBump_serverlogumsever.log。ILogger主要的方法如下:

  1. public void debug(String message);
  2. public void debug(String message, Throwable t);
  3. public void info(String message);
  4. public void info(String message, Throwable t);
  5. public void warn(String message);
  6. public void warn(String message, Throwable t);
  7. public void error(String message);
  8. public void error(String message, Throwable t);
  9. public void fatal(String message);
  10. public void fatal(String message, Throwable t);
  11. public boolean isDebugEnabled();
  12. public boolean isInfoEnabled();
  13. public boolean isWarnEnabled();
  14. public boolean isErrorEnabled();
  15. public boolean isFatalEnabled();

异常处理机制

目前提供了以下几个异常类:

  1. com.yonyou.um.common.exception.UMPHanderException(抽象类)
  2. com.yonyou.um.webmvc.exception.GatewayException(网关异常)
  3. com.yonyou.um.web.exception.UMPDispatcherException(服务分发异常)
  4. com.yonyou.um.plugin.exception.PluginException(插件异常)

当然用户可以增加自己的异常类来处理相关的业务操作,对于异常类的处理,我们使用com.yonyou.um.web.exception.DefaultExceptionResolver

过滤器处理机制

这里所说的过滤器Filter机制,是指允许用户增加filter类来对数据进行过滤。目前主要分为执行前过滤和执行后过滤,具体的配置文件如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <mafilter>
  3. <request-filter>
  4. <filter id="filter1" class="com.yonyou.uap.um.filter.ServiceFirst Filter" />
  5. <filter id="filter2" class="com.yonyou.uap.um.filter.ServiceSecon dFilter" />
  6. </request-filter>
  7. <response-filter>
  8. <filter id="filter3"class="com.yonyou.uap.um.filter.ServiceFirstFil ter" />
  9. <filter id="filter4"class="com.yonyou.uap.um.filter.ServiceSecondFi lter" />
  10. </response-filter>
  11. </mafilter>

1、request-filter表示的是在执行之前进行校验,参数为HttpServletRequest和传入的请求数据JSONObject。

使用request_filter需要继承类com.yonyou.um.webmvc.filter.MARequestFilter,并实现其中doFilter(HttpServletRequest request,JSONObject data)方法,request则为发送的请求,data为用户出入的数据。

2、response-filter表示的是在结果返回之后进行过滤处理,参数为HttpServletResponse和返回的结果值Object。

使用request_filter需要继承类com.yonyou.um.webmvc.filter. MAResponseFilter,并实现其中doFilter(HttpServletResponse response,Object retObject)方法,response则为返回的相应,retObject为用户过滤后的数据。

持久化操作

目前持久化操作分为两种,一种是使用纯java的小型数据库HSql,另一种是使用普通的数据库,下面一一介绍

HSql

1、通过脚本启动hsql

MAserver内置了一个HSQL,其数据库为test。路径为WEB-INF/hsqldb,其中的data文件夹存储的就是数据,而bin目录下可以通过runServer.bat来打开HSql,你运行项目的时候会自动打开该服务,所以基本无需使用这个bat文件。

打开数据源管理器,必须先打开HSql服务(手动点击bat文件或者运行MAServer,端口号都为9001),打开的界面如下

Type选择Enginee Server

URL为jdbc:hsqldb:hsql://localhost:9001/test

User 为SA,密码为空,管理界面如下:

2、在代码中控制HSql

这个比较简单,直接启动MAServer即启动了HSql,切记(不要同时执行bat文件和项目,会有端口号冲突的问题)。在代码中可以使用类似的方式来进行数据库查询操作,Hsql为默认的数据源,无需进行安装配置等,具体的使用方式为:

  1. Connection con = null;
  2. Statement stmt = null;
  3. try {
  4. con = DBFactroy.getConnection();
  5. stmt = con.createStatement();//使用jdbc执行相应的sql脚本及结果处理
  6. } catch (SQLException e1) {
  7. e1.printStackTrace();
  8. } catch (ClassNotFoundException e) {
  9. e.printStackTrace();
  10. } finally{
  11. if(stmt != null){
  12. try {
  13. stmt.close();
  14. } catch (SQLException e) {}
  15. }
  16. if(con != null){
  17. try {
  18. con.close();
  19. } catch (SQLException e) {}
  20. }
  21. }

只需要从DBFacotory.getConnection()方法来获得connection就可以进行相应的处理,但记得要关闭流。

MAServer持久化

MAServer提供持久化操作,可将数据保存到本地的数据库。持久化操作大量参考了开源框架JFinal,具体操作如下

1、配置数据源,在MOBump_serverconfigdbConfig.properties中进行配置。

  1. jdbcUrl=jdbc:postgresql://localhost:5432/uapdb
  2. user=postgres
  3. password=1
  4. driverClass=org.postgresql.Driver
  5. maxPoolSize=100
  6. minPoolSize=10
  7. initialPoolSize=10
  8. maxIdleTime=1800
  9. acquireIncrement=3

主要配置的内容为jdbcUrl,user和password以及driverClass

2、创建一个数据表

  1. CREATE TABLE umserver_demo1
  2. (
  3. username character varying(200),
  4. password character varying(200),
  5. pk_demo1 character varying(200) NOT NULL,
  6. CONSTRAINT umserver_demo1_pkey PRIMARY KEY (pk_demo1)
  7. )

3、在代码中进行保存数据

新建一个vo,需要继承类SuperVO

  1. @TableName(tableName = "umserver_demo1", primaryKey = "pk_demo1")
  2. public class DemoVO extends SuperVO<DemoVO> {
  3. private static final long serialVersionUID = 3070908062018266184L;
  4. private String userName;
  5. private String password;
  6. private String pk_demo1;
  7. public String getUserName() {
  8. return userName;
  9. }
  10. public void setUserName(String userName) {
  11. this.userName = userName;
  12. }
  13. public String getPassword() {
  14. return password;
  15. }
  16. public void setPassword(String password) {
  17. this.password = password;
  18. }
  19. public String getPk_demo1() {
  20. return pk_demo1;
  21. }
  22. public void setPk_demo1(String pk_demo1) {
  23. this.pk_demo1 = pk_demo1;
  24. }
  25. }

@TableName的注解表明了数据表和主键值,tablename表示表名,primarykey表示主键,目前仅支持单主键的操作。使用为,

  1. DemoVOvo=newDemoVO();
  2. vo.set("username","wangxmn");
  3. vo.set("password","123456");
  4. vo.set("pk_demo1","111111");
  5. vo.save();//保存vo
  6. //删除pk值为111111的vo
  7. DemoVO.dao.deleteById(111111);
  8. //查询id值为25的User将其name属性改为James并更新到数据库
  9. DemoVO.dao.findById(111111).set("username","test").update();
  10. //查询id值为25的user,且仅仅取name与age两个字段的值
  11. Useruser=User.dao.findById(111111,"username,password");
  12. //执行sql语句
  13. List<DemoVO>vos=DemoVO.dao.find("select*fromumserver_demo1");

父类SuperVO中还包含其它的一些持久化以及查询方法,如delete(),deleteById()等等

Tomcat

当然,MAServer不仅可以在UAP Mobile中运行,也可以配置在tomcat等server中运行,只要将自己的代码类打成jar包,放在tomcatwebapps umserverWEB-INFlib下即可,其中umserver为我们的MAServer。可在附件中看到已经配置好的MAserver的Tomcat。

文档更新时间: 2018-01-16 10:10