转载:http://hqman.iteye.com/blog/92684,虽然是一篇很老的文章对于小白还是有很大的阅读价值。
对于理解J2EE集群技术不错的文章,虽然是Sun的技术人员撰写的,基本观点还算客观,内容深浅恰当,非常适合刚刚接触集群的朋友阅读,故此大胆翻译过来,放在这里和大家共享,错误难免,欢迎指正。
原链接
Uncover the hood of J2EE Clustering
===================================================================================
JNDI集群实现
J2EE规范要求所有的J2EE容器必须提供JNDI规范的实现。JNDI在J2EE应用程序中的主要角色是用来提供一个间接层,这样资源可以很容易被找到,而不用关心细节。这使得J2EE组件更加可复用。
拥用全特性的集群的JNDI对于J2EE集群是非常重要的。所有的EJB调用都开始于在JNDI树上查找它的Home接口,J2EE供应商根据他们的集群结构采用不同的方式实现JNDI集群。
共享全局JNDI树
WebLogic和Jboss都有一个全局的,共享的,集群范围的JNDI Context供客户端查找和绑定对象,绑定的全局JNDI Context中对象将通过IP广播的方式在集群中复制,这样当一台服务器实例停机后,被绑定的对象仍然可供查找。
图 14 共享的全局JNDI
如图14所示,共享的全局JNDI树实际包括了所有本地JNDI结点上绑定的对象。集群上每个结点都拥有自己的名称服务器,它们与集群中其他服务器相互复制所有的东西。这样每个名称服务器上都拥有其他名称服务器对象树的拷贝。这种冗余结构使得全局JNDI树高可用。
实际上,集群的JNDI树可以被用做两个目的。可以被管理员用来部署对象和服务。在一台服务中部署完EJB模块或JDBC&JMS服务后,JNDI树上的所有对象都将复制到其他服务器实例中。在运行期,程序可以JNDI API访问JNDI树存储或者获取对象,这些对象也将被全局复制。
独立JNDI
Jboss和WebLogic都采用了共享全局JNDI树的方式,Sun JES和IBM WebSphere等采用了每个服务器都拥有独立的JNDI树的方式。在使用独立JNDI树的集群中,成员服务器不必知道或关心集群中其他服务器。这是否意味着不想把JNDI集群呢?所有EJB访问都开始于在JNDI树上查找它们的Home接口,如果没有可集群的JNDI树,集群就根本无用。
实际上,如果J2EE应用程序是相似的,独立的JNDI树仍然可以获得高可用性。当集群中所有实例都有相同的设置以及都部署相同的应用程序集,我们说集群是“相似的”,这种情况下,一种被称为代理的特殊管理工具可以帮助我们获取高可用性,如图15所示:
图 15 独立JNDI
不管是Sun JES还是WebSphere都在集群的实例上安装了结点代理,当部署EJB模块或绑定其他JNDI服务,管理控制员可以向所有的代理发出命令,以此实现与共享全局JNDI相同的效果。
但是独立JNDI的方案不能支持复制在运行期绑定或获取的对象。有以下几个原因:JNDI在J2EE应用程序中的主要角色是用来提供管理外部资源的间接层,并不是用来做数据存储。如果有这样的需求,可以采用具有HA(高可用性)特性的独立的LDAP服务器或数据库。Sun和IBM自己都有这样拥有集群特性的独立的LDAP服务器产品。
中心JNDI
少数J2EE产品使用了中心JNDI方案,这种方案中名称服务器驻留在单一服务器中,所有的服务器实例都注册它们相同的EJB组件和管理对象到单一的服务器中。
名称服务器实现了高可用性,这对客户端是透明的。所有的客户端都在这台服务器中查找EJB组件,但是这种结构意味着复杂的安装和管理,慢慢被多数供应商抛弃。
初始化访问JNDI服务器
当然客户端要访问JNDI服务器的时候,它们需要知道远程JNDI服务器的主机名/IP地址和端口,在全局或是独立JNDI树的方案中,有多个JNDI服务器。客户端第一次访问时应该连接哪个呢?如何获得负载均衡和失效转移呢?
从技术上说,一个软件或硬件负载均衡器可以设在远程客户端和所有的JNDI服务器之间执行负载均和失效转移。但是,很少有供应商实现这种方式,这里有些简单的方案:
lSun JES和Jboss 实现JNDI集群是在“java.naming.provider.url”属性中设置一列用逗号分隔的URL,如java.naming.provider.url=server1:1100,server2:1100:server3.1100:server4.1100客户端将挨个联系列表中的服务器,一旦其中一个响应了便中止。
lJboss同时也实现了自动发现的特性,当设置属性串“java.naming.provider.url”为空时,客户端将试图通过网络广播来发现在一个JNDI服务器。
相关推荐
### J2EE扫盲之-揭开J2EE集群的神秘面纱 #### 1. 前言 随着互联网业务的迅速发展与企业信息化水平的不断提升,越来越多的关键性应用程序选择基于J2EE(Java 2 Platform, Enterprise Edition)平台进行构建。例如,...
5.JNDI集群实现 5.1.共享全局JNDI树 5.2.独立的JNDI 5.3.中央集中JNDI 5.4.初始化对JNDI服务器的访问 6.EJB集群实现 6.1.SMART STUB 6.2.IIOP运行库 6.3.拦截代理 6.4.EJB的集群支持 6.4.1.EJBHome Stub的集群支持 ...
- 解释负载均衡和集群的概念,以及它们在J2EE中的应用。 10. **开发工具与框架** - 常见的J2EE开发工具有哪些?(如:Eclipse、IntelliJ IDEA、NetBeans) - 介绍Spring框架在J2EE开发中的作用,以及Spring MVC...
### Java-J2EE Job Interview知识点概览 #### 一、Java基础知识点 1. **Java基础知识**: - Java语言特点:面向对象、平台无关性、自动垃圾回收、安全性等。 - 数据类型:基本数据类型(如int、double)与引用...
这份"java面试之------J2EE测试题1.rar"压缩包显然包含了针对J2EE面试的一系列问题,旨在帮助求职者准备相关面试。以下是对J2EE的一些关键知识点的详细解释: 1. **Servlet**:Servlet是Java Web应用的核心组件,它...
《李兴华--J2EE核心框架 笔记》是一份深入探讨J2EE核心技术的珍贵资料,由知名讲师李兴华倾力打造。这份笔记集合了他在教学过程中的精华内容,旨在帮助学习者全面理解和掌握J2EE开发的关键概念和技术。 首先,J2EE...
EJB用于实现业务逻辑,而JPA则是Java平台上的ORM(对象关系映射)标准,帮助开发者处理数据库操作。在本案例中,"jboss-web.xml"、"jndi.properties"和"oracle-ds.xml"是针对EJB+JPA在JBoss应用服务器中的配置文件,...
《J2EE完全参考手册-J2EE部署》是IT领域一本极为重要的参考资料,尤其对于Java企业级应用开发者来说,它是理解和掌握J2EE部署的关键工具。J2EE(Java 2 Platform, Enterprise Edition)是Oracle公司提供的一个用于...
《J2EE完全参考手册-J2EE部署》是IT领域中一本重要的技术指南,它深入讲解了Java企业版(J2EE,现称为Java EE)的部署机制和技术。J2EE是一个广泛使用的开放标准,旨在简化开发和部署分布式企业级应用。这本书详细...
Java-J2EE体系是企业级应用开发的重要框架,它提供了丰富的功能和服务,使得开发者能够构建高效、可扩展的分布式应用程序。这个"java-j2ee体系chm帮助文档大全"包含了关于Java和J2EE的详细指导,对于学习和理解这个...
**J2EE完全参考手册-J2EE概述** J2EE(Java 2 Platform, Enterprise Edition)是Oracle公司推出的企业级应用程序开发平台,主要用于构建分布式、多层架构的应用系统。这个平台基于Java语言,提供了一整套服务、接口...
这个"各种jar下载-J2EE"的资源集合,很可能是提供了一些常用的J2EE相关的库文件,方便开发者在构建企业级应用时使用。 首先,J2EE的核心组件包括Servlet、JSP(JavaServer Pages)、EJB(Enterprise JavaBeans)、...
本书不仅详细解释了集群的基本术语,还介绍了J2EE集群的具体实现,包括WEB层、JNDI、EJB以及JMS和数据库连接的集群支持,同时揭示了一些关于J2EE集群的常见误区。 ### 基本术语 #### 可扩展性 可扩展性是指系统...
《J2EE完全参考手册-J2EE部署-pdf.rar》是一个针对Java初学者的资源包,主要聚焦于J2EE(Java 2 Platform, Enterprise Edition)的部署知识。J2EE是Oracle公司推出的企业级Java应用平台,用于构建分布式、多层的Web...
【J2EE与中间件技术-J2EE应用】 Java 企业版(J2EE,现称为Java EE)是Oracle公司推出的用于开发企业级分布式应用程序的平台。它建立在中间件之上,提供了一套标准和规范,使开发者可以构建可扩展、高可用性和安全...
$ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar [-C] [command] [-A] [address] where: -C - command executed in the remote classfile. (optional , default command is "open /Applications/...
### JMS -- J2EE培训材料 #### 一、引言 JMS(Java Message Service)是Java平台中关于面向消息中间件(MOM)的标准API,它允许应用程序组件生成、发送、接收和读取消息。它旨在促进分布式系统中的组件之间松散耦合...
《Manning - J2EE and XML Development》这本书深入探讨了Java企业版(J2EE)平台与XML技术在开发中的融合应用。J2EE是Java技术的重要组成部分,它为企业级应用提供了一套全面的框架和服务,包括事务处理、安全、...