目录
前言
本文档主要介绍了如何基于轻量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信息, 设备传入的数据以及相关的结果处理方式。
/**
*获得设备端设置的参数
*/
public Object getParaFromClient(Stringname);
/**
*getthevalueofthename,fromtheuserdatawhichisajson
*/
public Object getClientData(Stringname);
/**
*获得HttpServletRequest
*/
public HttpServletRequest getRequest();
/**
*获得HttpServletResponse
*/
public HttpServletResponse getResponse();
/**
*渲染json数据,将object的数据转化为json并返回到设备端
*/
public voidrenderJson(Objectobject);
/**
*ReturnHttpSession.
*/
public HttpSession getSession();
/**
*getalltheparametersfromtheclient
*/
public JSONObject getClientParas();
/**
*putvaluetothecurrentthread
*/
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主要的方法如下:
public void debug(String message);
public void debug(String message, Throwable t);
public void info(String message);
public void info(String message, Throwable t);
public void warn(String message);
public void warn(String message, Throwable t);
public void error(String message);
public void error(String message, Throwable t);
public void fatal(String message);
public void fatal(String message, Throwable t);
public boolean isDebugEnabled();
public boolean isInfoEnabled();
public boolean isWarnEnabled();
public boolean isErrorEnabled();
public boolean isFatalEnabled();
异常处理机制
目前提供了以下几个异常类:
com.yonyou.um.common.exception.UMPHanderException(抽象类)
com.yonyou.um.webmvc.exception.GatewayException(网关异常)
com.yonyou.um.web.exception.UMPDispatcherException(服务分发异常)
com.yonyou.um.plugin.exception.PluginException(插件异常)
当然用户可以增加自己的异常类来处理相关的业务操作,对于异常类的处理,我们使用com.yonyou.um.web.exception.DefaultExceptionResolver
过滤器处理机制
这里所说的过滤器Filter机制,是指允许用户增加filter类来对数据进行过滤。目前主要分为执行前过滤和执行后过滤,具体的配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<mafilter>
<request-filter>
<filter id="filter1" class="com.yonyou.uap.um.filter.ServiceFirst Filter" />
<filter id="filter2" class="com.yonyou.uap.um.filter.ServiceSecon dFilter" />
</request-filter>
<response-filter>
<filter id="filter3"class="com.yonyou.uap.um.filter.ServiceFirstFil ter" />
<filter id="filter4"class="com.yonyou.uap.um.filter.ServiceSecondFi lter" />
</response-filter>
</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为默认的数据源,无需进行安装配置等,具体的使用方式为:
Connection con = null;
Statement stmt = null;
try {
con = DBFactroy.getConnection();
stmt = con.createStatement();//使用jdbc执行相应的sql脚本及结果处理
} catch (SQLException e1) {
e1.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally{
if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {}
}
if(con != null){
try {
con.close();
} catch (SQLException e) {}
}
}
只需要从DBFacotory.getConnection()方法来获得connection就可以进行相应的处理,但记得要关闭流。
MAServer持久化
MAServer提供持久化操作,可将数据保存到本地的数据库。持久化操作大量参考了开源框架JFinal,具体操作如下
1、配置数据源,在MOBump_serverconfigdbConfig.properties中进行配置。
jdbcUrl=jdbc:postgresql://localhost:5432/uapdb
user=postgres
password=1
driverClass=org.postgresql.Driver
maxPoolSize=100
minPoolSize=10
initialPoolSize=10
maxIdleTime=1800
acquireIncrement=3
主要配置的内容为jdbcUrl,user和password以及driverClass
2、创建一个数据表
CREATE TABLE umserver_demo1
(
username character varying(200),
password character varying(200),
pk_demo1 character varying(200) NOT NULL,
CONSTRAINT umserver_demo1_pkey PRIMARY KEY (pk_demo1)
)
3、在代码中进行保存数据
新建一个vo,需要继承类SuperVO
@TableName(tableName = "umserver_demo1", primaryKey = "pk_demo1")
public class DemoVO extends SuperVO<DemoVO> {
private static final long serialVersionUID = 3070908062018266184L;
private String userName;
private String password;
private String pk_demo1;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPk_demo1() {
return pk_demo1;
}
public void setPk_demo1(String pk_demo1) {
this.pk_demo1 = pk_demo1;
}
}
@TableName的注解表明了数据表和主键值,tablename表示表名,primarykey表示主键,目前仅支持单主键的操作。使用为,
DemoVOvo=newDemoVO();
vo.set("username","wangxmn");
vo.set("password","123456");
vo.set("pk_demo1","111111");
vo.save();//保存vo
//删除pk值为111111的vo
DemoVO.dao.deleteById(111111);
//查询id值为25的User将其name属性改为James并更新到数据库
DemoVO.dao.findById(111111).set("username","test").update();
//查询id值为25的user,且仅仅取name与age两个字段的值
Useruser=User.dao.findById(111111,"username,password");
//执行sql语句
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。