J2EE集群开发部署实战<o:p></o:p>
概述
一个集群系统是一群松散结合的服务器组,形成一个虚拟的服务器,为客户端用户提供统一的服务。对于这个客户端来说,通常在访问集群系统时不会意识到它的服务是由具体的哪一台服务器提供。集群系统一般应具高可用性、可伸缩性、负载均衡、故障恢复和可维护性等特殊性能。越来越多的关键任务和大型应用正运行在J2EE平台上,象银行之类的应用要求很高的可用性(HA),大型系统比如大型网站则要求更好的伸缩性。J2EE集群是最常用的技术,用来提供高可用性和伸缩性的容错服务,单机部署和多机集群化部署差别很大,网上的资料大多语焉不详,即使文档图文并茂,也是到了关键处就部署成功,其实后面还要做些工作才行,且多以单机部署多个server来模拟集群化部署,其实和真正多机部署还是有比较大的差别。本文仅以weblogic应用服务器为例说明集群化部署。
集群层次说明
Web级集群,是J2EE集群中最重要和基础的功能。web层集群技术包括:Web负载均衡和HTTPSession失效转移。web负载均衡,基本的是在浏览器和web服务器之间放置负载均衡器。<o:p></o:p>
应用级集群,是ejb集群,EJB是J2EE应用平台的核心,EJB是用于开发和部署具多层结构的、分布式的、面向对象的Java应用系统跨平台的构件体系结构。主要是业务应用,部署在EJB容器上。<o:p></o:p>
数据库级集群,是oracle数据库设置多个数据库实例,全部映射到数据库。
Weblogic集群概念
Ø Domain:由配置为Administrator Server的WebLogic Server实例管理的逻辑单元,这个单元是有所有相关资源的集合。
Ø Server: 一个相对独立的,为实现某些特定功能而结合在一起的单元。按功能可分为domain server 和managed server。一个Domain 可以包含一个或多个WebLogic Server实例,甚至是Server集群。一个Domain中有一个且只能有一个Server 担任管理Server的功能,其它的Server具体实现一个特定的逻辑功能。
Ø Domain Server:在一个集群中,有且仅有一个domain server,即管理server,该server只负责管理多个Managed server(被管理server),即domain server仅仅是行政领导,考勤之类的活动,如某个managed Sever的状态,是未知(unKnown),还是运行(run),还是停止(shutdown),远程启动等等,不负责具体业务。因此部署时domain server上不要部署具体任务,毕竟人家是当官的吗。
Ø Managed Server:真正的实干家,部署具体的应用。应用及业务逻辑组件被分发在多个受管服务器(Managed Server)。<o:p></o:p>
Weblogic集群要求
Ø 集群中的所有Server必须位于同一网段,并且必须是IP广播(UDP)可到达的
Ø 集群中的所有Server必须使用相同的版本,包括Service Pack
Ø 集群中的Server必须使用永久的静态IP地址。动态IP地址分配不能用于集群环境。如果服务器位于防火墙后面,而客户机位于防火墙外面,那么服务器必须有公共的静态IP地址,只有这样,客户端才能访问服务器 <o:p></o:p>
Ø 使用weblogic的支持集群的licence<o:p></o:p>
项目实战
项目概况
我们的项目是struts—ejb—hibernate—spring,因为hibernate和spring都必须进行初始化且初始化都依赖于servlet,在系统启动时就初始化数据,并且我们在web层和ejb层分别部署为web集群和ejb集群,而hibernate和spring都部署在应用服务器上。为此,我们打了两个部署包,一个是cnlife.war, cnlife_app.ear,其中cnlife.war包部署在web集群上,cnlife
_app.ear部署在ejb集群上,cnlife_app.ear包括两个包,其中一个是cnlifeejb.jar(ejb包),
另外一个是backgroudinit.war,backgroudinit.war用来初始化spring,hibernate的初始化数据。
<o:p> </o:p>
cnlife.war (部署在Web Server)
_backgroudinit.war
|
cnlife_app.ear-| (部署在 Application Server)
|_cnlifeejb.jar
<o:p> </o:p>
Ejb是stateless Session bean,使用ejb的目的就是应用服务器集群,部署示意图如下:
<v:shapetype o:spt="75" coordsize="21600,21600" filled="f" stroked="f" id="_x0000_t75" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" o:connecttype="rect" gradientshapeok="t"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" o:ole="" style="WIDTH: 414.75pt; HEIGHT: 109.5pt"><v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtml1\01\clip_image001.emz" o:title=""></v:imagedata></v:shape>
Web级集群
Web集群中使用内存复制策略<o:p></o:p>
weblogic.xml 如下
<!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application <o:p></o:p>
8.1//EN" "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd"><o:p></o:p>
<o:p> </o:p>
<weblogic-web-app><o:p></o:p>
<session-descriptor><o:p></o:p>
<session-param> <param-name>PersistentStoreType</param-name> <param-value>replicated</param-value> </session-param> <o:p></o:p>
</session-descriptor><o:p></o:p>
</weblogic-web-app><o:p></o:p>
使用JNDI连接EJB集群<o:p></o:p>
Web集群使用JNDI连接EJB集群时,首先在初始化context时,使用如下方式<o:p></o:p>
public static final String PROVIDER_URL = "t3://<st1:chsdate isrocdate="False" month="12" day="30" islunardate="False" w:st="on" year="1899">10.10.21</st1:chsdate>.13,10.10.21.14:8001";<o:p></o:p>
其中<st1:chsdate isrocdate="False" month="12" day="30" islunardate="False" w:st="on" year="1899">10.10.21</st1:chsdate>.13,10.10.21.14是集群中EJB集群中的Management Server地址。<o:p></o:p>
书写规则是:
Managed server使用相同端口号,“t3://acme1,acme2,acme3:<st1:chmetcnv tcsc="0" hasspace="False" sourcevalue="7001" negative="False" numbertype="1" unitname="”" w:st="on">7001”</st1:chmetcnv>
Managed server使用不同端口号,“t3://node1:7001,node2:7002,node3:<st1:chmetcnv tcsc="0" hasspace="False" sourcevalue="7003" negative="False" numbertype="1" unitname="”" w:st="on">7003”</st1:chmetcnv>
Weblogic Proxy<o:p></o:p>
Web级集群负载均衡器,可以使用硬件(如交换机),专门的负载均衡器(如aparche的负载均衡器),我们使用weblogic的软件均衡器,该均衡器除了负载均衡外,还有失效处理机制。<o:p></o:p>
Weblogic.xml<o:p></o:p>
<!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd"><o:p></o:p>
<o:p> </o:p>
<weblogic-web-app> <o:p></o:p>
<context-root>/</context-root><o:p></o:p>
</weblogic-web-app><o:p></o:p>
<o:p> </o:p>
Web.xml<o:p></o:p>
!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <o:p></o:p>
<web-app><o:p></o:p>
<servlet><o:p></o:p>
<servlet-name>HttpClusterServlet</servlet-name><o:p></o:p>
<servlet-class><o:p></o:p>
weblogic.servlet.proxy.HttpClusterServlet<o:p></o:p>
</servlet-class><o:p></o:p>
<init-param><o:p></o:p>
<param-name>WebLogicCluster</param-name><o:p></o:p>
<param-value><o:p></o:p>
<st1:chsdate isrocdate="False" month="12" day="30" islunardate="False" w:st="on" year="1899">10.10.21</st1:chsdate>.13:8001|10.10.21.14:8001<o:p></o:p>
</param-value><o:p></o:p>
</init-param><o:p></o:p>
<init-param><o:p></o:p>
<param-name>DebugConfigInfo</param-name><o:p></o:p>
<param-value>ON</param-value><o:p></o:p>
</init-param><o:p></o:p>
<init-param><o:p></o:p>
<param-name>verbose</param-name> <o:p></o:p>
<param-value>true</param-value> <o:p></o:p>
</init-param><o:p></o:p>
</servlet><o:p></o:p>
<o:p> </o:p>
<servlet-mapping><o:p></o:p>
<servlet-name>HttpClusterServlet</servlet-name><o:p></o:p>
<url-pattern>/</url-pattern><o:p></o:p>
</servlet-mapping><o:p></o:p>
<o:p> </o:p>
<servlet-mapping><o:p></o:p>
<servlet-name>HttpClusterServlet</servlet-name><o:p></o:p>
<url-pattern>*.jsp</url-pattern><o:p></o:p>
</servlet-mapping><o:p></o:p>
<o:p> </o:p>
<servlet-mapping><o:p></o:p>
<servlet-name>HttpClusterServlet</servlet-name><o:p></o:p>
<url-pattern>*.htm</url-pattern><o:p></o:p>
</servlet-mapping><o:p></o:p>
<o:p> </o:p>
<servlet-mapping><o:p></o:p>
<servlet-name>HttpClusterServlet</servlet-name><o:p></o:p>
<url-pattern>*.html</url-pattern><o:p></o:p>
</servlet-mapping><o:p></o:p>
</web-app><o:p></o:p>
其中“<st1:chsdate isrocdate="False" month="12" day="30" islunardate="False" w:st="on" year="1899">10.10.21</st1:chsdate>.13:8001|10.10.21.14:<st1:chmetcnv tcsc="0" hasspace="False" sourcevalue="8001" negative="False" numbertype="1" unitname="”" w:st="on">8001”</st1:chmetcnv>表示用作web集群中的机器地址及端口,用竖线分开。<o:p></o:p>
EJB级集群
设置集群地址<o:p></o:p>
设置集群地址,其中的ip地址为managed server的地址和端口号,多个managed server使用“,”隔开。
Hibernate配置文件设置数据源<o:p></o:p>
使用weblogic连接池配置hibernate配置文件:(片断),其中mypool是数据源的JNDI
<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
<property name="hibernate.connection.datasource">mypool</property>
<property name="hibernate.connection.provider_class">org.hibernate.connection.DatasourceConnectionProvider</property>
<property name="hibernate.session_factory_name">hibernate.session_factory</property>
<property name="hibernate.jndi.class">weblogic.jndi.WLInitialContextFactory</property>
<property name="hibernate.jndi.url">t3://localhost:7001/</property>
<property name="hibernate.jdbc.fetch_size">50</property>
<property name="hibernate.jdbc.batch_size">25</property>
<property name="show_sql">true</property>
WebLogic EJB JNDI注意事项<o:p></o:p>
JNDI 表示必须使用“.”隔开,在单机上使用“/”也可以,但在集群中不要使用“/”<o:p></o:p>
<weblogic-enterprise-bean><o:p></o:p>
<ejb-name>DestroyAccountEJB</ejb-name><o:p></o:p>
&
分享到:
相关推荐
在IT行业中,J2EE(Java 2 ...- 实战案例分析,展示如何在实际项目中部署和维护J2EE集群 通过深入学习这份资料,你将能够理解和掌握J2EE集群的关键技术和最佳实践,为构建高效、稳定的企业级应用环境打下坚实基础。
《实战J2EE与WebLogic Server应用开发》一书涵盖了J2EE企业级应用程序开发以及Oracle的WebLogic Server服务器的深度使用。J2EE(Java 2 Platform, Enterprise Edition)是Java平台上用于构建分布式、多层的企业级...
《基于JBOSS的J2EE开发》是一本专注于在JBOSS应用服务器上进行J2EE应用程序开发的专业书籍。J2EE(Java 2 Platform, Enterprise Edition)是Oracle公司提供的一个用于构建企业级分布式应用的平台,它包含了多种服务...
《基于JBoss 4.x的J2EE 1.4应用开发指南》是一本专为开发者设计的详尽教程,旨在帮助读者掌握如何在JBoss 4.x应用服务器上开发和部署J2EE 1.4标准的应用程序。这本书深入探讨了JBoss 4.x与J2EE 1.4规范的集成,以及...
4. **性能优化与调优**:讲解如何针对J2EE应用进行性能评估、瓶颈识别和优化,可能涉及容器配置调整、缓存策略、负载均衡和集群技术。 5. **安全与权限控制**:阐述J2EE的安全机制,如JAAS(Java Authentication ...
通过学习《Java.Web应用开发.J2EE和Tomcat第2版》,开发者不仅可以掌握构建Web应用的基础知识,还能了解到如何在Tomcat上部署和管理J2EE应用,从而在实际项目中更高效地开发和维护企业级系统。书中的案例和实战指导...
- **容器化技术**:学习Docker容器技术,理解Kubernetes集群管理,提高应用部署和运维效率。 - **云平台**:熟悉AWS、Azure、Google Cloud等云服务提供商的平台和服务,掌握云原生开发模式。 - **持续集成/持续部署...
5. **综合实战**:结合以上知识,进行一个简单的J2EE应用开发,例如开发一个用户注册登录系统,涉及前端展示、后端业务逻辑处理和数据库交互。 通过这个"j2ee.rar_blog_jbuilder_oracle_weblogic_windows"教程,你...
WebLogic Server的配置和使用是J2EE开发者必须掌握的基础技能,包括创建域、部署应用、集群设置以及性能监控等。 另一方面,JBuilder是由Borland公司开发的一款集成开发环境(IDE),专门针对Java语言,尤其适合...
这些特性包括但不限于Web服务、事务管理、消息传递、安全性和集群等功能。 - **核心组件**: - **Servlet**:用于处理客户端HTTP请求的标准接口。 - **JavaServer Pages (JSP)**:一种混合HTML代码与Java代码的...
本课程基于企业大数据经典案例项目(大数据日志分析),全方位、全流程讲解 大数据项目的业务分析、技术选型、架构设计、集群规划、安装部署、整合继承与开发和web可视化交互设计。 不管是零基础的大数据技术爱好者...
- **集群**:WebLogic支持集群部署,可以提高应用的可用性和性能。 - **安全管理**:包括用户认证、授权、加密和审计等,确保企业级应用的安全。 - **监控和诊断**:WebLogic Server提供强大的管理工具,用于监控...
《J2EE电子商务分销管理系统的设计与开发》是一个深入探讨企业级电子商务...本项目适合J2EE初学者和进阶开发者学习,通过实战案例,能够深入理解J2EE在电子商务分销管理中的应用,提升开发和设计大型企业级应用的能力。
【EOS6中级开发实战】是面向EOS6学习者的一份宝贵资料,主要涵盖了EOS产品的基本介绍、基于SOA(Service-Oriented Architecture)的技术架构、EOS的特性、开发版的安装以及EOS的开发实践等内容。以下是对这些知识点...
J2EE是一种广泛使用的Java平台标准,用于开发和部署可伸缩的、健壮的多层企业应用程序。J2EE定义了一系列的服务和技术组件,如EJB(Enterprise JavaBeans)、JMS(Java Messaging Service)、JDBC(Java Database ...
《Java实战项目 - 企业人力资源管理系统》是一款基于J2EE技术的企业级应用,旨在帮助企业高效地管理和维护其人力资源。此项目包含完整的源码,并且附带详细的配置文件,为开发者提供了一个深入理解J2EE技术及其在...
综上所述,《J2EE - JBoss - EJB with Eclipse》这一主题涵盖了从Java EE基础,到EJB设计与开发,再到Eclipse集成开发环境下的实战应用,是学习和理解企业级Java开发的重要参考资料。通过深入学习和实践,开发者可以...
- **互联网UNIX/Linux系统集群**:课程覆盖了从基础到进阶的集群构建、管理与优化,包括但不限于Nginx集群、MySQL集群、J2EE集群、RHCS及Heartbeat高可用企业级容错集群、LVS高性能可动态扩展负载均衡集群等内容。...
7. **挑战与进阶**:在掌握基本技术后,可以尝试解决更复杂的问题,如集群部署、负载均衡、性能优化等。同时,还可以研究其他J2EE相关的技术,如JSF(JavaServer Faces)或CDI(Contexts and Dependency Injection)...