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”指令。除非您清楚地理解该指令的目的,否则您将不知道何时编写它,并且当某个bundle由于“uses”冲突而无法解析时,您将只能猜测。本文应让您全面了解“uses”指令,何时使用它,以及如何调试“uses”冲突。
Bundle解析
OSGi 的设计使得一旦 bundle 被“解析”,您通常就不会遇到由于类型……导致的类转换异常和类似问题。
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 的支持将通过商业途径提供。 如需更多信息,请联系 销售。
请参阅更新日志了解更多详细信息。
祝您使用愉快!
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 应用程序的类加载器又保留对其加载的所有类的引用。因此,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 keep alive,因为 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 应放置在您的 httpd.conf 文件中,与其他 mod_jk 设置一起。
- 何时最适合使用非阻塞 IO HTTP 连接器?
当您需要支持高并发且保持活动状态,并且 APR 不可用时,例如,因为它在您的平台上不稳定。
- 如果我在 Apache Tomcat 前面使用 Apache httpd,性能会更好吗?
这取决于。如果您将所有请求代理到 Tomcat,那么性能会略有下降。如果 httpd 处理一些请求(例如所有静态内容),那么您可能会看到一些好处。有许多基准测试试图证明一个连接器比另一个连接器更好。但是,这些基准测试都不太可能代表您的应用程序。唯一确定的方法是在您的环境中,使用真实的负载和使用模式进行测试。
- Tomcat 可以在没有 Web 服务器的情况下投入生产使用吗?
是的。这是否能为您的环境提供最佳性能将取决于该环境和您的应用程序。与上一个问题一样,唯一确定的方法是在您的环境中,使用真实的负载和使用模式进行测试。
- 在 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