OA项目介绍
1、 OA可以用在2个处所.
a) 当局 b) 企业
c) 采取OA就是把他们的流程做成一个软件.
2、 需求分析从界面入手,然则写法度榜样别从界面入手.
a) 分析 设计 实践. 3、 Java三件宝
a) 框架 SSH.
b) 模式. 进修的是它的实用范畴. c) 范畴模型. i. 最重要的,当你获取需求今后.须要应用面向对象技巧开辟范畴模型.
4、 按模块进行迭代开辟.
a) 进一步细化需求. b) 用例模式.
c) 分析模式(概念模型) 最重要的. d) 设计模式 对分析模式的细化.
e) 实现. 所有的设计模式都是和实现相干的. f) 测试, 5、 分析.
a) 需求分析. i. 它们必须是精确的. ii. 它们必须是可行的. iii. 它们必须是对项目来说是必弗成少的. iv. 它们必须是被标明优先次序的. v. 它们必须是不暧昧的. vi. 它们必须是可以或许ioubei证实. vii. 一旦需求确认今后,没有写的不克不及做. b) 需求分析具体过程(切入点). i. 懂得客户. ii. 懂得营业. iii. 懂得行业. iv. 懂得同业产品. v. 这些工作在与客户正式开端沟通之前就尽量懂得,如许在与客户交换时有效的
削减在营业上的陌生感,会尽快使客户对项目团队产生须要的信赖.
6、 OA体系的需求.
a) 根本模块 i. 组织架构. ii. 权限治理. b) 核心模块. i. 公函流转.
1. 例如报销:若何把一个数据,转给别的一小我.
c) 其他次要模块.
7、 流程定义:就是例如以前没有告假单流程,本身可以加一个安排到项目.
a) DOJO书. i. 是一个javascript的树.
8、 hibernate.hbm2ddl.auto.create. hibernate.hbm2ddl.auto.update
a) 当你创建SessionFactory实例时,它会根据你的映射文件导出到数据库里.
OA 第二天.
1、 若何定义接口?
a) 重要看客户端的须要.例如:dao层的客户端就是manager层. 2、 若何读懂需求?
a) 懂得需求中的概念.
b) 例如:考勤 你得懂得过程,还有什么报表,现有的软件. 3、 组织机构.
a) 本能机能型组织架构. 大年夜公司,分部分.
公司 销售部开发部 人员部 张三b)
李四开发小组1
Organization1+children*1+parent*Personi.
念模型图.
c) 集权型组织架构 中小型公司,一级管一级,不分部分
这个图就是上面的概
Person+parenti.
1+children*
d) 混淆型组织架构 前面两种混淆起来.人下面有部分,部分下面有人,在某种情况
可以把他们俩算作一个概念,进行泛化(持续)
party+children*+parent1PersonOrganization
i.
e) 网状组织架构 也叫矩阵型,平日用于大年夜型企业. i. 接洽关系会有一个时光的.
ii.
iii. iiii.
多对多一般会拆分成两个多对一的接洽关系,应当把中心的接洽关系表抽象出来进行扩大.
1. 中心表对应本来表肯定是多对一,中心像两边任何一边看都是多对一.可以
在中心表加一些本身的须要的属性.
规矩就是它们类型的多对多,也就是两个多对一.例如:
1. 部 局 处 科. ,,他们分其余父亲都是上一级,子都是下一级.
PartyStructType**11PartyTypePartyStructType和PartyType是知识级PartyStruct**+parent1+child1MPartyPartyStruct和Party是操作级MTimeLimitPersonOrganization
按照某种职责来建立partyType,
4、 合适的uml用例一般最好是少于10步和10步阁下的,才是一个粒度的,合适的用例
a) 用例其实也就是功能性的需求.
b) 要编写用例文本,介入者的动作,体系的响应,重要路径和扩大路径. c) 重要路径. i. 写重要的内容. d) 扩大点 i. 写一些异常信息,例如删除掉败,撤消操作之类的. e) 弥补解释 i. 主如果用来做弥补的,例如添加机构时,ID生成的规矩之类.
5、 在ssh里避免一个Action办法里,和营业逻辑组件进行2次交互,不然会造成事物不一致. 6、 画次序图实际上就是在实现,画的时刻是根据用例图文本里的重要路径
OA 第三天.
1、 开辟流程 做一点测一点,起首根据范畴模型对象创建实体.因为它是被依附的.采取自
底向上的实现.
2、 Hibernate为什么要强迫定义inverse呢?
a) 只有如许,才能强迫包管在多的一端保护,假如强迫在一的一端保护,则无法运行. b) 最重要的是在更新的时刻,假如不设置inverse,在保护的时刻会更麻烦. i. 照样 学生 –--- 班级,当你更新一个班级时,假如班级里只是从ActionForm里
获取数据,然则更新了今后此时学生集合是空的,它会去掉落学生与班级的所有接洽关系关系.
3、 切记Hibernate的get加载的是一个代理对象.
4、 在测试单位类中,可以持续测试父类.在setup中打开session,避免session Closed异常.因为
在测试类中,并不克不及应用OpenSessionInView.
a) 持续父类 AbstractTransactionalSpringContextTests i. 须要实现getConfigLocations. ii. 注入营业逻辑层对象,它会主动注入,根据类型. b) 参加spring的spring-mock.jar包.
c) 当一个办法调用完,它会主动回滚事物,和封闭Session.
假如想提交事物的话,调用setComplete().
5、 状况图最好用在页面的流程分析.
a) 每一个状况代表一个页面,也就代表调用了一个action,因为在struts中,进入一个页
面都是要经由struts.
6、 切记struts ActionMappings里的scope 是代表的是actionform存储的范围.
OA 第四天.
1、 Struts设备文件里Action的attribute属性是用来给Form从新定名的,在jsp页面就可以用
从新定名的名字来取值.
2、 没事别从form取值,在存在request里,鄙人一个页面直接从form取就行了 3、 切记struts刷新请求会反复提交.
a) 因为当你请求一个Action时,它会把你的请求做为此页面的url,你假如刷新,它不会
加载页面,会反复提交你的请求.
b) 要切记Action也可以本身顶一个Forward,用来跳转. 4、 模态窗口.
a) 当应用模态窗口时,此时只能对子窗口做操作,不克不及对父窗口操作. b) window.Locale…xxxx代表父窗口. 5、 一般的删除操作.
a) 一般的是打开一个新窗口,可以避免了任何问题,例如传参数,刷新反复提交之类的
问题..
6、Struts局部异常设备会根据input的路径来转发.
OA 第五天.
1、 懂得taglib-pager分页标签.
a) 主如果帮你生成主页下一页的连接的.
b) 当生成今后它会把值存在page范围,名字是${pageUrl}
c) 假如想应用页码变中心的那种,例如goolge,可以应用pager标签里的pages,生成之后
的Url就存在page属性的pageNumber里.
d) 当前页数也存在pageNumber里,会有冲突,我们可以应用pager的export来给它重定
名.例如export=”currentPageNumber=pageNumber”,如许之后,我们也可以实现goolge的分页时刻不克不及连接到本页,直接断定currentPageNumber和上面的pageNumber(中心显示本页).
e) 假如须要设置参数,可以直接应用pg:param标签,可以直接name=parentId,假如不设
置值,它会从request里获取parenjtId. f) 具体具体拜见 – taglib-pager应用解释.txt 2、 分页 –>
a) 须要传一个当前页数,并且须要一个每页显示的大年夜小. b) 查询完查询的是一页的数据.
3、 数据的封装,抽象 找出雷同的,反复的过程,把须要的参数之类的器械全部定义成办法
的参数.
4、 截取字符串 包头不包尾.,截取时不算最后一个,得算上第一个.
5、 在J2EE中,要推敲多线程影响变量的问题,假如要共享变量,尽量应用ThreadLocal,不会有
线程安然的问题.
6、 假如要把Object转换成整形时,切切不要直接写int I = (Intger)Object. 如许有时刻会抛异
常,因为你起首把一个Object转换成Integer.没任何缺点,然则当Integer转换成整形时,JDK会主动解包,所以会掉足 NullPointException. 7、 Xdoclet 可以解决手工编写映射文件.
OA 第六天.
1、 权限控制三元素:主体(who)、 资本(What)、 操作(How)、
模块文件、目录数据库、记录类的方法<<主体(Principal)>><<资源(Resouce)>>Who**What*用户地点组角色时间*<<操作(Operation)>>HowC/R/U/D发布2、 RBAC模式. Role Base Access Controll.
a) RBAC-0. 永远都不许可直接把权限付与给用户.
i.
b) RBAC-1.在RBAC-0上做的扩大.
i.
c) RBAC-2,也是在RBAC-0长进行了扩大.在进行用户和角色之间建立一种束缚. i. 例:角色根别的一个角色授权有冲突,根据某种规矩,不许可这个角色分派给这
个用户.
ii.
d) RBAC3 = RBAC1 + RBAC2.
i.
3、 权限的设计.
a)
b) 因为ALC表被读取的频率很大年夜,所以要放在Hibernate缓存里,然则假如它里面
变量是对象的话.那么里面对应的对象也得存进缓存里.所以如今给它改变一下, c) 主体类型可以取角色和用户、
d) aclState.如安在ACL扩大(操作/c/r/u/d)呢?不要采取一个字段代表一个操作,我们可
以应用一个整形,后四位标识c/r/u/d,一个整形是32位,只有0和1,0代表不许可,1代表许可.
e) aclTriState.表示当我零丁给用户授予权限时,此时用户的角色是否有效.我们也采取
一个整形, 这个额外状况位用-1表示针对用户的授权无效,0表示有效.一个整形32位,只有0和1,1表示不许可,0表示许可
OA第七天.
1、 懂得UniqueResult办法的感化,假如查询不到对象,就返回null,假如查询到两条,则抛出异
常.
2、 必定要留意义务分派模式(GRAPS).
3、 假如一个处所要用到常量,写逝世,最好定义一个变量,免的今后换的时刻要换很多多少
处.
4、 IF ELSE断定哪个有个原则,要尽快返回,哪个先返回,就断定它,例如acl不等于null提前
返回,我们就IF (acl != null)
5、 切记操作属性,或者读取时,不该该改变属性的状况
6、 MAP的存储方法,假如key一样,后面的会把前面覆盖掉落. 7、 获取用户拥有的权限读取查找方法.
a) 从低到高的级别查询,然后在查询用户是否持续了角色,
b) 因为我们采取的是map 存储方法,所以必须从低到高,例如1许可,2不是许可,2比一
高,先查1的,放进map,在查2一看不许可,我们可以急速放到map里覆盖到1.
8、 切记ACL表里可以存储用户和角色.
OA第八天.
1、 应用document.location.href=”url”,完了今后会主动刷新
a) 例如:我设置分页的主动参加每页显示行数,我直接可以应用这个url传输到action
查询全部,页数得显示在第一页,当它查询完返回到首页会主动刷新,意思是还会回来到当前页面,我们就没须要传输一些数据.
2、 xml解析,dom方法支撑比较小的文件,而SaxReader支撑比较大年夜的文件. 3、 在AJAX中,一般返回的数据就两种,数组或者JSON.
a) 下面4的介绍就是对JSON数据的描述,在JAVA中,如许拜访就是MAP. 4、 在javascript中若何拜访名值对呢
a) 例:var v1 = {\"username\":\"张三\"} ;
b) 拜访方法为v1[\"username\"] 或 v1.password
5、 假如要在javascript中调用一个bean的办法时,办法参数要接收的是一个对象的话,那我们
得在dwr.xml中采取convert标签进行类型转换.
6、 DWR集成spring,以前careator写new 如今直接写spring即可
OA 第九天.
1、 所有持续DispatchAction的类,都邑履行一个execute办法,因为DispatchAction其实是持
续Action,所以会履行Action的Excute
OA 第十天.
1、 JBPM(对象),工作流.
a) 什么是工作流 ?只是一个工作流程的实现. 2、 在项目中,不克不及硬编码营业逻辑放办法.
a) 难以保护.
3、 工作流治理体系构成.
a) 工作流设计器 i. 应用ur设计器,设计流程,应用jbpm的设计器. b) 流程的操作. i. 可以根据工作流定义,然后对它做任何操作. c) 工作流客户端法度榜样. i. 调用工作流的哪些法度榜样 本项目中当然是OA了. d) 流程监控. i. 看看如今有若干流程在流转,流动的一些信息. e) 表单设计器、与表单的持续、与应用法度榜样的集成 i. 这些都是属于额外的功能. ii. 表单设计器,例如:只有一个报销流程,还想要一个告假流程,不想改器械,只能在
已有的情况下,设计出告假流程,这就是表单设计器,可以设计新的表单,更改本来的表单.
4、 WFMC是工作流的一个标准. 5、 核心调剂算法
a) FSM(有限状况机),经由过程调用一些函数,来流转.
b) PetriNet,异常有名的调剂算法,它的核心概念就在于一个令牌—ToKen.,指向拥有一
个节点的引用. 6、 JBPM
a) 什么是BPM? b) JBPM的架构.
i. ii.
在图里,履行办事面对的是某某某的告假单,例如:张三的告假单,李四的告假单.
7、 JBPM
a) 在oa体系中,JBPM是实现公函流转的基本。JBPM的流程定义说话是JPDL。JBPM
的流程定义包含如下概念: i. 肇端节点 – start state,必须包含肇端节点 ii. 停止节点 – end state iii. 节点 – node
1. 义务节点 – 可以分派义务的节点,在task-node中,可以创建task,并
assignment到不合的actor-id 2. fork – 分支节点 3. join – 结合节点
iv. 流向(或转换) - transition 8、 UML里同步杆是成对出现的.
9、 会定义一个属性资本线程实例变量的容器.
a) 从你定义的类里取. 10、 所有流程实例变量(比如张三的告假单,这个流程实例实际中 :告假者张三、告假数
是5天、),经由过程ContextInstance来存放. 11、 Token.
a) 当我们创建流程实例的时刻,它会主动创建一个Token,ToKen最开端指向的是起点,
履行今后实际上就是把Token的指向让它指向下一个节点.
12、 总结 :
在创建一个ProcessInstance对象的时刻,会同时创建一个rootToken对象,这个对象一开端是指向StartState,Token老是会根一个节点相接洽关系,经由过程调用Token的Signal办法,可以使得这个指向产生变更(及指向下一个节点). 13、 这个就是Token在树形中履行的过程,subtoken1和subtoken2都是Token的子
14、 假如一个流程已经停止,则不克不及对它做任何操作. 等待
状况. 15、 xmlns=\"urn:jbpm.org:jpdl-3.2\有时刻采取这个会出现必定的提示. 16、 流程在运行过程中都有:
a) 流程的进入 。
17、 凡是Action都得必须持续ActionHandler,调用它的execute办法. 18、 可以定义本身的变量,在定义文件里可以直接注入. 19、 Junit最重要的功能是主动化测试,它是可以完成这个功能的.主动化测试就是只需
要一个敕令,它会本身去测试,完了给我们供给一份测试申报.
OA 第十一天.
1、 调用TaskInstance.end办法将它的状况(isOpen)改成false.然后主动调用Token的signal().
OA 第十二天.
1、 Spring-modules.zip包是专门针对spring不支撑的框架的持续.
a) 先把JBPM的映射文件里的mapping全部copy过来,如许在后续会出问题, 因为如
今的设备文件是应用ant主动生成的.所以我们如今应用归并功能,把两个映射文件
归并起来.
b) 若何归并呢?应用老李牌修改版的xdoclet. i. 在原有的ant.xml,找到生成Hibernate设备文件标签,参加属性mergecfgxml=”
你的别的一个设备文件地址”
c) 若何解决冲突呢?两个实体类的名字是一样. i. 参加auto-import=”false” ii. 它根我们的查询有关,我们查询应用from User,假如有两个,它就不知道了,所以
我们得更改查询语句,参加全局路径(包名+类名).
d) 集成spring和jbpm时,应用spring-modules-jbpm31.jar.
OA 第十四天.
1、 切记Hibernate的list映射规矩,你把它假如当成一个实体类,就得应用one-to-many,假如当
成一个组件就应用compsite-element.
2、 轮回删除list里空数据时,最好应用迭代删除,因为假如你应用list的删除的话,那么size
就会少1,所以如许会造成数据的损掉,或拜访不到.
3、 FreeMarker须要定义模板,不消设备在容器里,可以解决与容器(tomcat)的依附.
a) freeMarker须要定义模板,文件扩大名一般采取ftl
4、 FreeMarker输出变量时,假如变量为null时,则会把异常信息输出到我们的目标地.
a) 当然,我们可以应用一个特点来忽视异常.
cfg.setTemplateExceptionHandler(false);
b) 假如我们在freemarket模块中须要填充一个集合数据的话,我们可以应用<# list> 5、 假如ActionForm里设置了一个Map集合,我们假如要想给Map里存储数据的话.
a) 页面的name就应当设置为map(你的页面name ),这种主如果针对动态表单的. b) 假如是list的话,就是list[你的页面name].
6、 有时刻if,else太多的话,细心不雅察实现,能采取开辟技能的,最好采取.
a) 最好得记得 商定优胜设备. 7、 CopyProperties和CopyProperty的差别
a) CopyProperty三个参数.(目标对象,属性名称,值) i. 例:(“Person”,”age”,18);
b) 在这里,只要把值设置到目标对象里,她会主动调用struts的convert(转换器).