# ccayFramework **Repository Path**: zhanght_admin/ccayFramework ## Basic Information - **Project Name**: ccayFramework - **Description**: CCAY Web 2.0 and SOA Framework - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: https://gitee.com/ccayGroup/ccayFramework - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 4 - **Created**: 2018-02-26 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CCAY-Freamwork2.0 **CCAY-Freamwork2.0 是面向服务,全面支持Web2.0的Java Web开发框架** ## 技术架构 前后端完全分离,前端使用bootstrap作为基础样式库,并提供表格、树、选择控件等丰富的高易用性的UI组件,可满足从微小应用到企业级应用需求;后端采用Spring4作为基础框架,结合CXF提供SOAP及REST Web服务,Mybatis提供持久层支持。配合Ehcache、log4j、消息中间件等实现框架功能。 ## 特性总特性总述 ### **1、高可扩展性** 框架本身提供大量的可配置属性,并提供合理的默认值,通常可以通过修改配置属性来实现不同的逻辑(或技术)支持;您可以覆盖任何框架提供的默认逻辑而定制实现自己的逻辑:可以基于框架提供的各个功能的接口来实现扩展,或者覆盖框架中的Spring Bean定义,甚至可以覆盖任何一个class类的字节码 ### **2、高可用性** 大多数情况下,框架的提供的可配置属性均可以在非停机方式下动态修改,并立即在系统中体现。可动态添加枚举值,动态修改html,css样式,动态修改邮件模板等,如果系统处于集群部署环境下,这些修改会自动同步到其他JVM中并立即生效。 ### **3、高适应性** 您可以将你的应用不做调整(或仅做配置调整)就可以部署在任何J2EE标准的容器中,Jetty,tomcat,Docker,Jboss等;支持集群部署,并具有内建的session同步及缓存同步机制; ### **4、易用性** 为最终系统使用用户,提供大量精心设计的前端UI组件,可以帮助用户方便的使用系统,提供联想录入,历史录入自动完成,弹框选择,表格个性化设置,Excel批量操作等等;为开发人员提供详尽的开发文档及丰富的实例参考,可以使开发人员快速上手并迅速提高;内置多种工程工具,可方便的管理SQL脚本,导入导出配置信息,构建工具等。 ### **5、安全性** 基于RBAC设计,并对角色进行进一步扩展细分,可支持企业级复杂权限需求;使用Shiro作为基础安全框架,提供基于Spring Aop方法拦截的调用安全检查;扩展Mybatis动态脚本,提供数据级动态过滤;屏蔽高风险语言特性,例如取消Mybatis Mapper的${}的支持; ### **6、互操作性** 可借助CXF及Spring方便的暴漏或调用WebService接口 ## 核心功能概述 ### **1、REST服务支持** 使用CXF对RESTful服务提供支持,可以使用@GET、@POST、@PUT、@DELETE等基于Java标准的RESTful API对外提供服务,详情能力请参照CXF官方文档。 ### **2、持久层支持** 使用Mybatis作为持久化框架,并对Mybatis的动态语言进行扩展: 可以在Mapper XML中引用当前系统上下文,从而获取当前用户,角色,语言等信息而无需在作为参数传入; 内置的分页插件可以避免书写分页逻辑; 内置的扩展标签可以支持动态排序,动态筛选,及基于当前用户权限的数据权限过滤; 支持多种数据库产品使用相同的mapperXML文件,并可以根据当前数据库产品编写特定逻辑 ### **3、权限系统支持** 基于RBAC设计并对角色进行按照维度细分的权限模型,可以满足从基本权限及任何复杂权限需求的支持。采用Shiro作为基本的权限实现框架,扩展了AOP拦截注解,权限校验,数据权限控制等,并提供前端控制机制,可方便控制菜单按钮依据权限显示。 ### **4、缓存支持** 基于Spring Cache,默认采用Ehcache作为实现,并支持分散配置方式,您可以在您任意位置申明cache类型;抛弃复杂的,具体实现相关缓存集群同步机制,内建的基于HTTP的缓存机制可以在集群环境下自动同步缓存。 ### **5、枚举型支持** 为了完全避免魔鬼数字的出现,对Java语言的枚举类型语义进行了扩展,支持动态扩展枚举项;在JavaScript,CXF数据绑定,POJO,Mybatis MppperXml中均提供支持; ### **6、异步消息支持** 提供异步消息具体实现无关的异步处理框架,可以在编写极少量代码的情况下,方便的实现异步操作。具体消息实现可以采用ThreadPool模拟,ActiveMQ、JBoosMQ、Web Sphere MQ等任何JMS标准实现,并支持Kafka。 ### **7、国际化支持** 支持国际化动态加载,意味着您可以在非停机状态下修改国际化;国际化信息均使用内存缓存,并在修改时可自动同步到多个JVM中;支持标准的ResourceBundle方式使用JAVA API获取国际化;前端使用HTML标签扩展属性及JavaScript支持国际化; ### **8、虚拟文件系统支持** 您不用关心具体文件的存储位置,基于Apache VFS2.0封装的VFS模块将文件存储抽象为3种存储位置:临时位置,工作位置,归档位置。实际位置可以是Apache VFS2.0支持的任何文件协议路径:如本地文件系统,FTP,HDFS等。VFS模块提供常用的API完成文件的创建、删除、修改、解压、压缩、复制等功能。 ### **9、class动态覆盖支持** 基于Java Instrumentation机制,您可以修改CCAY框架或框架依赖的包中的任意class的字节码。在框架或第3方包没有合适扩展设计时,这个功能可避免你手动替换JAR中的.class文件。 ### **10、文件上传下载支持** 基于Apache Fileupload及VFS,提供IUploadFileConsumer接口,可以让您在自定义上传处理逻辑。例如:权限验证、文档类型验证、上传文件处理、文件存储位置转储。下载提供多线程处理支持,并提供IDownloadSupport接口,可以验证下载权限,下载文件流预处理等 ### **11、Excel导入导出支持** 基于PIO自定义的XML Schema可以使您方便的开发Excel的导入导出功能。可通过XML指定导入导出的列,列类型,验证器,错误提示信息,及是否将错误提示信息可附加到导入文件等,导入的IExcelDataConsumer允许您按批处理数据(如验证,持久化等),导出的IExcelDataProvider允许您按批提供数据(如分页装载的结果集或ResultSet结果集);导入导出支持百万级数据量。 ### **12、注册项支持** 注册项类似与Java Property,CCAY框架中的很多可配置数据均通过注册项的方式提供。注册项允许你从文件、数据库、甚至是某个远程配置中心加载注册项;支持动态修改注册项的值,并同步到集群中的多个JVM中;支持字符串、数字等基本类型也支持基于JSON的复杂类型; ### **13、审计日志支持** 可以通过AOP的后置通知注解,方便的读取方法调用参数中的值,采用异步方式记录审计日志;提供API函数可以在你需要的任何地方生成并记录审计日志。 ### **14、SQL脚本导出支持** 您可以像管理代码一样管理你的SQL脚本,可以通过内建的Maven插件命令导出集中了的SQL脚本文件。 Maven骨架工程 提供的Maven Archetype,可以帮助你在瞬间搭建好基于CCAY-Freamwork的工程结构。 ### **15、UI** 基于Bootstrap并融合了近百种基于Bootstrap流行的UI组件;对前端操作的核心功能及组件进行了JavaScript API封装,可更容易的使用这些组件;提供了大量的示例及API说明文档,您几乎可以找到您所要用的所有UI示例。 # 快速开始 本节介绍如何快速的搭建基于ccay的开环境 ## 标准环境 请按照如下软件版本搭建开发环境,开发环境中的版本可以高于但不得低于标准环境要求。**较低版本也可以使用,但未做全面测试。** | 名称 | 版本 | 说明 | | ------------ | ---------------------- | ---- | | JDK | Oracel jdk1.7.0_80 | | | apache-maven | 3.5.0 | | |Eclipse|Neon.3 Release (4.6.3)|| ## 创建项目 在开始创建项目前,您应该对您的项目有个初步规划,至少您先得有个名字作为您的项目名称(下文采用testccay作为项目名称),您可以使用命令行或Eclisp快速创建项目: *项目名称最为项目的最基本信息在后期创建的包目录,SQL脚本,XML配置文件都依赖此名称,选定后较难改变,请谨慎决定。* **使用Eclipse创建项目** 1. 打开Eclipse,使用Ctrl+N打开“新建”对话框,选择“Maven Project”-->Next; 2. 取消选中(默认未选中)Create a simple project,依据您的实际调整其他选项后-->Next; 3. 在“Select an Archetype”向导页,单击“Configure...”(在Catalog下拉框后面)打开“Preferences”对话框,单击“Add Remote Catalog...” 4. Catalog File中录入http://139.129.135.19:10001/nexus/content/repositories/snapshots/ Description 中录入ccay catalog-->OK 5. 回到“Select an Archetype”向导页,在Catalog下拉框中选择 ccay catalog,在列表中选中Artifact Id为“ccay-archetype”的记录。(如果记录不存在,请选中列表下发的Include snapshot archetypes) -->Next; 6. 依据项目实际填写Group Id(此值代表您的组织,如:org.my)及Artifact Id(此值表示您目前创建的项目,如:testccay)--Finish; **使用命令行创建项目** 1. 下载http://139.129.135.19:10001/nexus/content/repositories/snapshots/archetype-catalog.xml放入到\~/.m2/archetype-catalog.xml(\~代表当前用户目录) 2. 创建一个新文件夹来保存您的项目(如:myProject),并将当前目录切换至myProject; 3. 执行命令mvn archetype:generate -DgroupId=org.my -DartifactId=testccay -DarchetypeGroupId=org.ccay -DarchetypeArtifactId=ccay-archetype -DarchetypeVersion=2.0.1-SNAPSHOT -DinteractiveMode=false -DarchetypeCatalog=local *其中-DgroupId参数代表您的组织如:org.my,-DartifactId参数代表您创建的项目名如:testccay -DarchetypeVersion代表ccay骨架工程版本* ## 初始化数据库 - 如果您使用的是Eclipse,请在web项目(testccay-web)上单击右键,选择Run as-->Maven build...在打开窗口的Goals中录入ccay:exportsql--Run; - 或者,您可以在命令行,将当前目录转至testccay-web,运行命令:mvn ccay:exportsql 执行成功后会在target\classes\dbscript生成sql脚本,请在数据库中执行脚本 *脚本的生成过程中依赖了您的项目名称(testccay-web\src\main\resources\app_xxx.properties#application.appName值),如果项目名称有改变,需要重新生成脚本,并重新初始化您的数据库* ## 修改数据库连接属性 依据项目实际及环境修改app_xxx.properties中的datasource.jdbcDriverClass,datasource.url,datasource.user,datasource.password *依据骨架工程创建的项目中包含了JNDI及非JNDI,Mysql,Oracel的配置,您可以根据实际需求打开或关闭相关注解,以支持不同情况* ## 启动项目 **使用Eclipse启动项目** 1. 在web项目(testccay-web)上单击右键,选择Debug as-->Maven build...在打开窗口的Main选项卡的Goals中录入jetty:run(或tomcat7:run); 2. 在JRE选项卡的VM arguments:中录入-javaagent:C:\Users\chaowangbang\.m2\repository\org\ccay\ccay-override\2.0.1-SNAPSHOT\ccay-override-2.0.1-SNAPSHOT.jar *javaagent后面的路径是您Maven本地仓库中ccay-override-{ccayversion}.jar的路径,请自行调整* 3. 单击Debug启动项目 **使用命令行启动项目** 待补充,想办法在执行启动命令时指定虚拟机参数-javaagent 在(切仅仅)开发环境下,项目中引入了Java Instrumentation特性,以支持动态修改class字节码,(目前主要用于扩展Mybatis及CXF),所以在启动时需要加入VM参数-javaagent。*在打生产包时,会自动完成class的文件替换* 项目启动后,您可以在浏览器中输入http://localhost:8080/testccay可访问,默认系统管理员用户名admin密码123