一份关于我参加的SpringOne大会的迟到的报告(在Emacs缓冲区中找到的):Rod Johnson (Interface21)和Michael Chen (BEA)主持的Spring in the Core of WebLogic。这是我参加的关于Pitchfork项目的第一个演示会,以下是我的感受。
我认为可从两个角度看这个项目:
- 它能为WebLogic Server用户做什么
- 它能潜在地为所有用户(无论他们是否使用WLS)做什么
WLS用户
对于WebLogic Server用户来说,Pitchfork项目代表的似乎是对WebLogic Server 9中的EJB 3实现的增强。事实上,您可以去下载包含此功能的WebLogic Server技术预览。那么它能为您做什么呢?它允许您使用Spring功能扩展EJB3(如果您想这样做的话)。我想您可将此视为“供应商扩展”——只不过这里的供应商扩展是开源的,而“扩展”是Spring 2.0功能。所以情况是这样的:
在EJB 3中,您可以拥有类似如下所示的东西:
@Stateless(name="Trader")
public class TraderBean implements Trader {
@Interceptor(ConvertCompanyToSymbol.class)
public String sell (String stockSymbol, ...) {
...
}
它是无状态EJB,有一个应用于某一方法的拦截器。拦截器基本上是在客户端(以透明方式)实际调用sell()之前被执行的。演讲者的基本观点是,虽然EJB 3非常好,但是它缺少某些特性:
- 依赖注入非常有限。它限定于特定类型,没有列表/地图等,并且仅注入JNDI中的内容。
- 拦截模型也非常有限。它是一个有缺陷的AOP解决方案(我的观点)。因此,您找不到简介、切入点模型、模块化方面等等,它是攻击性的。
一个论点是“EJB 3是2003年的DI和AOP”——我认为很难否认这一点……
所以,Pitchfork有点像是开源的“WebLogic Server”,它提供了EJB 3的BEA扩展,从而解决了上述问题(同时增加了更多问题)。新的WebLogic Server实际上集成了Spring 2.0,并对您的EJB 3施了些魔法,以允许您混合和匹配Spring bean和EJB 3 bean,并利用其他Spring功能(例如AOP)。因此,您能够拥有完整的Spring依赖注入,以及完整的AOP。您可以做的其他事情包括:EJB能够与Spring bean交互,反之亦然;每个EJB都是一个Spring bean;EJB将自动从Spring容器回调中获益;能够使用模块Spring方面等。
所有用户
这对于不使用WebLogic Server的其他用户来说意味着什么?我认为意义在于,它为应用服务器外的无状态会话bean和消息驱动bean等提供了“一个容器”。这在什么地方有用呢?一件使我震惊的事正在测试中。我原以为现在可以简单的仅使用Spring测试整个无状态会话bean,而无需应用服务器。很明显,一些诸如事务和安全性之类的东西仍然留在了容器中(或任何您从Spring得到的东西)。
讽刺之事
Rod表达了这种情况的讽刺性。一些Spring是从它们在(pre 3) EJB上的失败中诞生的。现在,为了处理Pitchfork内容,您需要使用一个可爱的名称在新的描述符文件中声明一些事: /META-INF/spring-ejb-jar.xml