SpringSource dm Server 入门
2008年10月28日更新:添加了最新的示例链接和指向第三个示例的链接
昨晚,我在费城 Spring 用户组做了一个关于“SpringSource dm Server 简介”的演讲。在此演讲中,我创建了一个名为 GreenPages 的小型应用程序,演示了 dm Server 的所有主要方面。我向与会者承诺,我会将该应用程序和幻灯片发布在这里。
在 dm Server GA 版本发布后的几周内,许多人一直在询问开始使用 dm Server 的最佳方法,因此我将此条目用于收集所有相关信息……
Spring Batch 2.0 新功能概述
在本文中,我们概述了Spring Batch 2.0 的主要主题,并重点介绍了与 1.x 的变化。新版本的开发工作正在顺利进行,上周发布了 M2 版本,我们收到了很多关注,因此现在似乎是提供一些提示的好时机。
Spring Batch 2.0 主题
新版本的四个主要主题是
- Java 5 和 Spring 3.0
- 非顺序执行
- 可扩展性
- 配置:注解和 XML 命名空间
Spring Batch 2.0.0.M2 中项目的物理布局没有任何变化(相同的旧下载,Java 包的基本布局相同)。我们没有删除任何功能,但我们借此机会修改了一些 API,并且对……有一些细微的变化。
理解 OSGi uses 指令
如果您为 SpringSource dm Server 或任何其他 OSGi 平台构建应用程序,您可能会很快遇到uses
指令。除非您清楚地理解该指令的目的,否则您将不知道何时对其进行编码,并且当某个捆绑包由于uses
冲突而无法解析时,您将只能猜测。本文应让您彻底了解uses
指令,何时使用它以及如何调试uses
冲突。
捆绑包解析
OSGi 的设计使得一旦捆绑包“解析”,您通常不应该遇到由于类型……导致的类转换异常和类似问题。
Spring.NET 1.2.0 RC1 发布
我们很高兴地宣布 Spring .NET 1.2.0 RC1 已发布。
下载 | 支持 | 文档 | 更改日志
此版本包含以下功能
- WCF 集成 - 使用依赖项注入配置 WCF 服务。将 AOP 建议应用于 WCF 服务。
- MSMQ 集成 - MSMQ 辅助类可提高开发消息传递应用程序的效率。提供与 Spring 事务管理功能的集成。
- Apache ActiveMQ 集成 - 辅助类可提高使用 ActiveMQ 开发消息传递应用程序的效率
- Quartz 集成 - 使用依赖项注入配置 Quartz 作业、调度程序、触发器。用于实现 Quartz 作业的便捷类以及与 Spring 事务管理功能的集成。
- AOP 新的基于继承的 AOP 代理生成。
- WebForm 依赖项注入的性能改进。
- NHibernate 2.0.1 支持。
1.2.0 RC1 中的其他值得注意的新功能
- 参考文档中的颜色代码和 XML 列表。
- 引入原型属性 - 例如 [Repository]
- WCF 服务导出器.
- 可扩展的 Web 导航.
- 新的快速入门应用程序 可用于 WCF、Quartz、MQMQ 和 Apache Active MQ 集成。
将提供对 TIBCO EMS、Websphere MQ 和 Progress SonicMQ 的商业支持。请联系sales 以获取更多信息。
请参阅更改日志以获取其他详细信息。
尽情享受!
Spring Batch 2.0.0.M2 发布
Spring Batch 2.0.0.M2 现已推出。请参阅 Spring Batch 的下载页面以获取更多信息 - 其中包含通常的 .zip 下载,以及 S3 中的 Maven 工件。
此版本的大部分工作都投入到面向块的处理方法中,这意味着对 ItemReader 和 ItemWriter 接口进行了更改,以及引入了 ItemProcessor 作为将输入项和输出项之间进行转换的首要问题。面向块的处理是性能和可扩展性的关键推动因素,同时对于扩展点和接口的用户来说也更加清晰(不再有框架……
优化和调整 Apache Tomcat - 第 2 部分
几周前,Filip Hanik 和我在一系列关于优化和调整 Apache Tomcat 的网络研讨会中进行了第二次研讨会。网络研讨会的录制和幻灯片的副本可从SpringSource 网站的网络研讨会部分获取。同一页面提供了所有以前的 SpringSource 网络研讨会的链接,以及Covalent 网络研讨会档案。
我们在问答环节中未能解答所有问题,因此,正如承诺的那样,以下是剩余的问题和我们的答案。
- 如何在 Tomcat 应用程序中识别内存泄漏?
您几乎肯定需要使用分析器来识别内存泄漏的根本原因。最新的 Sun JDK 包括诸如 jhat 和 jmap 之类的工具。还有许多其他分析器可用,既有免费的,也有商业的。Filip 和我在调查 Tomcat 内存泄漏时使用YourKit,因为 YourKit 为开源开发人员提供免费许可证。
- 重新部署如何导致内存泄漏?
这通常发生在 Tomcat 加载的类保留对 Web 应用程序加载的类的引用时。当 Web 应用程序停止时,Tomcat 类加载器继续保留对 Web 应用程序加载的类的引用。此类保留对 Web 应用程序类加载器的引用,后者又保留对其加载的所有类的引用。因此,Web 应用程序类加载器及其加载的所有类都不符合垃圾回收的条件。这会导致内存泄漏。这通常是由于 JDBC 驱动程序和日志框架引起的。
- 更改 Tomcat 使用的 JVM 的最佳方法是什么?
要使用的 JVM 使用 JAVA_HOME(完整 JDK)或 JRE_HOME(仅 JRE)环境变量设置。正确设置此变量的位置将取决于您的环境,尤其是在 Tomcat 配置为在系统启动时自动启动的情况下。如果您有自由选择设置位置,请根据您的操作系统使用 setenv.bat 或 setenv.sh。
- 您是否推荐特定的 JVM?
不,我们没有。您选择的 JVM 供应商取决于您的操作系统。
- 我应该使用哪个连接器将 Apache httpd 连接到 Tomcat?
我们推荐 mod_proxy_http,mod_jk 位居第二。通常,mod_proxy_ajp 比 mod_proxy_http 或 mod_jk 不稳定。请注意,mod_jk2 已弃用,不应再使用。
- 使用 SSL 时,maxKeepAliveRequests 的正确设置是什么?
使用 SSL 时,应启用 HTTP 保持活动,因为 SSL 握手对于每个请求来说都是一个相对昂贵的操作。
- 如果我们在 Solaris 上运行 Tomcat,您是否建议不要使用本机 APR 连接器?
是的,我们建议不要使用。我们从客户那里收到的反馈是,APR 连接器在 Solaris 上不稳定。
- 我们之前尝试迁移到 Solaris 上的 mod_proxy_http,但遇到了一些错误。这些错误是否已解决?
在不知道您使用的确切错误或版本的情况下,很难发表评论。所有已知的 Apache httpd 问题以及当前状态都可以在ASF Bugzilla 数据库中找到。Tomcat 问题也可以在 Bugzilla 中找到。
- 对于默认的阻塞 IO HTTP 连接器,我应该将 maxKeepAliveRequests 设置为哪个值?
对于高并发环境,将其设置为 1。否则,将其设置为页面上对象的平均数量,介于 10 到 100 之间。
- 如何配置 JkOptions +DisableReuse?
JkOptions +DisableReuse 应与其他 mod_jk 设置一起放在 httpd.conf 文件中。
- 何时最适合使用非阻塞 IO HTTP 连接器?
当您需要支持具有保持活动的高并发并且 APR 不是选项时,例如因为它在您的平台上不稳定。
- 如果我在 Apache Tomcat 前面使用 Apache httpd,我会看到更好的性能吗?
这取决于具体情况。如果您将所有请求代理到 Tomcat,则性能会略有下降。如果 httpd 处理一些请求(例如所有静态内容),那么您可能会看到一些好处。有一些基准测试试图证明一个连接器比另一个连接器更好。但是,这些基准测试不太可能代表您的应用程序。唯一确定方法是在您的环境中使用真实的负载和使用模式进行测试。
- 是否可以在没有 Web 服务器的情况下在生产环境中使用 Tomcat?
是的。这是否能为您的环境提供最佳性能将取决于该环境和您的应用程序。与上一个问题一样,唯一确定方法是在您的环境中使用真实的负载和使用模式进行测试。
- 在 Tomcat 前面使用 Apache httpd 是否会提高安全性?
您安装的安全性将取决于许多因素。是否使用 Apache httpd 不会显著改变您安装的安全性。其他因素,例如及时更新补丁和使用防火墙,通常会对您的整体安全级别产生更大的影响。
- 哪个 Apache httpd MPM 提供最佳性能?
一如既往,这将取决于您的环境,但httpd 性能调整文档提供了一些有用的通用指导。
- SpringSource ERS 和 Apache Tomcat 之间的性能差异是什么?
SpringSource ERS 不仅仅是 Apache Tomcat。从纯 Tomcat 的角度来看,性能并不是区别因素。ERS 的优势在于简单的安装、易于管理的升级和修补、对多个实例的支持以及所有组件的集成。
- 我的公司使用 Tomcat 和 XYZ 应用服务器。Tomcat 与 XYZ 应用服务器相比如何?合并是否有益处?
会有很多差异,而重要的差异会因组织而异。首先确定您希望从应用服务器获得什么,然后将该列表与市场进行比较。合并是有益处的。更大的一致性意味着更简单的维护、更少的培训等等。但是,也存在成本。您需要查看您的组织以及它如何计划进行合并(仅限新项目、下一个主要版本的全部项目、现在全部项目等),以将成本与相关收益进行比较。
- 您是否有 Tomcat 和 XYZ 应用服务器的性能比较数据?
该领域已发布了各种报告。结果是否有用取决于测试与您的负载匹配程度。一如既往,唯一确定方法是在您的环境中使用真实的负载和使用模式进行测试。
- 负载测试 Tomcat 服务器的好方法是什么?
- 为了实现高可用性和高性能,可以将 Tomcat 配置为为同一 Web 应用程序启动多个 JVM 吗?
Tomcat 没有将其作为配置选项提供。当然,您可以创建多个 Tomcat 实例,在每个实例上安装您的应用程序,然后跨实例进行负载均衡。
- Tomcat 是否有通用的健康检查脚本?
管理器状态页面可能是一个不错的起点。如果需要,您可以使用该 Servlet 的代码作为您自己的更具体/更广泛检查的基础。如果您确实对其进行了增强,请考虑将您的增强功能贡献回 Apache Tomcat 社区。
- logging.properties 文件位于哪里?
默认位置在 $CATALINA_BASE/conf 中。
平衡问题:调整维护策略
经营企业至少在一点上类似于编写代码:即使您知道要实现的目标,您也并非总是第一次就能做到完美——但是,如果您准备好根据需要重做工作,最终您确实会获得更好的结果。在 SpringSource,我们对我们最近宣布的维护策略有着清晰的愿景:平衡开源社区、企业用户和 Spring 创建者的需求,以造福所有人。但是,我们第一次并没有完全平衡好,现在是时候进行一些重构了。
在过去的两周里,我……
通用服务定位器库
本周在 CodePlex 上发布了CommonServiceLocator 项目,其总体思路是提供一个与 IoC 容器无关的 API,用于使用服务定位来解析依赖项。SpringSource 的 Erich Eichinger 贡献了 Spring.NET 实现,感谢 Erich!
这是 API,以便您了解基本思路public interface IServiceLocator : System.IServiceProvider {
object GetInstance(Type serviceType); object GetInstance(Type serviceType, string key); IEnumerable