background image

Java 程序员:

 

让 J2EE 脱离容器

 

大多数项目不是属于 J2EE 

 

应用程序就是属于 J2SE 

 

应用程序。不过,有一些 J2EE 技术可

 

以存在于 J2EE 

 

容器之外,并且有些 J2SE 应用程序可以对它们加以利用。本月,Brian 

Goetz 

 

分析如何在 J2SE 

 

应用程序中使用某些 J2EE 服务。在大多数情况下,Java 应用程序

 

要么是 J2EE 

 

应用程序、要么是 J2SE 应用程序,并且在这一点上是泾渭分明的。J2EE 应用

 

程序需要 J2EE 

 

容器的服务,容器要实现一长串的 J2EE API

 

,包括 Enterprise JavaBean 

(EJB)、JTA、JNDI、JMS、JCA 

 

和 JMX。J2EE API 设计为协同工作;毕竟,J2EE 设计是从多年

来数百人开发企业应用程序的经验中提取出的公共需求。像所有框架一样,J2EE API 的主

要目的是 不重新发明轮子 。

 

  有一些 API 

 

属于 J2EE 

 

规范的一部分,但是可以很容易地在 J2SE 应用程序中使用,

 

如 JDBC、JSP   

和 servlet

 

,但是对于大多数 J2EE API,J2EE 是一个要么是要么不是的命

题??

 

大多数 J2EE API 

 

需要全功能的 J2EE 容器。不过,有一些服务器应用程序开发为 

J2SE 

 

应用程序而非 J2EE 应用程序,这通常都有很好的理由。为什么这些应用程序的开发

人员必须重新发明轮子呢?J2EE 

 

中是否有部分内容可以容易地被 J2SE 应用程序借用来提

供同样的优点呢?

 

什么组件可以同时用于 J2EE   

和 J2SE 应用程序的组件呢?

  松散耦合
  J2EE 

 

的一个主要设计原理是 J2EE 应用程序可以松散地耦合??用组件组装,在组装

或者部署应用程序时而不是在组件开发时定义或者改变这些组件的相互连接。 J2EE 组件

 

使用 JNDI 

 

相互查找和查找所需要的资源,如 JDBC   

和 JMS 连接。JMS 这样的技术鼓励松

 

散耦合,允许灵活地为工作流程建模、容易分配处理任务、可伸缩性和容错性。很多 J2SE 
服务器应用程序也可以从这些技术和原理中受益。

 

  像 JDBC、JMS   

和 JNDI 

 

这样的 API 

基本上是 中间件 ??它们作为应用程序与不同的

 

服务提供者之间的统一接口。几乎每一个数据库服务器都有 JDBC 驱动程序,有大量的免

 

费数据库服务器,所以几乎每一个希望利用数据库的 Java 应用程序都可以容易地做到这

 

一点。不过,对于 JMS 就不是这样了。消息队列服务器远没有数据库这样常见,特别是在
小型商店中。但是有大量的应用程序可以通过使用消息队列而极大地受益。
  Somnifugi JMS
  消息队列是一个功能强大的范例,它用于构建健壮的、灵活的、松散耦合的、可伸缩的

 

应用程序。有一些商业消息队列产品,如 WebSphere MQ、Sonic、Fiorano、JBossMQ 和 
SpiritWave

 

。就像 JDBC 对于数据库一样,JMS 是消息的中间件??它使得应用程序可以通

 

过统一的接口访问不同的消息队列产品,这个接口提供了像 Connection、Topic 和 Message 
这样的抽象。

 

  许多 J2SE 

 

应用程序使用某种形式的消息队列,但是不使用 JMS??而是使用线程池、

工作队列、任务管理器等。AWT   

和 Swing 框架使用消息(事件)在模型与视图层之间通信,

JavaBean 组件利用监听器支持一种基于主题的消息。消息队列提供了很多结构上的优点??
它固有的松散耦合有利于采用灵活的、基于组件的方法,并提供了有助于简化设计和减少
互连的天然抽象边界。一个附带的好处是,MQ 范例使得分布式的、可伸缩的和容错的设

 

计变得更容易了,因为消息生产者和使用者不一定需要运行在同一 JVM 中,大多数生产