十一、实现页面静态化业务场景
我们在做某项目时,涉及到程序访问的性能问题,这时候我们想到可以通过静态化来提高用户访问时候的性能,所以我们就采用了freemarker模板引擎,考虑到页面也是要有动态的变化的,所以我们采用spring定时器在每天晚上2点钟的时候定时再次生成html静态页面,考虑发布时候的性能问题,我们又采取线程池技术,让多个线程同时发布,从而缩减发布时间。
十二、servlet线程安全描述
servlet是单列的,对于所有请求都使用一个实例,所以如果有全局变量被多
线程使用的时候,就会出现线程安全问题。
解决这个问题有三种方案:
1.实现singleThreadModel接口,这样对于每次请求都会创建一个新的servlet实例,这样就会消耗服务端内存,降低性能,但是这个接口已经过时,不推荐使用。
2.可以通过加锁(synchroniezd关键字)来避免线程安全问题。这个时候虽然还是单列,但是对于多线程的访问,每次只能有一个请求进行方法体内执行,只有执行完毕后,其他线程才允许访问,降低吞吐量。
3.避免使用全局变量,使用局部变量可以避免线程安全问题,强烈推荐使用此方法来解决servlet线程安全的问题。
十三、(jbpm4)工作流引擎描述:
JPBM是JBOSS旗下的一个开源的基于hibernate的工作流引擎。工作流就是在日常生活中,我们一些常见的如请假流程、采购流程、入职流程,通俗的来讲就是一些在现实生活中的流程以信息化以程序的方式实现。
一个工作流首先需要进行流程定义,流程定义是由节点和跳转组成的,节点又可以称为环节、活动节点、活动环节,并且节点也可以分为两大类型:人工节点和自动节点,人工节点有start开始节点、end结束节点、task任务节点,自动节点有decision判断节点、fork分支节点、join聚合节点和state状态节点,并且一个流程有且只有一个开始节点,但可以有多个结束节点。
流程定义是静止的,它在运行状态时会转换成流程实例,一个流程定义可以对应多个流程实例。流程运行后,会产生两个文件,*.jdpl.xml文件和*.png图片文件,也会生成18张数据库表,常用且核心的表有JBPM4_LOB 存储表,主要存储xml文件和png图片、JBPM4_TASK 任务表、JBPM4_EXECUTION 流程实例表、JBPM4_VARIABLE变量表。
图形化的灵活定制(主动说)
可以根据需求进行流程图的改变的,即定义的流程图是可以根据需要改变的,而不是死的。
可以进行图形化的监控(主动说)
输出图片
获取活动节点的坐标
进行叠加
判断节点:(主动说,也可以了解)
实现implements DecisionHandler接口并重写decide方法,
返回的字符串要和xml中配置的transition的name保持一致。
分支判定节点
JBPM有五大核心类:
ProcessEngine:主要获取各种的Service
RepositoryService:主要发布流程定义
ExecutionService:主要操作流程实例
TaskService:主要操作人工服务
HistoryService:主要操作历史服务。
核心方法:
读取jbpm定义的文件生成zip包存到lob表中:createDeployment()
获取流程定义列表:createProcessDefinitionQuery
根据定义的key或id来启动流程实例:startProcessInstanceByKey(id)
获取待办任务列表:findPersonalTasks(userName)
完成指定任务列表:completeTask(*.getActivityId())
获取历史任务列表:createHistoryTaskQuery()
获取流程实例的ID:task.getExecutionId()
(了解的表)
JBPM4_HIST_ACTINST 流程活动(节点) 实例表
JBPM4_HIST_DETAIL 流程历史详细表
JBPM4_HIST_PROCINST 流程实例历史表
JBPM4_HIST_TASK 流程任务实例历史表
JBPM4_HIST_VAR 流程变量( 上下文) 历史表
十四、JPBM业务场景
首先进行请假的流程定义,我们流程的定义是(员工提交请假单---》经理审批---》总监审批---》总经理审批---》结束),通过repositoryService将其发布部署到jbpm4_lob表中,
之后获取流程定义列表,选中请假的流程定义,员工开始进行请假单的填写,保存并通过executionService开启流程实例,然后用taskService获取经理的待办任务列表,选中待办任务,进行审批,通过调用taskService.completeTask()进入到总监审批环节,然后用总监进行登录,同样获取待办任务列表,然后调用taskService.completeTask()进入总经理审批环节,总经理审批之后,结束流程。在这个过程中我们还可以根据historyService查看当前登录人已办的任务列表。
十五、Ant描述
Ant是apache旗下的对项目进行自动打包、编译、部署的构建工具,他主要具有 轻量级并且跨平台的特性,而且基于jvm,默认文件名为build.xml
Ant主要的标签:
Project 根标签,
target 任务标签,
property 属性标签,自定义键/值 供多次使用,
java 执行编译后的java文件
javac 编译java文件
war 打成war包
其它标签:copy,delete,mkdir,move,echo等。