codecamp

1.a.27 发行注记

前言

今天, Nutz社区自豪地宣布,Nutz 1.a.27版正式发布了! 本版有很多新功能,并修复了近30个issue,拥有改进的文档 和更丰富的Demo.

  • 由于更多人试图通过更多的方法定制和使用 Nutz,所以遇到了更多的问题
  • 这些问题都是对 Nutz 小幅的修正和调整
  • 本次发布修复了其中绝大多数问题
  • 所以我们强烈推荐你更新到这个版本. 马上下载

曾有朋友建议将 Nutz 的级别调至 b (beta,因为现有的功能已经很稳定了。经过半年的不断修正,它在生产 环境中的表现无论是开发效率还是灵活性上,完全不比很多 RC 框架差,甚至更好。

但是我们还是坚持它是 alpha。

  • 因为我们并不认为把一个发布包的名字由 alpha 改为 beta,它就是 beta 品质的了。
  • 我们认为只有它达到了我们心中 的 beta 品质,即,我们实在不认为有调整接口的必要了,我们才会将其升级成 beta。
  • 起码一段时间内,我们还会继续保留修改 Nutz 主要接口和使用方法的权利。

1.a.27 从另外一个角度来说,也是一个里程碑。从 09 年初的个人框架,到现在社区已经成为这个框架发展不可或缺的 力量。

  • 新人可以很容易的加入到社区,并得到帮助
  • 使用者提出的问题会得到及时的响应
  • 每一个意见和建议都会得到讨论
  • 被关注的问题很快可以得到修复。

因此我们可以说,从这个版开始,它已经成为一个真正的开源框架了。

概述

这个版本是在 1.a.26 基础上的重要改进

  • 为 IdEntityService 和 IdNameEntityService 增加了 exists 函数,根据主键判断一条记录是否存在将更加轻松
    IdNameEntityService<Pet> pets = new IdNameEntityService<Pet>(dao){};
    pets.exists(34);
    pets.exists("XiaoBai);
  • 为 IdNameEntityService 增加了 smartFetch 函数,可以自动判断是根据 @Id 还是 @Name 来获取对象
  • mvc: Uploading速度提高一倍
  • ioc: 注入支持新的 Value 类型: sys
  • ioc: 支持使用XML作为配置文件
  • ioc: 通过配置文件添加AOP
  • mvc: 通过直接声明一个包来声明包中所有的类为Module

问题修复

  • 68 通过配置文件添加AOP by Chen.Bao.Yi
  • 112 通过直接声明一个包来声明包中所有的类为Module by Toni.xutao
  • 119 对@Id字段是否能在没有设置@Next的情况下,insert后自动把数据库中的id值回填到Entity中? by hzzdong
  • 126 Dao: 执行 Trans.exec for informix 出现 Castors 错误 by jiongs753
  • 127 dao: NutTransaction 的实现代码有错误,在 commit 的时候 clear list 以及 close conn by jiongs753
  • 128 无法将自定义的EntityMaker注入到NutDao中 by caiceclb
  • 129 Link的构造函数不方便自己实现的JPAEntityMaker by jiongs753
  • 132 DAO使用proxool做数据源会出警告 by happyday0517
  • 134 log: 使用Nutz的log工具在eclipse控制台打印的日志无法通过点击链接后跟踪到调用的代码行 by zozohtnt
  • 135 Daos.java在jdk5编译通不过,因为其中使用了java.sql.Statement.isClosed()方法。 造成Nutz不兼容JDK5。 byjiongs753
  • 136 fastInsert 支持多一个参数,是否执行 @prev by happyday0517
  • 139 dao: DefaultEntityMaker代码逻辑错误 by wendal1985
  • 140 DAO: 关于Entity和EntityField getset Attribute by zozohtnt
  • 142 Disk.absolute(String, ClassLoader, String),当上层文件夹中包含非英文字符时,返回的path可能不正确 by wendal1985
  • 143 org.nutz.ioc.impl.NutIoc无法设置MirrorFactory by wendal1985
  • 144 ioc: 注入应该支持新的 Value 类型: property by zozohtnt
  • 147 Nut.Aop没有提供示例 by happyday0517
  • 148 Nut.Aop 当方法的返回值为基本数据类型,而拦截器的beforeInvoke返回false时,会出现NPE by wendal1985
  • 149 空json配置文件启动时会报错 by wendal1985
  • 150 ActionFilter中能否多增加一个方法或在现有方法上加个参数,使实现类可以获得@At所注解的方法名 by hzzdong
  • 151 关于upload File时候的性能问题
  • 153 当类文件在中文路径下,org.nutz.lang.util.Resources.scanClasses()无法得到任何class by wendal1985
  • 154 新的代码在JDK5,mysql下测试发现一个单元测试没有通过 by hzzdong
  • 157 MVC部分《请求范围模块》request 注入类型为空 by axhack
  • 160 换1.a.27后找不到自定义sql by happyday0517
  • 163 json: 获取属性值时,应该调用 getter by zozohtnt
  • 164 json: 字段类型为 Map<String, List<String>> 会抛错 by zozohtnt

质量

  1. 共通过了 476 个单元测试用例,代码覆盖率达到62%(按line计算)
  2. Nutz.Dao 经测试在如下数据库上可以工作正常

文档

  • 更新英文文档 by mutang
  • 添加Nutz插件页 by wendal
  • 整理 FAQ 文档

博客

主要贡献者名单

贡献的种类:

  • 问题: 给项目的问题列表汇报一个上的问题,并且该问题被本次发布包括
  • 博客: 在本版本开发期间,写过关于 Nutz 的文章,并被 推荐列表收录
  • 支持: 总结至少出 FAQ 文档
  • 代码: 提交过至少一个修订
  • Demo: 为 Demo Site 提交过代码
  • 文档: 提交过文档,在讨论区发帖或者通过文档上的留言指出现有文档存在的问题
  • 测试: 发布前,参与测试周,发布人给出的任务

如有遗漏,请提醒我们 ^_^

http://docs.google.com/View?id=dc5jpf24_160gshjh436

贡献者问题博客支持代码Demo文档测试
amosleafO--O---
axhackO------
BirdWyatt---O---
caiceclbO------
Chen.Bao.YiO------
deadeye2kO------
E-HunterO-O----
hzzdongO------
happyday0517O------
mastung-----O-
ming300---O---
jiongs753(天行健)O------
Toni.xutaoO------
wendalO-OOOOO
zozohO-OO-OO

另外,非常感谢

的朋友们,你们提出的任何问题,发表的任何言论,实际上都对这个小框架 产生着潜移默化的影响。 我们也正在不断的努力,希望每一个新版本都能让大家获得更好的编程体验。

1.a.28 发行注记
1.a.26
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

表达式引擎

maplist结构

图像处理小军刀

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }