Mercurial Server的安装

参考该文档 , 有两点需要注意:

  1. server端的mercurial必须安装Python版本的
  2. 目前1.8版本的mercurial对应Python版本是2.6

最后感谢Python社区为墙内用户提供独立下载链接。

项目小结-数字签名

在项目中我们需要使用者通过浏览器对PDF文件进行数字签名,我们首先想到的是利用PDF标准本身的数字签名功能,数字签名由两个步骤组成:

  1. 使用SHA1或MD5之类的摘要算法生成原文件的摘要文件,也就是所谓数字指纹
  2. 使用RSA非对称算法对摘要文件进行加密

因此要实现对PDF文件的数字签名,在实现层面需要以下步骤:

  1. 在server端生成PDF文件的摘要文件
  2. 将摘要文件传到浏览器端,使用客户的smart-key对摘要文件做RSA加密,并将结果返回server端
  3. 在server端使用iText类库将生成的数字签名嵌到PDF文件中

但最后发现smart-key提供的借口只能实现摘要以及摘要+RSA加密的功能,而无法单独实现RSA加密的功能,所以这种方案没有走通。替代方案有两种:

  1. 将PDF文件里的内容形成一个XML文件,让客户对该XML文件做数字签名,也就是现在网上银行使用的方法。
  2. 开发富客户端程序,这样就可以利用USB-Key的摘要+RSA加密功能

我们最终使用的是方案1。也是成本较小的一种。XML文件使用JAX-B标准生成,用DB2的pureXML技术存储,还是比较便捷的。

项目小结-MyBatis

最近这个项目使用MyBatis作为DAO层,最初只是厌倦了写jdbcTemplate中无聊透顶的RowMapper,后来发现还真是用对了。

  1. 上手容易,翻两天文档就会了,MyBatis团队专门开发了和Spring集成的模块,和Spring的集成非常简单.
  2. 我们这个项目里有遗留系统的数据结构,查询异常复杂(尤其还要分页)。通过OGNL做动态SQL配置,比在JAVA代码中用一堆ifelse拼SQL语句简单明了多了,很难想象上百行复杂SQL塞进JAVA代码里的样子.
  3. 项目中涉及多个数据库,表结构一样,为一个DAO配置不同的sqlSession就简单的解决了多数据源的问题.
  4. MyBatis中一个函数对应一个SQL语句,有效扼杀在DAO层加入其他逻辑的冲动。
  5. 对于UPDATE或INSERT中的NULL值,对我们现在用的DB2 Driver(V9.5)不需要特别指定jdbcType,难得啊
  6. 我一直以为MyBatis通过public的setter来实现对field赋值,后来觉的有的field从OO角度看不能设一个public的setter供client端代码随意使用,例如订单状态,只能是通过预定啊提交啊这类方法去改变,但不设setter又怎么让O/R映射框架去给字段赋值呢?结果就是通过reflection之类的hack去做了,这也是O/R映射框架要解决的一个基本问题。

再次感叹一下,interface+config这个架构很有型。JAVA和SQL本来就是两种语言,通过这个架构清晰的分开,各司其职又能各展所长,有些技进乎道的意思。而Hibernate/JPA走的却是相反的路,恐怕多语言混合开发才是王道吧。

MyBatis

实在是厌烦了写Spring JdbcTemplate中的RowMapper
MyBatis只需要写interface,具体的impletation通过config来完成
这个架构我很喜欢

三国杀

试玩了两天三国杀,再次确认了本人的确不适合玩游戏
话说这一局武将是黄盖,身份是忠臣
原本形式一片大好,接连使用黄盖的“苦肉计”将反贼们杀的丢盔卸甲,却没注意自己也没血了
终于悲剧了,黄盖自杀,全场震惊
祸不单行,偏偏黄盖身上还带着一个闪电,随着自杀传给了下一个忠臣,然后爆掉~~~
接着就是主公狂喊“天亡我”被反贼杀灭鸟~~~~

OSGi

An OSGi bundle is a JAR but it has additional headers in the JAR manifest. In a plain JVM with no machinery to process this additional metadata, the bundle behaves like a normal JAR. In a JVM that includes an OSGi framework, the metadata is processed by the framework and additional modularity characteristics are applied.

以前看过BlueDavy写的OpenDoc,没怎么读懂,只模糊留下OSGi高深莫测的印象
但读了这篇文章倒有点拨云见日的感觉,无非class loader

对CICS用户而言,将WAR包分解为bundle后,貌似又回到 CICS服务 + 共享库 的部署风格了

PMML and DB2 pureXML

随着应用的深入,模型数量越来越多,对模型的管理要求也必然增多
用blob存储PMML不再是个好主意,DB2 Viper的pureXML技术貌似很适合这种场景

关注

每发布一篇新博文的同时向您的邮箱发送备份。