Jason的观察

   |      

Jason指出Hibernate当前版本的一些有趣之处。

首先,他指出Hibernate的查询缓存可能无法与SwarmCache一起使用。这是因为SwarmCache不是一个/复制的/缓存 - 它使用集群淘汰。只要集群中的时钟同步,Hibernate的查询缓存可以与任何复制的集群缓存一起使用。我们的文档应该使这项要求更加明确。(对于大多数应用程序,查询缓存不是一个特别有用的功能,因此这个问题只影响少数用户。)

其次,他注意到Hibernate当前写入二级缓存过于频繁。我之前并没有意识到这个问题。Hibernate是针对本地、可能是基于磁盘的缓存实现进行优化的,其中查找至少与插入一样昂贵(在基于磁盘的缓存的情况下,/更/昂贵)。Jason指出,在集群缓存的情况下,这种关系是相反的,插入比查找要昂贵得多。我们将提供一个开关,在Hibernate 2.1的后续版本中调整此行为。

最后,Jason对我们不支持JDK动态代理并要求使用CGLIB进行懒加载关联提取表示不满。(CGLIB会导致JVM以限制性安全策略运行时出现问题。)嗯,正如我向Jason解释的那样,Hibernate已经提供了一个挂钩,允许使用自定义持久化器来定制代理实现。(动态代理支持可以用非常少的代码实现。)今晚我实际上对这部分内容进行了轻微的重构,并引入了ProxyFactory接口,使挂钩更加“明显”。

我想指出,Hibernate项目拥有成千上万的用户和寥寥无几的活跃开发者。因此,我们必须根据以下两个因素优先考虑功能请求:首先,有多少用户要求这个功能;其次,这个功能与项目未来方向的相关性有多战略。我们无法实现每个请求的功能,因为我们资源有限,并且一直在与代码膨胀(如果你是维护和改进代码库的人,膨胀是一个非常严重的问题)作斗争。Hibernate是开源的,因此有特殊需求的用户可以在他们的应用程序中使用修补版本。此外,我们通常不通过即时消息或javablogs.com处理功能请求!正确的做法是向JIRA提交增强请求(并让其他用户评论和投票),或者更好的做法是开始在邮件列表中发起讨论。我们虽然是开源项目,但这并不意味着我们完全不专业和无组织!


回到顶部