<%@ page contentType="text/html; charset=gb2312"%> Java 理论与实践:让 J2EE 脱离容器
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
Java 理论与实践:让 J2EE 脱离容器
     发布者: 发布时间:2007-11-26
大多数项目不是属于 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 中,大多数生产者/使用者任务的本性是允许并发处理的。大多数项目不是属于 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 中,大多数生产者/使用者任务的本性是允许并发处理的。在 JBoss 发行版的 jnpserver.jar JAR 文件中可以找到 JNP JNDI 服务器,它还依赖于 log4j 日志引擎。要使用它,必须配置 log4j,创建相应的 jndi.properties 文件(参见清单 1),并安排通过调用同一 JVM 或者另一个 JVM 中的 org.jnp.server.Main 的主入口点来启动服务器。访问 JNDI 名称空间的类文件在 JBoss 发行版的 jnpclient.jar JAR 文件中。清单 1. JNPServer 的 jndi.propertiesjava.naming.factory.initial=org.jnp.interfaces.NamingContextFactoryjava.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces# Uncomment this line only if the JNDI server is to run in another JVM;# otherwise, local JNDI requests will go over RMI#java.naming.provider.url=localhostJava 管理扩展(JMX)Java 管理扩展(Java Management Extensions,JMX)是一种管理组件和服务的生命周期的机制。JBoss 大量使用 JMX??JBoss 中的几乎所有组件都作为 JMX 服务提供。结果就是很容易配置一个只包括所需服务的应用程序。对于每一个组件服务,创建一个名为 MBean (托管的 bean)对象,它包含生命周期方法(start() 和 stop())和公开属性的 getter 和 setter。清单 2 显示了描述一个简单 Web 容器服务的 MBean 接口:清单 2. 简单 Web 容器服务的 MBean 接口public interface WebServerMBean {// Lifecycle methodsvoid create() throws Exception;void start() throws Exception;void stop();void destroy();// Getter and setter for listener-port propertyint getPort();void setPort(int port);// Get the names of loaded Web applicationsString[] getWebApplications();}JBoss 还包括一个 Web 应用程序(jmx-console),它可以查看当前装载到 JBoss 服务器中的 MBeans、检查它们当前的状态、并用浏览器读取和写入它们的属性。(JMX 参考实现还包括一个名为 HtmlAdapter 的 Web 应用程序。)虽然 JMX 是为 J2EE 提供的,但是也可以在 J2SE 应用程序中容易地使用它。至少有两个免费的 JMX 实现,Sun 的参考实现和开放源代码 MX4J。编写一个 MBean 以描述一个组件是相当简单的??通常所要做的就是实现 start() 和stop() 方法。编写一个简单的装载一组 MBean 并启动它们的 JMS “容器”只需约 40 行代码。遵循 JMX 标准,不但得到使用 JMS 的好处,比如远程属性检查和操纵(这对于调试及管理都有好处),而且还可以更容易地编写可以轻易地同时运行在 J2SE 和 J2EE 环境中的组件。结束语虽然 J2EE 和 J2SE 是用于不同工作的不同工具,但是许多开发人员发现自己必须决定各种框架服务的“轻量级”和“重量级”实现,比如消息、配置或者管理。通过使用 J2EE 接口的较轻量级的实现,如 Somnifugi JMS,开发人员可以在短期内得到性能和易于使用的好处,同时又具有在将来需要时,可以容易地迁移到更重量级的解决方案的灵活性。
(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
使用acegi在业务逻辑层获得Web层的用户ID
基于Web2.0的AJAX十大安全漏洞以及成因
J2EE程序员应该掌握的Linux系统的知识
用RMI和CORBA进行分布式Java编程
Sun ONE 白皮书
SOAP--新一轮竞争的三八线?(二)
 
最近评论:
        
鍥炲
        
那个雨天的想法!
wow gold,wow power leveling.wow power leveling,wow power leveling, max(1083)
        
如果真的有来生!
四川旅游,九寨沟旅游,稻城亚丁旅游,四姑娘山旅游,海螺沟旅游,西藏旅游, max(537)
        
左边的风景!
wow gold,wow power leveling.wow power leveling,wow power leveling, max(7148)
        
轻轻走过你的窗前!
world of warcraft gold,cheap world of warcraft gold,warcraft gold,world of warcraft gold,cheap world of warcraft gold,warcraft gold, max(2004)
        
轻轻走过你的窗前!
world of warcraft gold,cheap world of warcraft gold,warcraft gold,world of warcraft gold,cheap world of warcraft gold,warcraft gold max(8417)
        
不在的哪天!
final fantasy xi gil,final fantasy xi gil,final fantasy xi gil,final fantasy xi gil, max(3908)
        
快乐情人节!
wow gold,wow gold,wow gold,wow gold,wow gold,wow gold,wow gold buy wow gold for cheap. max(5414)
        
昨夜的狂想曲!
wow gold,WoW Gold,world of warcraft gold,WoW Gold, max(6180)
        
没有情人的情人节!
wow gold,wow power leveling.wow power leveling,wow power leveling, max(9767)
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号