![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
开发平台
sdfjlkjsdfsaldfsdf
safasfds
展开
-
APDPlat v2.5正式发布,开源的Java应用级产品开发平台
APDPlat是Application Product Development Platform(应用级产品开发平台)的缩写。 项目官网 发布日志 APDPlat提供了应用容器、多模块架构、代码生成、安装程序、认证授权、备份恢复、数据字典、web service、系统监控、操作审计、统计图、报表、机器绑定、防止破解、数据安全、内置搜索、数据转换、maven支持、WEB组件、内容管理、工作流、We...2013-11-07 15:43:33 · 172 阅读 · 0 评论 -
如何在你的应用中使用Jasypt来保护你的数据库用户名和密码
“任何时候都不应该明文显示和存储密码”,我想这个原则是一个稍微有点安全常识的人都懂的,那么在Java应用中,如何最简单最方便地保护你的应用的数据呢?本文我们以数据库的用户名和密码为例子,来讲解在APDPlat中我们如何使用开源项目Jasypt来实现加解密。首先,我们引入依赖库,使用Maven方式如下:<dependency> <groupId>or...2015-04-23 05:53:08 · 232 阅读 · 0 评论 -
关于解析配置文件的一点思考
假设我们有一个配置文件config.properties,取自APDPlat的主配置文件:#主配置文件#是否启用WEB目录文件增加和删除监控watch.directory.enable=true#用户密码安全策略user.password.strategy=passwordLengthStrategy;passwordComplexityStrategy#如...2015-04-21 23:32:00 · 154 阅读 · 0 评论 -
struts2和spring mvc,孰优孰劣?
最近我在将APDPlat升级到Java8,由于之前有很多的同学希望我把APDPlat的struts2替换为spring mvc,所以我就决定试试看。 本次我把APDPlat的struts2改造为spring mvc的目标是:99.99%不改动JS、HTML、JSP等前端代码,只改JAVA代码!所以大家要先理解我的目标,然后再来看我的做法。 本文我们看两个转换前后的例子: ...2015-04-19 18:10:11 · 332 阅读 · 0 评论 -
APDPlat中的用户密码安全策略
互联网时代,安全是永恒的主题,威胁无处不在,哪怕是在企业内网。 APDPlat充分考虑到了安全的问题: 首先,在浏览器中对用户密码加入复杂字符({用户信息})之后进行加密(Secure Hash Algorithm,SHA-512,as defined in FIPS 180-2),在服务器端加入用户名和复杂字符之后再次加密,提高破解复杂度; 其次,在浏览器和服务器之间...2014-03-11 13:09:19 · 188 阅读 · 0 评论 -
APDPlat中的机器码生成机制
APDPlat提供了机器绑定的功能,对于不同的机器会生成不同的机器码,必须要对生成的机器码进行计算获得注册码,注册码验证成功之后系统才能正常运行。 本文主要介绍APDPlat如何生成机器码。 首先,定义了一个统一的接口,以支持不同操作系统不同实现的透明切换: /** *生成机器码的接口,不同平台有不同实现 * @author 杨尚川 */public i...2014-02-08 15:19:53 · 176 阅读 · 0 评论 -
APDPlat如何自动建库建表并初始化数据?
APDPlat共支持10种数据库:DB2、DERBY、H2、HSQL、INFORMIX、MYSQL、ORACLE、POSTGRESQL、SQL_SERVER、SYBASE。 数据库的默认配置信息在文件APDPlat_Core/src/main/resources/org/apdplat/db.properties中定义,用户可以根据自己的选择,在APDPlat_Web/src/main...2014-02-08 09:25:43 · 192 阅读 · 0 评论 -
APDPlat的系统启动和关闭流程剖析
APDPlat接管了Spring的启动关闭权,为各种运行其上的开源框架和类库的无缝集成提供了支持。 当然,大家都知道,一个JAVA EE Web应用的入口点是web.xml,APDPlat当然也不例外,我们看看APDPlat是如何接管Spring的启动关闭权的: <listener> <description>经过定制的spring监听器</d...2014-02-03 01:44:18 · 493 阅读 · 0 评论 -
APDPlat拓展搜索之集成Solr
APDPlat充分利用Compass的OSEM和ORM integration特性,提供了简单易用且功能强大的内置搜索特性。 APDPlat的内置搜索,在设计简洁优雅的同时,还具备了强大的实时搜索能力,用户只需用注解的方式在模型中指定需要搜索哪些字段(还可在模型之间进行关联搜索)就获得了搜索能力,而不用编写任何代码。平台自动处理索引维护、查询解析、结果高亮等支撑功能。 然而AP...2014-02-01 23:39:40 · 113 阅读 · 0 评论 -
APDPlat拓展搜索之集成ElasticSearch
APDPlat充分利用Compass的OSEM和ORM integration特性,提供了简单易用且功能强大的内置搜索特性。 APDPlat的内置搜索,在设计简洁优雅的同时,还具备了强大的实时搜索能力,用户只需用注解的方式在模型中指定需要搜索哪些字段(还可在模型之间进行关联搜索)就获得了搜索能力,而不用编写任何代码。平台自动处理索引维护、查询解析、结果高亮等支撑功能。 然而AP...2014-02-01 21:46:14 · 133 阅读 · 0 评论 -
APDPlat中备份文件异地容灾机制之FTP上传
APDPlat在数据库备份成功之后,会调用一个系统扩展点,用户可以方便地编写自己的包含特定业务逻辑的插件,并可配置启用哪些插件。本文以将备份文件上传到FTP服务器以实现异地容灾为例子,来说明如何编写自己的插件并配置使其生效。 1、如何编写? 我们先看看系统扩展点,即BackupFileSender接口: /** * 备份文件发送器 * 将最新的备份文件发送到其他...2014-02-01 19:05:58 · 225 阅读 · 0 评论 -
APDPlat中领域模型的自描述机制与事件通知机制
APDPlat中的Model抽象类是所有领域对象的基类,对领域模型的CRUD操作都会触发事件,监听这些事件是实现实时搜索、业务审计、权限验证、模型预处理等功能的基础。 我们先看看Model的设计要点: 1、模型的自描述机制。2、统一的事件通知接口。 Model类定义了一个抽象方法getMetaData(),子类需要实现该方法来描述领域模型的具体业务含义,如下所示:...2014-02-01 06:40:39 · 126 阅读 · 0 评论 -
APDPlat中数据库备份恢复的设计与实现
APDPlat提供了web接口的数据库备份与恢复,支持手工操作和定时调度,可下载备份文件到本地,也可把备份文件发送到异地容错,极大地简化了数据库的维护工作。 设计目标:1、多数据库支持2、横切关注点隔离3、异地容错 下面阐述具体的设计及实现: 1、为了支持多数据库,统一的接口是不可避免的,如下所示: /** * 备份恢复数据库接口 *...2014-01-30 07:10:11 · 2446 阅读 · 0 评论 -
APDPlat中业务日志和监控日志的设计与实现
APDPlat提供了业务日志和监控日志,以便对用户操作进行审计、对系统性能进行调优。 业务日志主要包括数据的增删改日志、备份恢复日志以及用户登录注销日志。监控日志主要包括用户请求响应时间、内存使用情况、全文索引重建情况、系统启动关闭事件。 设计目标: 1、灵活,可以很容易地启用或停用2、性能,不对正常的业务操作造成影响3、开放,容易和第三方系统整合 下面...2014-01-29 00:57:22 · 851 阅读 · 0 评论 -
APDPlat的日志国际化实现方式
APDPlat使用slf4j来做日志框架,由于slf4j不支持国际化日志,所以APDPlat使用自定义的APDPlatLogger类来支持国际化日志。使用方法如下: 1、构造日志对象private static final APDPlatLogger LOG = new APDPlatLogger(SystemListener.class); 2、输出多语言日志LOG...2013-11-11 21:23:52 · 500 阅读 · 0 评论 -
软件熵:软件开发中推倒重来的过程就是软件熵不断增加的过程
每一个软件项目的第一个版本都很漂亮。新项目从零开始,所有的内容都是新开发的。因为全新开发,就意味着没有历史负担的问题。第一个版本的BUG非常少,当然,程序员也尽力做到最好。这意味着,在开发人员的眼中,第一个版本可以算是完美:代码漂亮、设计良好、架构优秀。 第一个版本一旦发布,就会有人发现BUG,并公布出来,这些BUG都需要被修复。这时,第二个版本的起点就要比第一个版本高得多。...2014-09-06 19:42:00 · 326 阅读 · 0 评论