本人已将openjweb平台共享版本的工程和开发视频发布到
http://code.google.com/p/openjweb/
欢迎大家下载试用,并留下宝贵意见.
作者qq:29803446
1.1什么是OpenJWeb?
OpenJWeb是一款基于java开源技术实现的Java Web应用快速开发平台产品。此产品主要解决以下几个问题: (1) 在企业应用开发中,组织结构,权限,功能菜单管理等基础模块,因为没有进行良好的设计,导致在不同的项目中不能直接重用,还要做大量修改才能在新的项目中使用。 (2) 对于单表,主明细表类的增删改查,由于开发模式相似,但由于没有代码、页面生成器,导致程序员即使开发一个相似的功能,也要花大量的时间进行编码和调试。开发效率非常低。开发人员经常因为查找一个BUG花费大量时间调试,调试完才发现不是有的地方在复制代码的过程中漏改了,就是有的地方大小写拼写错误等等。 (3) 在国内,大量的公司,大量的项目开发人员都不可避免地要实现组织结构,权限等基本每个业务系统都必备的基础功能,如果有一个好的开源的平台,大家就不需要在这些基础模块上投入不必要的开发时间,有这样的平台能大大降低社会资源的重复投入。 (4) 当字段校验规则,字段默认值规则发生变化,页面中需要增加一个新的查询条件列,应该不需要开发人员再修改程序代码,这样通过平台实现字段校验器设置,默认值规则设置,增加或减少一个查询字段,就不需要更改程序了。 (5) 新的开发人员加入团队后,稍微加以培训,就会了解应该在什么地方添加业务逻辑,在什么地方增加新的校验类等等,能否在很短的时间内就融入到开发环节中。 (6) 由于开源框架众多,选择什么框架,并将这些框架有机集成起来,然后针对这些框架做出开发平台,没有丰富的Java开发经验是难以完成的。但有了统一的集成好的框架,开发人员不需要再为java产品的选型头疼了(前提是相信我的选择)。 以上几点的最终目的,就是统一规范,减少重复投入,降低开发成本,提高项目利润。同时也会提高Java开发人员的技术水平,大大缩短开发人员成为架构师的所需要的时间。
1.2 OpenJWeb的主要技术框架
OpenJWeb 1.6版本的基础框架是struts2+Spring2.5.6+hibernate3+Spring security2.0,另外还有strut1(部分功能是以前开发的),dwr,fckedit,extjs,图表采用JFreechart,树控件采用dhtmlxTree。另外还集成了JOTM,这个是在tomcat中的JTA,支持跨数据库事务处理。
1.3 OpenJWeb的商业价值浅析
很多软件公司为企业开发应用系统,往往动辄一年甚至更久,如此长的开发实施周期,导致项目还没有实施完,需求已经发生很大变化,所以OpenJWeb从开发模式上采用平台定制+二次开发辅助的模式可大大减少项目的开发工作量,缩短项目的实施周期,甚至后期都可以由用户自己定制业务模块,因而避免了软件公司交付产品后,新的业务需求仍然需要软件公司开发的局面。 应该说,对于越大型的企业应用项目,OpenJWeb节省的成本越显著。这体现在: (1) 一般企业应用都有大量的后台维护模块,而这些模块的开发很多都不可避免地要解决页面JSP文件的开发,分页、排序功能的处理,增删改查功能的实现,数据库建表,以及页面中涉及到代码-名称列表的下拉窗口的检索等等很多开发内容,如果没有一个平台工具提供快速开发支持的话,一个象简单的客户基本信息维护这样的功能至少也得两天的时间才能完成,而使用平台工具开发的话,只需要十几分钟的定制的时间就可以轻松搞定。两天和十几分钟的差异绝对不是一个小数目,对于一个百万元的项目而言,使用平台开发至少可以节省20万以上的项目成本。对于软件公司而言,减少20%的项目成本就意味着项目提高20%的利润率!OpenJweb?的快速功能生成器在项目开发中的效率,是传统的软件开发模式是不能匹敌的,只要数据结构设计出来,功能就可以生成出来。在做项目需求原型的时候是极其有帮助的。 (2) OpenJWeb平台对开源社区的框架产品进行了很好的整合,同时也经过了若干大型项目的验证,使用OpenJWeb平台的用户因而可以避免重复选型的风险,也节省了重新搭建应用框架的时间。 (3) 基于平台产品进行应用开发和实施是以后软件行业的主要模式,使用平台产品进行开发可以使软件公司完全摆脱手工作坊式的研发时代,对于大型项目的实施也不再需要靠大量招聘开发人员这种非常耗费成本的实施方式。另外,成熟的平台减少了代码出错率,这也在很大程度上减少了修改错误代码的时间。 (4) 成熟的开发平台具有透明的一致的开发模式和框架,因而项目人员的变动不会对产品的体系架构产品影响。因而很大程度上减少了关键人员离职造成项目失败的风险。 (5) 平台产品已经实现了增删改查生成,组织结构权限,数据权限控制,字段校验器,业务逻辑生成器,默认值设置,代码表管理等很多功能,不需要用户再进行同类功能的重复开发。 (6) 此平台不仅对软件公司,最终用户有很大的应用价值,同时对于Java开发人 员来说是一个很好的学习平台,具有很大的学习价值和培训价值。OpenJWeb平台由于有机集成了开源领域的众多产品,为Java人员提供了Java开源技术“一站式”学习通道,能在很短的时间内掌握这些开源技术的使用方式。通过OpenJWeb的学习和使用可以使Java人员在很短的时内提高自己的技术水平,从而使自己在竞争激烈的职场中脱颖而出。基于以上这些价值,OpenJweb?快速开发平台也是培训机构很好的实战教材。
1.4 OpenJWeb的主要用户群体
(1) 对于还没有或者刚选择Java平台的软件公司,本平台已经具有了很多开发好的功能,不需要重复开发。可直接使用平台提供的社区版。 (2) 对以于项目实施为主的软件公司(按项目定制开发),使用此平台开发项目可以大大减少开发工作量。 (3) 咨询人员:咨询人员使用此平台可以在很短的时间定制一个原型应用,因而使得在打单或需求调研过程中迅速给客户展示一个应用系统模型。 (4) 企业用户。使用此平台使得在软件公司的服务到期后,仍可以使用平台来定制自己的新的业务应用,而不再依赖于软件公司,从而真正做到随需应变。 (5) 培训机构。OpenJWeb平台是一个不可多得的基于开源框架的快速Web应用开发平台,一般IT培训机构是很难获取到这种具有实战价值的代码,针对OpenJWeb平台进行Java培训一定可以使学员在相对短暂的培训期间体验到真正的企业级应用开发。 (6)个体创业者或者中小软件公司。对于中小软件公司是没有资金去聘请一个专职的高级架构师,引入一个优秀的开源平台进行软件开发是他们最好的选择。
1.5 OpenJWeb1.6版本的主要功能特点
本章节只介绍功能特点,具体的功能画面和操作方法见《操作手册》。
1.5.1 多语言支持
可在登录后的系统首页通过点语种连接来切换不同的语种(不过目前有许多页面没做文字翻译,只翻译了个别单词可以看到语种切换的效果)。 表单列表页面和编辑页面的标签支持多语,只需要在表字段定义中定义各语种文字,从平台编译代码后,能自动生成对应的多语资源文件。
1.5.2 Portlet风格的首页
带Portlet风格的后台首页,可实现Portlet窗口的拖拉,目前设置了我的待办任务,我的已办任务等Portlet(目前尚未设计OA及工作流系统,所以Porlet中的信息目前是演示数据)。
1.5.3 在线编译功能
通过平台生成功能代码后,不需要在IDE开发环境中执行代码编译,可直接在页面中点“编译代码”,编译完成后新代码生效。
1.5.4 提供了定时器开发接口
平台已提供了定时器的具体开发和配置的例子,用户只需要在指定的定时期类中增加自己的新的定时器方法,并在Spring配置文件中稍作配置即可。
1.5.5 提供了邮件发送API调用接口
平台已提供带HTML格式的多附件发送调用API,利用这个API可很方便地实现邮件群发。
1.5.6 集成了FckEdit?在线编辑器
本平台提供了基于FckEdit?的可视化的在线编辑器。
1.5.7 提供了业务逻辑组件接口和实现类的生成功能
当建表时,如果选择生成业务逻辑组件,则自动生成业务逻辑接口和实现类。并自动在Spring配置文件中进行配置
1.5.8 支持基于JTA的跨数据库事务
可实现跨数据库的事务控制,当指定异常抛出时,可在两个数据库中同时回滚。
1.5.9 表结构管理
定义了表和表字段后,可生成数据库表、Hibernate映射文件和Java实体类。表字段定义中可定义字段的类型,长度,是否非空,各语种标签文字,使用哪些字段校验器,默认值生成规则设置,表字段在列表页面和编辑页面是否显示,显示顺序,表字段的输入方式(输入框,日期选择,弹出窗口,下拉列表等多种输入形式)、表字段是否为查询条件字段等。 另外表字段维护中还增加了生成表字段功能,用于在表已经建立后,如果增加新的字段,就不再需要从开发环境中开发实体类,hibernate映射文件进行修改,也不需要打开数据库管理工具增加新的字段,只需要在页面上执行操作就可以完成以上内容。
1.5.10 代码表管理
也称数据字典管理,主要用于页面上下拉列表的下拉选项的定义。例如职称可定义001工程师,002高级工程师;用户既可定义代码表位于专用的数据字典表,也可以指定任意表的两个字段作为代码字段和名称字段。如果同一类型的代码不是很多(少于50条),可以用代码表管理,代码表的明细项如果太多,推荐专门建表维护,这时别的字段如参照使用本代码表,应该使用弹出窗口进行选择。
1.5.11 功能定义
可针对一个数据库表创建单表增删改查页面。也可创建主明细表增删改查页面(可带多个tab)。建主明细表时需要维护主表和明细表对照关系。在本页面配置好功能相关属性后,点“生成代码”,可生成struts2的action配置文件,action控制层类,列表页面,编辑页面,弹出窗口选择页面(每个功能都有可能作为别的页面字段的参照输入)。如果此页面中设置了要创建的表单类型(单表/主表/明细表),则可分别针对不同的表单类型创建对应风格的页面。
1.5.12 数据权限定义
可指定一个表设置针对不同用户的不同的数据权限,包括查询权限,修改和删除权限。
1.5.13 字段校验器
平台可从字段校验器表中读取字段校验器类进行保存前的数据校验。如果用户开发了新的校验器(需要实现校验器接口),可录入到数据库中,然后在表字段定义中选择性地绑定需要的校验器。
1.5.14 查询
平台生成的页面中有显示在列表页面查询列,如果想增加或减少查询列,只需要修改表字段定义中的是否查询字段,将是否查询条件设置为“否”,然后重新生成此功能的代码即可。另外组合查询中可定义关于查询表的任意字段,并可以带括号组合自己的查询条件的逻辑关系。本平台的查询条件字段的输入方式是随着配置的输入形态自动改变的,例如是日期输入,则查询条件自动显示日期选择器,如果是弹出窗口,自动显示弹出按钮,如果是下拉列表,查询条件列自动检索出列表项。
1.5.15 权限维护
维护一个权限树。权限树中可定义功能菜单权限,按钮权限等。如果设置了URL,则没有授权的用户不能访问URL,此表是Spring Security框架读取权限信息的表,是权限框架的核心数据库表。
1.5.16 公司基本信息维护
维护顶级法人公司列表。是组织结构树的根,在这里可以录入本公司,客户公司。如客户公司因业务需要需在本系统建立自己的组织结构和用户,则需要在这里注册公司信息。
1.5.16 组织结构维护
可选择一个顶级公司维护组织结构树,组织结构树可定义行政部门、客户、供应商、角色、岗位、业务组等多种类型组织结构,可以在一个组织结构下维护人员信息,同时也可以维护一个多对多的组织结构-人员关系,比如某个组织结构节点为角色,则可以将属于此角色的人员添加进来。这样形成了一个多对多的矩阵型组织结构-人员关系,如果此组织结构被授予权限,则直属此组织结构的人员可以获得组织结构权限;另外,角色权限可以继承,即上级角色可以具有下级角色的权限; 另外系统还可直接对人员授权。这样一个人员的权限就包括了直接授权,从组织结构获得权限,从角色型组织结构获得权限及继承权限,这样构成了一个完整的授权体系。
1.5.17 EXCEL导出功能
通过OpenJWeb平台生成的功能页面中提供了针对此页面数据的EXCEL导出功能,所以在本平台中,针对单表的普通列表格式的EXCEL导出功能完全不再需要开发人员自己开发,这无疑节省了大量的EXCEL导出功能的开发时间。本平台的EXCEL导出功能大致有以下几个特点:
(1) 普通格式的EXCEL导出功能不再需要开发人员编写代码实现。通过平台生成的增删改查功能页面都具有EXCEL导出功能。
(2) 可以由用户自己定义导出的EXCEL表格的查询条件。
(3) 可以由用户定义EXCEL表格的标题文字、EXCEL中单元格的表头文字、单元格对应的字段顺序,可定义数据库中哪些字段在EXCEL中显示,哪些隐藏,这样可以由用户来控制单元格显示顺序及需要显示那些内容。
(4) 因为数据库表中很多字段存储的是编码,而EXCEL中需要显示名称,例如省份字段存储的是0001,实际上此代码映射的是北京市,所以在EXCEL表格中需要显示出北京市。在本平台中可以定义任一编码字段对应的名称,这个是通过设置一个SQL来查询编码对应的名称。
1.5.18 EXCEL导入数据库
通过平台生成的增删改查页面具有EXCEL导出以及从EXCEL导入数据到数据库中的功能。这样就实现了通过EXCEL快速编辑数据的功能,在系统录入大量数据的时候非常有用。由于每个页面都由平台生成了导入数据的按钮和实现,所以使用本平台开发新的功能不需要开发人员重复编写EXCEL导入数据库的代码。 在操作EXCEL导入数据库功能之前,可以先从平台中导出数据,然后在导出的EXCEL文件中编辑,编辑完成后导入到数据库中,系统在导入过程中会根据设置的业务主键来自动判断哪些数据是新增的,哪些数据是在原来的基础上修改的记录,这样系统可以自己选择是插入一条新数据还是在原来的行上替换新的值。 如果EXCEL单元格中,有的值是名称,录入到数据库需要反查编码,例如EXCEL中的城市为“北京”,但在数据库中“北京”的编码是001,这样EXCEL导入数据库时会自动将北京替换为001,(前提是在表字段定义中定义了此字段的反查编码的SQL 语句)。
1.5.19 快速功能建模
OpenJWeb提供了功能菜单快速创建功能,菜单创建完成后,将菜单权限分配给用户,很快就可以搭建一个新的子系统框架。只要页面开发出来与菜单进行连接,并与权限绑定,功能模块就可以使用了。 具体操作方法见用户手册。
1.5.20 站内全文检索
OpenJWeb集成了Lucene搜索引擎,并开发了html,txt,pdf,excel,word等格式的文件解析器。在OpenJWeb平台中,当信息发布为静态页面后,静态页面会保存到一个公共目录,平台的后台定时器可定时调用搜索引擎进行索引重建。所以每隔一段时间,发布的静态页面就可以通过搜索页面按关键词进行检索。
1.5.21 Spring Security与单点登录产品CAS
本平台提供了Spring Security与CAS Server 3+的整合方式。如果用户需要配置Spring Security和CAS Server,可参考web.xml.cas和applicationContext-security.xml.cas.用户手册里描述了部分配置过程。
1.5.22 树型结构生成器
OpenJWeb平台实现了树型结构生成器,用户可以在平台定义一个树型的表结构,并根据这个表生成一个树型的增删改查维护页面,非常方便。这个功能解决了企业应用开发中树型结构维护功能的开发难度大,周期长的问题,使用本平台几分钟就可以创建一个增删改查功能,并且不用编写任何代码。具体的操作过程见《02-OpenJWeb1.6用户手册.pdf》。
1.5.23 简易审批工作流
OpenJWeb平台实现了简易工作流,用户可自定义流程的状态位,并且可以设置审批动作(与页面按钮)对应,不同的审批动作可将业务对象的状态位从A状态改变为B状态。每个审批动作都自动生成对应的页面按钮,系统还可指定审批动作的执行权限。具体见开发视频。
1.5.24 内容管理系统信息编辑与发布
在简易审批流的支持下,平台实现了信息审批流的配置,用户使用Fckedit在线编辑器,在审批通过后,发布信息的同时可生成静态的html页面,信息发布前也可指定对应的栏目。静态页面的内容可被平台的搜索引擎定时索引。具体见开发视频。
1.5.25 支持多种RDBMS
经测试,平台在oracle,Sybase,sqlserver,mysql环境中都可以使用,在平台中建表可支持多种数据库。